Typecho 修改固定链接后的SEO技巧

前两天将博客固定链接中最后的那个 id 换成了文章的缩略名,这下可惨了,搜索引擎们都得重新抓取一遍,我可懒得等他,当然,也怕给谷歌百度神马的降权了,于是有了这篇文章:

首先我的思路是通过 PHP 插入一段代码,识别到链接中最后一个参数为数字 id 则自动到数据库中查询并 301 到新地址。

于是问了问 Google 大哥,PHP 怎么获得伪静态的地址,这点问题对谷歌来说毫无压力——$_SERVER['ORIG_PATH_INFO']——就是他,然后便轮到正则了,由于是数字,这部分也很简单:.+\/([0-9]+)\.html

完成了,接下来的步骤便是用 PHP 将这堆东西整理起来:

1
2
3
4
5
6
7
8
9
10
11
/* KK's 301 */
preg_match('/.+\/([0-9]+)\.html/i', $_SERVER['ORIG_PATH_INFO'], $matches);
if($matches[1]){
$post_id = $matches[1];
$query = $db->sql()->select('slug')->from('table.contents')->where('cid = ?', $post_id);
$result = $db->fetchRow($query);
$url = str_replace($post_id, urlencode($result['slug']), $_SERVER['ORIG_PATH_INFO']);
header('HTTP/1.1 301 Moved Permanently');
header("Location: {$url}");
exit();
}

然后——最后一步当然是找个地方放这段代码啦,根据我对 Typecho 的一些了解,应该放在 index.php 中,这是 Typecho 的核心,所有页面都会被伪静态到这个 PHP 中。

因为我们这里用到了 Typecho 的数据库类,所以代码应该放在 include config.inc.php 的后面(这个 config 文件初始化了数据库类) 其次留意到 Typecho 注释:

1
2
/** 开始路由分发 */
Typecho_Router::dispatch();

显然,我们的代码应该放在它前面,不然系统会比你先输出个 404 页面。

好了,我们再打开个以“文章id.html”结尾的页面,看看代码是否正常即可。
(PS:由于我忘了更新CDN缓存,还以为代码错了⊙﹏⊙b)

Typecho 修改固定链接后的SEO技巧

https://kk.sb/2011/seo-before-typecho-change-permalink.htm

Author

kookxiang

Posted on

2011-11-12

Updated on

2011-11-12

Licensed under

Comments