对 Head META Description 的一些改进
在冰仔的博客上看见对插件 Head META Description 的介绍,文中提及 Google 建议使用 description 元描述来优化 Google 对搜索结果条目的描述,方便用户辨别需要的信息。我很认同,虽然现在元描述不会影响页面在搜索结果中的排名,但使用元描述也算间接改进用户体验,对吸引点击有潜在的帮助。下面两张图片对比或许可以说明问题:
没有设置元描述,搜索结果描述中多了一些不是非常必需的内容,占用了本来就少的显示空间
按照 Google 的说法,这是比较高质量的元描述页面摘要
下载了 Head META Description 插件使用,在使用过程中发现了一些问题。下面的内容是对插件改进的一些讨论。
避免输出全文
Head META Description 使用日志摘要或截取日志正文内容的一部分来作为元描述内容,但是大部分时候会将全文作为元描述内容。看了一下插件代码才明白,原来插件通过空格来计算文字长度,这对于英文之类的文字自然是没有什么问题,因为它们本来就是用空格来区分单词的,但对于中文来说就会有问题了。若改成按照段落来截取文字,那就可以兼容多种语系了。下面给处修改方法:
将以下代码
$text = str_replace(array("\r\n", "\r", "\n", " "), " ", $text);
$text = str_replace(array("\""), "", $text);
$text = trim(strip_tags($text));
$text = explode(' ', $text);
修改成:
// 这行不需要了
//$text = str_replace(array("\r\n", "\r", "\n", " "), " ", $text);
// 这里可能会产生多余的换行,所以移到前面来
$text = trim(strip_tags($text));
// 删除多余的空行
$text = preg_replace("/(\s*?\r?\n\s*?)+/","\n",$text);
$text = str_replace(array("\""), "", $text);
// 拆分段落
$text = explode("\n", $text);
经过修改之后插件提供的修改参数 $post_desc_length 实际上代表是要截取的段落数了,一般设置成 3 就可以了。
避免分页文章输出相同元描述
在使用的过程中又发现,插件没有对分页文章(看来最近我是和分页文章较上劲了-_-!)做相应判断,以至于每一个分页的元描述内容都是相同的,而 Google 不建议采用相同或相似的描述的。那就继续改进吧。
找到 $text = $post->post_content;
这一行,在下面添加以下代码:
// 日志页码
$page = get_query_var('page');
if ( !$page )
$page = 1;
// 如果页码大于 1 说明当前日志使用了 WP 自带的分页功能
if ( $page < 1 ) {
// 按页拆分日志 请将下面一行的方括号[]用尖括号<>代替
$pages = explode('[!--nextpage--]', $text);
// 获取当页内容
$text = $pages[$page-1];
}
这里不用考虑没有填写日志摘要的情况或者自定义了 description 字段内容,因为那样的话每个分页的元描述就又相同了。
Comments
David同志,好像分页判断无效,改为>或<都无效。分页照样产生description.是不是升级到2.7版本的缘故?
@life97: 试试 http://img.voidman.com/wp/2009/01/title-and-description-for-paged-post.phps ,应该能用
@David: 太谢谢你了。终于搞掂了,可以不同分页都取不同的description了。都不怎么谢谢你才好,在江东那里提问也得到你的答复。不过你的博倒很难见有更新,但到处可见你的足迹,还这么热心帮助人。呵呵……
很不错的修改
你的第二幅图的描述写的真的很好! ❗
@华晨: 如实描述而已,呵呵
Leave a Reply