对 Head META Description 的一些改进

Posted by David on 2008-03-14 in Blog Related

冰仔的博客上看见对插件 Head META Description 的介绍,文中提及 Google 建议使用 description 元描述来优化 Google 对搜索结果条目的描述,方便用户辨别需要的信息。我很认同,虽然现在元描述不会影响页面在搜索结果中的排名,但使用元描述也算间接改进用户体验,对吸引点击有潜在的帮助。下面两张图片对比或许可以说明问题:

no-description

没有设置元描述,搜索结果描述中多了一些不是非常必需的内容,占用了本来就少的显示空间

use-description

按照 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 字段内容,因为那样的话每个分页的元描述就又相同了。

Tags: , , , .

Comments

  1. 1 life97

    David同志,好像分页判断无效,改为>或<都无效。分页照样产生description.是不是升级到2.7版本的缘故?

  2. 2 David
  3. 3 life97

    @David: 太谢谢你了。终于搞掂了,可以不同分页都取不同的description了。都不怎么谢谢你才好,在江东那里提问也得到你的答复。不过你的博倒很难见有更新,但到处可见你的足迹,还这么热心帮助人。呵呵……

  4. 4 1234成人

    很不错的修改

  5. 5 华晨

    你的第二幅图的描述写的真的很好! ❗

  6. 6 David

    @华晨: 如实描述而已,呵呵

Leave a Reply

You can use these XHTML tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>