SEO WordPress的Description、Keywords和Title(完整版)


且看之前的两篇文章,关于SEO WP博客的Description、Keywords和Title。(有什么不明白的话也可看这两篇文章,有详细的分析。)

最近又挺多童鞋过来问要关于Page页面和分类页面的Description和Keywords。研究了一下,终于通了。完整版诞生。功能可与All in One SEO 插件相媲美。这下你们是可以彻底丢掉All in One SEO 插件了。

推荐的修改方法:

在header.php,原始的title是这样的:

<title><?php wp_title('&laquo;', true, 'right'); ?> <?php bloginfo('name'); ?></title>

修改为:

<?php include_once("desc.php"); ?>

你只要把下面的代码保存在desc.php就OK了。(如果有中文的话,记得另存为文件的编码是UTF-8。切记)。把desc.php上传到你的主题的目录下。

SEO WordPress的Description、Keywords和Title(通用版)

Title是覆盖所有的页面的了。通用版的Description和Keywords就只有首页和文章页面的。

把下面的代码另存为desc.php就行了。细节问题自行改动。

<!--Title Begin, By Lc.-->
<?php if ( is_home() ) { ?><title><?php bloginfo('name'); ?> | <?php bloginfo('description'); ?></title><?php } ?>
<?php if ( is_search() ) { ?><title>搜索结果 | <?php bloginfo('name'); ?></title><?php } ?>
<?php if ( is_single() ) { ?><title><?php echo trim(wp_title('',0)); ?> | <?php bloginfo('name'); ?></title><?php } ?>
<?php if ( is_page() ) { ?><title><?php echo trim(wp_title('',0)); ?> | <?php bloginfo('name'); ?></title><?php } ?>
<?php if ( is_category() ) { ?><title><?php single_cat_title(); ?> | <?php bloginfo('name'); ?></title><?php } ?>
<?php if ( is_month() ) { ?><title><?php the_time('F'); ?> | <?php bloginfo('name'); ?></title><?php } ?>
<?php if (function_exists('is_tag')) { if ( is_tag() ) { ?><title><?php  single_tag_title("", true); ?> | <?php bloginfo('name'); ?></title><?php } ?> <?php } ?>
<?php
##定义一个函数.解决截取中文乱码的问题
if (!function_exists('utf8Substr')) {
 function utf8Substr($str, $from, $len)
 {
     return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
          '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
          '$1',$str);
 }
}
if ( is_home() ){
    $description = "我们身处急速上涨的数据海洋中…我们如何避免信息的没顶之灾呢?柳城博客(Lc.)∷关注生物信息学,分享学习Linux、PHP+Mysql、Perl/BioPerl等的心得,努力在数据的海洋里畅游。";
    $keywords = "生物信息学,Perl,Bioperl,PHP,Mysql,Linux,NCBI,摄影";
}
elseif ( is_single() ){
    if ($post->post_excerpt) {
        $description  = $post->post_excerpt;
    } else {
   if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){
    $post_content = $result['1'];
   } else {
    $post_content_r = explode("\n",trim(strip_tags($post->post_content)));
    $post_content = $post_content_r['0'];
   }
         $description = utf8Substr($post_content,0,220);  
  }
 
    $keywords = "";     
    $tags = wp_get_post_tags($post->ID);
    foreach ($tags as $tag ) {
        $keywords = $keywords . $tag->name . ",";
    }
}
?>
<?php echo "\n"; ?>
<meta name="description" content="<?php echo trim($description); ?>" />
<meta name="keywords" content="<?php echo rtrim($keywords,','); ?>" />
<!--Description & Keywords End, By Lc.-->

SEO WordPress的Description、Keywords和Title(完整版)

加入Page页面和分类页的的Description和Keywords。强大!!!!首先当然要知道各个分类页面和Page页面的ID了。

 <!--###Title Begin, By Lc.###-->
