昨天写了些自己所用的 WordPress 插件,稍微提及了一下为什么自己没有使用 All in One SEO Pack 这个插件。那不用插件还怎么 SEO 呢?我们今天就来解决这个问题。用代码来完美替代 All in One SEO 插件。


1、Title 的优化
在主题的 Header.php 中修改 Title 标签为

1
<title><?php if (is_home() ) {?>FORECE博客|关注互联网创业和IT技术<?php } else {?><?php wp_title();?> |FORECE博客<?php } ?></title>

2、关键字与描述

Keywords 与 Description 在SEO中是很重要的元素,所以也不能漏掉。这里有两种修改方法。

用 Tag 与 摘要自动填写 Keywords 与 Description

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    <?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 = "FORECE的博客是一个关注互联网和IT技术的博客,主要提供本人的国外生活日志,互联网资讯,IT技术和网络赚钱等信息";
    $keywords = "FORECE BLOG,日志,博客,Windowx,IT,技术,系统,加拿大,蒙特利尔,生活,网赚";
}
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,如果没有设置摘要,则把文章标题作为Description,而标签直接作为 Keywords。

再放上另外一种方法:(不过这种方法对于特殊符号会自动转义变成乱码,比如 -,#之类的符号)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?if (is_home()){
$description = "FORECE的博客是一个关注互联网和IT技术的博客,主要提供本人的国外生活日志,互联网资讯,IT技术和网络赚钱等信息";
$keywords = "FORECE 博客,日志,国外生活,加拿大,蒙特利尔,Windows,IT,技术,互联网,网赚,WordPress";
} elseif (is_single()){
    if ($post->post_excerpt) {
        $description     = $post->post_excerpt;
    } else {
        $description = mb_strimwidth(strip_tags(apply_filters('the_content',$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 = strip_tags($post->post_excerpt);

如果换成

1
$description = mb_strimwidth(strip_tags($post->post_content),0,220);

就没有问题了