分享SEO WordPress的Description 与 Keywords
大家不知有没有看过 我爱水煮鱼 我是如何 SEO WordPress 的 2:Description 和 Keywords。挺不错的,建议大家放弃All in one SEO之类的插件,改用这段代码就行了。
通过下面的代码设置博客的Description 和 Keywords,用日志的摘要作为Description,或是文章的前220个字,用标签(tags)作为关键词Keywords。
只需要把这段代码放在header.php就行了。
我爱水煮鱼 里的原代码:
<?if (is_home()){
$description = "首页的描述";
$keywords = "首页的关键词";
} elseif (is_single()){
if ($post->post_excerpt) {
$description = $post->post_excerpt;
} else {
$description = substr(strip_tags($post->post_content),0,220);
}
$keywords = "";
$tags = wp_get_post_tags($post->ID);
foreach ($tags as $tag ) {
$keywords = $keywords . $tag->name . ", ";
}
}
?>
<meta name="keywords" content="<?=$keywords?>" />
<meta name="description" content="<?=$description?>" />
修改版1:
上面的代码已经可以直接拿来用。不过也有一些细节问题,你可以用下面的修改版。主要是去掉了关键词之间的空格和最后的逗号,顺便也去掉了描述(description)的换行符(\n)。
<?php
if (is_home()){
$description = "首页的描述";
$keywords = "首页的关键词";
} elseif (is_single()){
if ($post->post_excerpt) {
$description = $post->post_excerpt;
} else {
$description = substr(strip_tags($post->post_content),0,220);
}
$keywords = "";
$tags = wp_get_post_tags($post->ID);
foreach ($tags as $tag ) {
$keywords = $keywords . $tag->name . ",";
}
}
?>
<meta name="description" content="<?php echo trim($description); ?>" />
<meta name="keywords" content="<?php echo rtrim($keywords,','); ?>" />
修改版2:
下面还有一段代码,主要是应Blinux的要求,呵。他需要把日志的第一段作为Description,就是不要再从第二行取字符了。Blinux是一个完美主义者,所以在他的要求下,也经过测试,下面的代码近乎完美地解决了这个问题。
<?php
if (is_home()){
$description = "首页的描述";
$keywords = "首页的关键词";
} 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 = substr($post_content,0,220);
}
$keywords = "";
$tags = wp_get_post_tags($post->ID);
foreach ($tags as $tag ) {
$keywords = $keywords . $tag->name . ",";
}
}
?>
<meta name="description" content="<?php echo trim($description); ?>" />
<meta name="keywords" content="<?php echo rtrim($keywords,','); ?>" />
主要解释一下中间这段:
###第一种情况,以<p>开始,</p>结束来取第一段
if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){
$post_content = $result['1'];
} else {
###第二种情况,以换行符(\n)来取第一段
$post_content_r = explode("\n",trim(strip_tags($post->post_content)));
$post_content = $post_content_r['0'];
}
分两种情况的原因是:第一种情况对Windows Live Writer发布的文章有效。第二种情况适合直接用WP的后台发布的文章。
代码放在header.php
你可以考虑放在title标签的之前或之后,不过我习惯的作法是把上面的代码单独另存为一个文件,如命名为desc.php,上传到你目前所用主题的目录下,然后调用就行了。
<title><?php wp_title('«', true, 'right'); ?> <?php bloginfo('name'); ?></title>
<?php include_once("desc.php"); ?>
补充:对于页面(Page)的Description 与 Keywords
关于Page页面与分类页的的描述和关键词, 请关注最新文章~~(2009-11-07更新)
最终:解决乱码问题
这是因为substr在截取中文字符时所造成的。所以要自定义一个函数
<?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 = "首页的描述"; $keywords = "首页的关键词"; } 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 . ","; } } ?> <meta name="description" content="<?php echo trim($description); ?>" /> <meta name="keywords" content="<?php echo rtrim($keywords,','); ?>" />
有点相关的文章
- SEO WordPress的Description、Keywords和Title(完整版) (0.690)
- 为你的wordpress添加内链与外链的插件(完美支持中文) (0.500)
- 博客关键词链接插件,完美支持中文和英文关键词 (0.500)
- 插件发布:WP keyword Link Plugin(Wordpress内链外链插件) (0.500)
- 新开发的WP插件,邀请您来内测 (0.500)
- 让Google给你的网站加速,快马加鞭,节省流量 (RANDOM - 0.190)
终于发布了~
我可以发行第二版吗 :lol:
支持的。呵呵。
除了首页、文章页,另外最好支持“单页面”. :lol:
“单页面”,这个是指什么意思??
就是“关于”、“留言板”类的页面 :lol:
这种页面不好统一~~首先关键词就没办法.另外像”留言板”,如果没内容的话,描述从哪来?也没办法…不过,具体到单个博客订作的话那是可以的….
原来是这样啊~ :lol:
根据你的需要,我补充了最后一段。你可以看着修改~~ :lol:
:qiang:
你好,请问出现乱码的情况怎么修改到UTF-8。。。谢谢啊
对于中文是有可能会乱码~~我再更新一下~~~
谢谢啊
已经更新了,看最终版~~~还没测试。应该不会有问题的 :lol:
谢谢了,没问题了 呵呵
:qiang:
使用最终版的代码?
你好,我用了最后那个最终解决方案都还是不行,只要这里面:
if (is_home()){
$description = “首页的描述”;
$keywords = “首页的关键词”;
} elseif (is_single()){
有中文,在查看源文件里面的中文全部是乱码,但只要“description” 和 “keywords”是英文查看源文件里面的中文就不会出现乱码了。
能不能帮我看一下,谢了。
这个是字体编码问题而已,你把文件另存为UTF8的就行了
我把主题里面的文件用Dreamweaver页面设置里转为UTF-8都还是一样,这个问题困扰我很久了,都还没搞掂~~
就这个自定义的会乱码,内容不得页面又不会。
if (is_home()){
$description = “首页的描述”;
$keywords = “首页的关键词”;
} elseif (is_single()){
你是不是把这段代码存在另一个文件,另一个文件也是要存为utf8的啊。统统都utf8就没错的了。
是mzfeng.com这个么?没有乱码啊?? 你给个有乱码的链接我看看
呵呵,刚刚弄好了,确实是utf-8编码的问题。
问题主要出在我一直用WinSCP软件的编辑器来改写原代码的。可能这个软件对UTF-8编码不好,用Dreamweaver修改就没问题了,感谢Lc.博主!
你好,我用了您的这个代码,但分类目录下面没有关键字和描述了呢?请问应该如何设置成我想要的关键字和描述呢,谢谢
分类目录的确是没有。这个我也不知道呢~~ 找不到有好的办法。
你好,我用 (最终:解决乱码问题)这一个的,网站打不开了,显示以下错误:
Parse error: syntax error, unexpected ‘<' in /data/home/zs8985/htdocs/wp-content/themes/hw/header.php on line 39
我用第一个修改版1 网站就可以打开,但有的文章出现乱码。
要看line 39是什么的啊. 应该是你复制过去之后有点小地方错误了. 你看着改改就是了~
其它人复制直接用都是没问题的.
elseif (is_page()) {
if($page_id == ‘2’){ ##根据需要修改这里的数字
$description = “关于网站”;
$keywords = “关于网站”;
}
这段代码添加失败 添加后提示 错误
这段嘛.. 的确是.. 最好不用用这段~~
如果是开了固定链接的话就没办法用这段了~
我当时没考虑到这个~~
是给只是用原始链接的博客用的. 失策了~~ :)
能否为分类页也添加说明与关键字?
没认真研究过~~
我是认真研究过了,就是研究不出来 /疑问
只好求助来了
有空儿研究一下~~ /可爱
那我就经常来关注了 /ok
哈哈..已经研究出来.. 有空儿发布 /可爱
别有空了,邮箱发给我先尝尝鲜吧 /呲牙
其实我现在也有空… 不过要先去吃个饭..吃完回来发布. /呲牙
我正好出门,晚上回家正好看到 /呲牙
你如果晚上发,我就能强占沙发
其实我这里没啥人气的~~ 你啥时来都可以抢到沙发的了~`
不过现在有点事~~ 迟些再发~~ /呲牙
感谢博主,这个问题困扰我了几天,今天才想到源码乱码可能是自动截取description导致的,一搜果然找到了解决方法 [强]
http://www.mobai.org/2010/02/23/btalk/
求助,还是乱码!~
chenglu#yeah.net
看了,没看到乱码~
谢谢您的回复,我换了个主题,就好了~
汗,谢谢~
自从用了那个主题之后谷歌都不收录我的网站了,我给换回来了,嘿嘿
:) [呲牙]
经过反复测试,发现这种方法有一个弊病,那就是“用日志的摘要作为Description,或是文章的前220个字,”这个里边不能有超链接或者其他类似的字符,否则就会出错,希望能解决下。谢谢了
柳兄 [偷笑] [偷笑] .我从你这里偷学很多东西哦.谢谢分享.!~
请教一下,原来ALL IN ONE的NOINDEX,百度是不是对这个很敏感啊.它老是转首页,内页就不进去了.是否去掉这个插件,然后添加上面的代码文件,会好些呢.!~
[ok] 实验成功,终于可以摆脱all in seo这个插件了 [抱拳]
我使用了第二种,不过貌似没有能完美解决乱码的问题和出错的问题。
譬如,xianren.org/fnetjishu/xpwojieweb.html就出现了出错的问题,
xianren.org/fzantan/frontoftheclass.html就出现了乱码的问题,大多数正常,我测试了下,有20%左右会出现问题。麻烦解决下?
经过反复测试,发现这种方法有一个弊病,那就是“用日志的摘要作为Description,或是文章的前220个字,”这个里边不能有超链接或者其他类似的字符,否则就会出错,希望能解决下。
这不是最新版本了。这是旧的了。~~ 其实应该出一个更新的了。 :)
都旧了
多放一点血蛤
这个不行啊,当文章摘要有图片的时候,直接图片就显示出来了,整个页面都奔溃了,还有就是文章没摘要的时候,也是很无语
摘要居然有图片。的确无语。
柳老大,请教一下,这个我用了,没问题,就是有个疑问,能不能写段代码,让他截取文章中间部分的内容,或者只截取中文,如果在页面顶部放了广告代码,他会截取广告代码加一些文章内容,这样很不好啊,不知道这个能不能实现。一般广告都是首尾有,中间比较少,所以这个应该考虑一下啊
有空更新一下
不错,受益匪浅 [强]
我网站description标签的乱码问题很长时间,我把下面的代码加入了header.php
post_excerpt) {
$description = $post->post_excerpt;
} else {
if(preg_match(‘/(.*)/iU’,trim(strip_tags($post->post_content,””)),$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 . “,”;
}
}
?>
<meta name="description" content="” />
<meta name="keywords" content="” />
加完后,查看页面源代码,发现出现了两个description和keywords,于是我删除了header.php中原有的下列代码,
<?php if((is_home() && ($paged < 2 )) || is_single() || is_page()) { echo '’; } else { echo ”; } ?>
<meta name="description" content="” />
<meta name="description" content="” />
<meta name="keywords" content="” />
目前看,博客工作正常。是否稳定或有其他问题等待进一步观察。
你好博主,如果我不想使用摘要作为description标签,而只取用截断文章前220字的方式;那么我要去掉那些代码?
这个很强大,用了,谢谢分享! [强]
为什么要去掉关键字的符号和空格,这个不解?
好文章,有个问题,火狐不乱码,ie乱码有影响吗
你好,这个调用后,网站首页最上方会出现一行空白,什么原因??新人求解,谢谢大侠! [可爱]