<?php if ( is_home() ) { ?><title><?php bloginfo('name'); ?> | <?php bloginfo('description'); ?></title><?php } ?>
<?php if ( is_search() ) { ?><title>搜索结果 | <?php bloginfo('name'); ?></title><?php } ?>
<?php if ( is_single() ) { ?><title><?php echo trim(wp_title('',0)); ?> | <?php bloginfo('name'); ?></title><?php } ?>
<?php if ( is_page() ) { ?><title><?php echo trim(wp_title('',0)); ?> | <?php bloginfo('name'); ?></title><?php } ?>
<?php if ( is_category() ) { ?><title><?php single_cat_title(); ?> | <?php bloginfo('name'); ?></title><?php } ?>
<?php if ( is_month() ) { ?><title><?php the_time('F'); ?> | <?php bloginfo('name'); ?></title><?php } ?>
<?php if (function_exists('is_tag')) { if ( is_tag() ) { ?><title><?php  single_tag_title("", true); ?> | <?php bloginfo('name'); ?></title><?php } ?> <?php } ?>
<?php
##定义一个函数.解决截取中文乱码的问题###
if (!function_exists('utf8Substr')) {
 function utf8Substr($str, $from, $len)
 {
     return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
          '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
          '$1',$str);
 }
}
if ( is_home() ){
    $description = "我们身处急速上涨的数据海洋中…我们如何避免信息的没顶之灾呢?柳城博客(Lc.)∷关注生物信息学,分享学习Linux、PHP+Mysql、Perl/BioPerl等的心得,努力在数据的海洋里畅游。";
    $keywords = "生物信息学,Perl,Bioperl,PHP,Mysql,Linux,NCBI,摄影";
}
elseif ( is_single() ){
    if ($post->post_excerpt) {
        $description  = $post->post_excerpt;
    } else {
   if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){
    $post_content = $result['1'];
   } else {
    $post_content_r = explode("\n",trim(strip_tags($post->post_content)));
    $post_content = $post_content_r['0'];
   }
         $description = utf8Substr($post_content,0,220);  
  }
 
    $keywords = "";     
    $tags = wp_get_post_tags($post->ID);
    foreach ($tags as $tag ) {
        $keywords = $keywords . $tag->name . ",";
    }
}
###这里是分类页面。自行改变is_category的ID。###
elseif ( is_category(34) ){
    $description = "生物信息学(Bioinformatics)是一门利用计算机技术研究生物系统之规律的学科。通过实例分析,介绍生物信息学的入学知识,包含生物信息学的数据库等。重点是NCBI的中文教程。";
    $keywords = "生物信息学,Bioinformatics,NCBI,影响因子";
}
###这里是Page页。同上。多个页面的话自行添加就是###
elseif ( is_page(2) ){
    $description = "关于柳城博客(Lc.)的介绍,联系方式,以及网站历程。柳城博客(LIUCHENG.NAME)∷努力在数据的海洋里畅游。";
    $keywords = "生物信息学,Perl,Bioperl,PHP,Mysql,Linux,NCBI,摄影";
}
elseif ( is_page(135) ){
    $description = "柳城博客(Lc.)的留言板。有什么问题或建议请在这里留言! 我会尽快回复~ 感谢您的支持!!";
    $keywords = "柳城博客,Lc.,留言板,留言本";
}
?>
<?php echo "\n"; ?>
<meta name="description" content="<?php echo trim($description); ?>" />
<meta name="keywords" content="<?php echo rtrim($keywords,','); ?>" />
<!--###Description & Keywords End, By Lc.###-->

~完。


