今天在aw的blog看到他写的“中国Web工程师比美国人更厉害的4个原因”,讲了使用中文的计算机用户、以及面向中文用户进行开发的软件工程师需要额外修炼的法术——于我心有戚戚焉。当初在Linux里配置中文显示、输入的痛苦仍然记忆犹新,配置完系统又去配置特殊的软件;大部分的IDE把Ctrl+Blank作为代码提示的快捷键;……最近的ubiquity,也是以Ctrl+Blank作为呼出它的热键,并且其窗口会盖住中文输入法的候选窗口。尽管前辈已经把路铺得够平,我们已经足够幸福,中文在计算机世界里永远无法像英文一样简单、易用。
晚上吃了饭,又看见WordPress爱好者论坛里有人问日志缩略名的中文如何修改,我不知不觉就像唐僧一样罗里罗嗦回复了一大堆。
post slug是什么?在wordpress后台的永久链接设置(/wp-admin/options-
permalink.php)里,用户可以自定义链接格式。绝大多数自定义的用户喜欢在url中包含由文章标题生成的一串字符,这就是post slug.
一旦永久链接中使用了post slug,编写文章的时候标题下面就会显示post
slug并允许你编辑,否则不显示,但wordpress仍然会自动生成并保存到数据库中。
首先,URL中是不允许出现中文的,这个我以前写过一篇“中文URL编码”的文章,里面有详细介绍。简单地说,中文必须以UTF-
8编码,然后再进行percent encoding,即每个字节转换成百分号后跟两位十六进制数字。英文标题不会引起任何问题,如图所示:

但是如果标题里有中文(当然其它不是基于英文字母表的语言也一样),问题就麻烦了。为了符合标准,WordPress必须将它们做percent
encoding,然后你看到的post slug就是一连串的百分号。
为什么在地址栏看到的是正常的中文?
我机器上的浏览器当中,除了IE 6,其它的包括Firefox 3,Opera,Chrome,Safari都会自动将url中的中文解码,所以我们会看到正常的中
文。不仅如此,鼠标悬浮在链接上时,状态栏显示该链接的目标也会对中文进行自动解码。而IE
6和Firefox以前的版本则没有这么做,浏览器地址栏就会看到一串百分号,IE 7以后的版本我没有测试,不知道它们是怎么处理的。Firefox
3还有一个特点,它虽然显示了中文,可是复制的时候,剪贴板里仍然是未经解码的原始URL,这样可以防止某些浏览器错误地处理该链接地址。
为什么post-slug不自动修改?
post slug是在永久链接(permalink)中使用的。顾名思义,这个链接轻易是不会改动的。否则,搜索引擎所保存的记录就会失效,而指向该页面的链接也会
失效,造成很多麻烦。
实际上,post slug在特定情况下会自动更新的,那就是在文章发布之前。因为这时候,搜索引擎不会来抓取该网页,别的页面也不会有意指向这个“尚不存在的”页面
。但是当文章发布之后再编辑文章标题的时候,post slug就不会自动更新了,这时,即使你主动编辑也要三思而后行。
我如何更新这些“乱码”?
好,你确定要修改post slug并承受永久链接失效的损失了。
对于英文标题的post
slug,改起来相当方便,因为英文不需要进行额外的编码工作。而中文的标题可就麻烦了,这些满眼的百分号对普通用户来说简直就像刺猬一样,不知道从哪儿下手。
其实这是一项极为简单的工作,至少你不会经常这么做,所以犯不着做一个WordPress插件来帮助你完成。在Firefox中,打开Tools->JavaScri
pt Console(Ctrl+Shift+J),代码框输入encodeURIComponent(‘中文标题’)并回车,“中文标题”这四个字的正确编码就显示
在下面了。当然,如果中间有标点,还是做一些处理例如转换成减号比较好看。
不喜欢中文post slug?
毕竟,我们看到了它的本质——一串夹杂着百分号的无法阅读的文字,尽管多数浏览器已经将其解码还原。许多朋友还是喜欢用可读性更好的英文字母来做slug.
可能有些勤奋而认真的blogger每写一篇文章都会自己写一个英文的post slug,但是更多的人习惯将这一工作交给计算机。cos_slug_transl
ator就是一个自动翻译成英文然后生成slug的插件,还有一些转换成拼音的,大家有兴趣的话自己去搜。
使用英文或拼音做post slug利于SEO?
大部分人都这么认为,而我的意见是未必如此(我不懂SEO,如有误请专家指教)。这里仅针对中文内容和标题的blog post. 链接中有文章描述的主题关键字会增
加该网页在搜索结果中的权重,这是正常的。然而用中文写成的内容和标题,链接却是拼音或者英文,这个,Google和Baidu会考虑吗?
假设我写一篇文章,标题叫农历。
如果我用英文做post slug,那么可能是lunar-calendar或者chinese-lunar-calendar.
搜索引擎在收录该网页的时候,会考虑到链接中有lunar calendar而升高它在“农历”关键字搜索结果中的名次吗?我想不会。而搜索”lunar
calendar”过来的人,90%的几率是看不懂文章在说什么。
如果我用拼音做post slug,那么是nongli. 我认为搜索引擎同样不会因此而觉得该网页与“农历”关系更紧密。由于同词多音的存在,这个分析对于搜索引擎
来说非常鸡肋。对于关键字”nongli”,搜索引擎会提示,是不是要找“农历”。
如果用中文做post slug呢?我们可以在Google中搜索“农历”试试看。第一页上就有wikipedia的繁体农历词条。Google在这条搜索
结果的下面给出的链接是“zh.wikipedia.org/wiki/農曆”。实际上该词条的真是链接地址是“http://zh.wikipedia.org/w
iki/%E8%BE%B2%E6%9B%86”,后面是繁体“農曆”的编码。wikipedia没有使用拼音、英文做”slug”,而是直接使用了中文。而
Google显然懂得对它进行解码,因为它给出了解码后的链接,并且将该词加粗,表明这是一个匹配,不仅仅是页面标题。
搜索引擎懂得做简繁转换,懂得对percent encoding解码来寻找信息(这一点不知道百度做到了没有),但是目前似乎不会先翻译再搜索。
所以我觉得SEO不是用拼音、英文做slug的理由。
我个人在中文blog里倒是懒得用post slug,文章就用编号来查找,也就省了为中文的slug烦恼了。
如有疑问或不同意见,请在此留言。
plugin.html