如何用代码完美替代 WordPress 中的 All in One SEO Pack 插件



昨天写了些自己所用的 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);

就没有问题了