《 “SEO WordPress的Description、Keywords和Title(完整版)” 》 有 168 条评论

  1. 話說應該是這個的問題
    我全部復制到header。php 完全沒有問題
    但是放到desc.php再關聯到header.php就有一大塊空白

    • Description还是挺重要的其实。因为搜索时如果Description有这个关键词的话才能搜到。当然,首先是title。

  2. 呵呵,第一次到你的博客就感到熟悉,就是这个插件知道的你,没知道之前觉得你很神秘,现在庐山终于露出真面目了 /偷笑

    • /可爱 。蛮大的动作了,有时改了描述和关键词,title 结构等的话,搜索引擎要过几天才能反应过来的。 :)

  3. 太强大了,可惜太复杂了,有点显得累赘,title就首页不同、其它输出文章标题+博客名就可以,另keyword可以不用写了,keyword已经没什么用,至于自动截取开关部分文字作description只对懒人有用,最好还是自定义一个key作description。

    不过博主这篇文章还是很有参考意义,值得赞一个。

    • 不复杂才怪~~ 这是考虑到了所有的方方面面的.. 一网打尽了~~
      要简化就自己动手删掉一些就行了. [呲牙]

  4. 太感激了,终于找到了多年来没有找到的东西;了却了一大心愿啊!

    ====wordpress 不用插件,头部优化=====本地测试通过!

    不知道该怎么感谢你啊!

    先把这篇文章收藏起来,再转到我的博客上去! [呲牙]

  5. 怎么样在文章页调用description时显示文章的前220个文字,而不是第一个里的内容啊?

  6. 我按你的步骤完成了,但在后台哪个地方添加目录的标题,关键字和描述呢?

    • 一时想不到.. 如果要这么办的话, 那得要多少个description啊. 不是好的办法, 一般都是屏蔽http://liucheng.name/page/3 page页的收录. 这才是正道.

  7. 我在本地测试后,看网页源代码,只有主页标题,没有关键词和描述部分内容,请教怎么回事呢?
    我用的是最新版中文wp。
    谢谢!

  8. Description、Keywords和Title(完整版)进行修改后,主页、分类、tag页、搜索、page页都达到要求,但是single页的Description的截子有问题,只能截取文章第一行!!请问如何解决?

  9. 博主,你的这个方法很实用啊。谢谢了。
    但还有一个小问题,就是分类页面上没有加入关键词和描述。看能否继续改进下。
    再次感谢你的付出。

      • 我刚才把这关键词改成自定义域了,要是用标签的话那标签又多又乱,就失去标签应该有的作用了。

        • 怎么会,不要太计较就是了。 不过最近越来越发现关键词在搜索引擎中起不了什么作用。 [大兵]

          • 如果要是一直用标签做关键词的话,标签会越来越多,那样就看起来很乱了,我觉得标签应该是给访客看的,还是简洁一点好,呵呵 。

  10. ###这里是Page页。同上。多个页面的话自行添加就是###
    elseif ( is_page(2,14) ){

    我要给多个页面设置同样的keywords和description,我写成(2,14)这种形式,结果只有id=2的页面正常,而id=14的不正常,请问应该如何同时写几个分类

  11. 其他都正常,为什么就是搜索的显示乱码
    页面源文件:������� | Blankcn's Blog
    搜索结果这几个字显示不出?

  12. 加上了,很不错 只是统计失去作用了 能解决吗
    看你 用的也是1.5的统计 怎么就可以啊
    谢谢 相助 [握手]

  13. 上面很多人反映使用后页面上方出现空白的原因:
    文章页大描述标签调用的是文章的摘要,而摘要中有html代码,作者应该过滤掉这些代码,只保留文本,描述标签中式不能有html代码的

  14. description截取的第一段文字,由于中文段落的首行一般都会空2格,那样的话description描述后面也有2格空白哦。请问这个怎么解决呢?

  15. 你好,看了你的文章受益匪浅,有一个问题想问一下,假如我不停的更新文章,那么在完整版中就要不停地增加关键词和描述,这样的话desc.php文件就会变得很大,这样的情况该去怎样解决?

  16. 你好,看了你的文章受益匪浅,有一个问题想问一下,假如我不停的更新文章,那么在完整版中就要不停地增加关键词和描述,这样的话desc.php文件就会变得很大,这样的情况该去怎样解决?

    补充一下,我说的是不同的关键词和描述。

  17. 您好,使用了一段时间了感觉非常不错,但是有一个问题想请教您:
    $keywords = “”;
    $tags = wp_get_post_tags($post->ID);
    foreach ($tags as $tag ) {
    $keywords = $keywords . $tag->name . “,”;
    这一段的意思应该是将tag标签设置为keywords,但是假如我不希望使用tag作为关键词,想使用自定义域的方式该怎样实现?
    在载入之前,我使用
    <meta name=”keywords” content=”ID, $key, true); ?>” />是可以自定义域的,但是现在好像没有作用了,请问您一下,像这样的情况如何去解决?诚盼您的答复!

  18. 您好,使用了一段时间了感觉非常不错,但是有一个问题想请教您:
    $keywords = “”;
    $tags = wp_get_post_tags($post->ID);
    foreach ($tags as $tag ) {
    $keywords = $keywords . $tag->name . “,”;
    这一段的意思应该是将tag标签设置为keywords,但是假如我不希望使用tag作为关键词,想使用自定义域的方式该怎样实现?
    在载入之前,我使用
    ” />是可以自定义域的,但是现在好像没有作用了,请问您一下,像这样的情况如何去解决?诚盼您的答复!

  19. […] WordPress文章页的keywords和description的优化不必多说了,all in one seo一个插件就能解决,貌似也能解决今天说的。但是WordPress的乐趣就在不停的折腾,其实就是在折腾自己,今天就说下免插件实现分类页添加keywords和description的方法,借鉴的是柳城大神的思路,不过让我把改的面目全非了。 […]

  20. 博主,能不能教教我,如何去掉自动添加tags为keywords。因为用自定义字段解决keywords更加适合我。但是这个描述还是很适合我的,所以只是去掉keywords这一段,谢谢啦!!!!

  21. 很不错的文章,无论在搜索引擎上是否有效果,但是都能学习到一些知识,不错,谢谢~

  22. 博主,你的代码很有用,先感谢你分享精神。另外,我遇到个问题,我用了你的代码网页顶部会多出一行空白,您可以看看我的网站。希望您能给予指导,非常感谢!

  23. […] All in One SEO Pack停用后本打算找一个其他的seo插件了,但在网上搜了一下,各种seo插件褒贬不一。干脆自己手动优化一下的了。 在文章、首页、分类、页面分别加了Description 与 Keywords,没有太多技术,直接用柳城的desc.php,自己稍稍改动了一下,感觉还不错,就是不知道接下来的收录会怎么样!!!!!!!! 你一定喜欢灵活运用SEO,使自己的网站利于百度收录! (1.000) 文章作者:admin 文章标签: All in One SEO Pack停用, Description, Keywords, SEO 转贴链接:WordPress Description 与 Keywords的seo  […]

  24. 这个代码还是不错,不过有点问题就是如果文章有单篇文章分页的话,还是有点问题的,没有实现单篇文章分页情况下的元说明和元标题不同,出现重复页面。

  25. 按照另存desc.php文件的方法改好了,自已也可以查到Description Keywords但出现了另一个问题,为什么百度及其他收录搜索处的Description却看不到任何东西,直接空白呢?象这样host3cn host3cn.com/ 2010-11-24 – 百度快照,根本没看到描述。。。

  26. 完整版现在是截取第一段的内容,如果需要截取前220字但不分第几段应该怎样修改?

  27. […] 本文详细出处参考:http://liucheng.name/1127/ » 本文来自:『独孤小于』 » 《SEO WordPress的Description、Keywords和Title(完整版,转自柳城)》 » 本文链接地址:http://www.dgxy.co.cc/archives/444 »如果觉得有用,敬请转载,如能注明出处则好人一生平安,谢谢。 » 有话想说:那就赶紧去给我留言吧. » 您也可以订阅本站:邮件订阅|RSS订阅 » 本文有分页请点击浏览: 关于2010年那些事儿 […]

  28. single_cat_title
    wp3.0后的版本 在文章页single不显示分类名称,添加并重命名2.9 single_cat_title函数,还是显示不出来、、有办法不?柳大哥

  29. 您好 我这个代码和你介绍的不太一样,前面在哪里改代码指向desc.php呢?
    ---------------------------

    <meta http-equiv="Content-Type" content="; charset=” />

    <link rel="stylesheet" type="text/css" href="/style.css” />

    <link rel="alternate" type="application/rss+xml" title=" RSS Feed” href=”” />
    <link rel="alternate" type="application/atom+xml" title=" Atom Feed” href=”” />
    <link rel="pingback" href="” />
    <link rel="shortcut icon" href="/images/favicon.ico” />

    <script type="text/javascript" src="/js/jquery.min.js” >

    <script type="text/javascript" src="/comments-ajax.js”>

    <script type="text/javascript" src="/js/jquery.min.js” >
    <script type="text/javascript" src="/js/jquery.hoveraccordion.min.js”>
    <script type="text/javascript" src="/js/top_page.js”>
    <script type="text/javascript" src="/js/custom.js”>

    $(function () {
    $(‘.thumbnail img,.related_img img,.cat_ico img’).hover(
    function() {$(this).fadeTo(“fast”, 0.5);},
    function() {$(this).fadeTo(“fast”, 1);
    });
    });

    $(document).ready(function(){
    $(‘#drawer’).hoverAccordion({
    activateitem: ‘1’,
    speed: ‘fast’
    });
    $(‘#drawer’).children(‘li:first’).addClass(‘firstitem’);
    $(‘#drawer’).children(‘li:last’).addClass(‘lastitem’);
    });


    <script type="text/javascript" src="/js/pngfix.js”>

    DD_belatedPNG.fix(‘.boxCaption,#back_top a,.thumbnail img,.top_box,.reply,.cat_ico img ‘);


    <!–
    sfHover = function() {
    if (!document.getElementsByTagName) return false;
    var sfEls = document.getElementById("menu").getElementsByTagName("li");

    for (var i=0; i<sfEls.length; i++) {
    sfEls[i].onmouseover=function() {
    this.className+=" sfhover";
    }
    sfEls[i].onmouseout=function() {
    this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
    }
    }
    var sfEls = document.getElementById("topnav").getElementsByTagName("li");
    for (var i=0; i

    <a href="” title=”首 页” class=”home”>
    ‘header-menu’ ) ); ?>

    <form method="get" id="searchform" action="/”>

    <input type="image" src="/images/go.gif” id=”go” alt=”Search” title=”搜索” />

    <a href="”title=””>

    <a href="/”>

  30. 博主,不知道这篇文章的东西对WP最新版3.1.1适用不???????我也删了All in One SEO,想用代码直接实现SEO 不知道还能用不?

  31. 刚才留言不知道发出去了没有。留言本也看不太清楚。

    这段代码if(preg_match(‘/(.*)/iU’,trim(strip_tags($post->post_content,””)),$result)){
    $post_content = $result[‘1’];好像只能截取文章的第一段文字作为描述信息,但是我博客是做软件的,文章排版的第一行文字就几个字“软件大小”,这样造成了我网站的每篇文章描述过短、重复等等问题,想问一下博主有没有什么解决办法?
    我只想截取文章中指定位置的文字,但是测试了很多次都没有成功!问了很多人也没能解决,我用的主题是知更鸟的主题,这个主题就是用您的代码的。作者推荐让我过来看看!
    文章排版劳驾您移步道我的博客去看一下,只想截取“软件介绍:”一下的内容作为描述信息。希望能够解决一下!谢谢!

    • 看到了,我的网站是:http://ipabar.org

      麻烦您移步去看一下我的文章排版!谢谢!

  32. 卸载了all seo,已经用上了这个,博主这个代码干净好使 不过我觉得title 这样就可以了 柳城的博客 [呲牙]

  33. 博主 已经把DESC上传目录了 怎么没有反应 编码也对 是不是还得调用啊 能不能具体说下步骤??哪里改下调用?

  34. […]   以上代码的用意在于,手工填写的description 与keywords 会成为博客首页的描述与关键词,文章的描述与关键词会提取每篇文章摘要与标签自动形成。代码中的“|”是主标题与副标题间的隔号,如果不习惯,可以换成自己喜欢的“-”“>>”等等,不太明白的朋友可以观察一下我博客的各处标题。还有一个更完整的代码版本,含分类目录及归档的描述设置,可参考一下原作者文章http://liucheng.name/1127/。 […]

  35. […] 以上代码是从柳城大哥那里淘来的,原文地址是(http://liucheng.name/1127/)个人对于title部分进行的修改,具体形式就是当前博客的标题显示样式,这样设置知识让其更加美观,从样式上显得更加权威,对于SEO用户体验方面并无太大影响,如果不喜欢这样的title设置根据自己的需要到柳城兄那里进行对比选择即可,以上为转播的WordPress的Description、Keywords和Title的设置主要内容 […]

  36. 刚刚发现一个更简单的方法,不需要新建desc.php,也不需要替换title,直接在head.php里面加入调用分类页的id就可以了,前提是head.php里面已经有文章页和首页的关键词和描述代码,也就是楼主通用版里面的代码,可能语言表达能力不是很强。

  37. 博主的文章都很实用!我用了你那个通用版的代码,发现顶部那里空出了一个地方,我上传了图片,麻烦你看看,不知道怎么会这样的。我截了图。

    原来的样子:http://thumbsnap.com/i/jj1ZBWq1.jpg

    加了代码之后:http://thumbsnap.com/i/DDga27gQ.jpg

  38. 我用你方法建了个desc.php文件,发现一个问题,我的一个英文也面,只摘取了一行作为description,页面是http://www.xi-ju.com/p/450 要不您测试一个英文页面?中文页面没有问题。多谢了!

  39. 里面的换行符“\n”不可用,不知道为什么,直接在浏览器页面显示了“\n”

  40. […] 以上代码的用意在于,手工填写的description 与keywords 会成为博客首页的描述与关键词,文章的描述与关键词会提取每篇文章摘要与标签自动形成。代码中的“|”是主标题与副标题间的隔号,如果不习惯,可以换成自己喜欢的“-”“>>”等等,不太明白的朋友可以观察一下我博客的各处标题。还有一个更完整的代码版本,含分类目录及归档的描述设置,可参考一下原作者文章http://liucheng.name/1127/。 […]

  41. 你好,我安装的主题header.php修改没用,要到主题目录下的function.php修改下才有用,而且需要把整段都直接拷贝进去,而不是用链接desc.php的方法 但是出来的title是重复一遍首页的title 这个怎么破

  42. 想问下底下的这个是什么意思,可以去除吗?
    在http://liucheng.name/930/这篇中没出现这个代码哦

  43. 学习了,解决了困扰我好久的问题。多谢。 [强] [抱拳]

    附上一点建议:

    $the_cat_slug1 = “分类别名1”;

    if (is_category($the_cat_slug1)) {
    $keywords = “分类关键词1”;
    } else {

    }

    感觉这样要方便一点,毕竟分类别名更直观,可读性更强,修改起来更容易。

  44. […] WordPress本身是不能直接在后台修改Keywords和Description的。一般来说可以用插件来实现。但是这类综合的插件一般会比较消耗性能。所以最终采用了直接修改模板的方法,把文章的内容截取前220个字符作为Description,把文章的Tag截取出来作为关键字。我这里用的是其他同学已经写好的方案desc.php […]

  45. 大神你好,我用了你的代码后,发现点击标签后跳转到的标签页面,没有生成description和keywords ,可能和我主题有关,然后我就做了改动,在:
    |
    修改为:

    |
    <meta name="description" content=" ” />
    <meta name="keywords" content=" ” />

    这样是解决了无法获取description和keyw的问题,但是新的问题又出现了,就是点击标签后跳转到的页面出现了两个 description 和 keywords ,我也知道问题出在哪里,因为下面函数也生成了 mate信息,而我又增加了 mate ,所以会出现两个,。。。

    我想请问这个怎么解决?多谢你。。。

  46. 感谢大神分享这么多有用的文章,现在社会已经很少有人像版主这样无私奉献了,真心感谢 [抱拳] [强] [强]