/ 技术栈 | Tech / 55 views

批量实现WordPress固定链接的中译英与重定向

最近对于重新写博客热情极大,写了自然希望更多人看到,所以在SEO上也稍微做了一点优化。

WordPress的固定链接

使用Wordpress写博客的话,文章的固定链接有很多形式,可以在Dashboard-Settings-Permalinks中修改。

image-20240111230336885

Permalink大致有5种形式,官方有详细解释,简单说一下:

  • Plain:随机生成一个数字,一般就是使用数据库中的Post ID,所以是?p=123这种结构
  • Day and name:日期+博客的slug
  • Month and name:同上,月份+博客的slug
  • Numeric:和Plain类似,不过是/archives/后面跟上Post ID
  • Post Name:博客的slug
  • Costom Structure:自行组合,下面给到了一个可以组合的tag,用%%表示。

这里有一个名词解释,slug其实就是博客的页面(文章、tag、类别等)显示在浏览器地址栏上域名后面的地址,以文章举例,是在文章标题下面Permalink的位置编辑。

image-20240112003055255

SEO最好是使用Post name形式,对于搜索引擎来说,Numeric只是一串没有意义的数字而已。

一般来说,Permalinks最好是在博客刚刚装好的时候就定义好,不要轻易更改,否则以前的一些链接就会变成坏链,比如之前有博友在文章中用旧链接指向过我的某篇文章,点击就会显示404页面。如果是刚开始建站,修改的话直接切到设置页面,选Post name,或者像我一样用Custom Structure中自定义,加上.html伪静态。

修改Numeric结构到Post_Name结构

而我此前一直用的是Numeric,是一个大失误,因为博客已经很多年了,文章很多改起来非常麻烦,一直拖延,这次是因为刚辞职正好在家没事就折腾一下。

我定位了一下主要是两个问题:

  1. 如果使用Post name作为固定链接,中文博客的标题自动就是中文的,这样放在固定链接中就是一串乱码,仍然不适合传播和搜索引擎收录。新文章可以用中文自动翻译成英文的插件,比如这个Wenprise Pinyin Slug,设置使用百度翻译的API,实现自动翻译中文标题。还有其他的,在WP商店搜了几个我感觉太复杂了,这里不多说。但历史文章怎么批量调整成英文?
  2. 从原来的格式Numeric调整到Post name。新发布内容没问题,但历史文章访问就会404,需要采用301永久重定向来解决,就是指网页由一个地址永久地移动到了另外一个地址。很多都可以插件都可以实现301重定向。比如404 SolutionAll in One SEO,我试了几个,最后选择了Redirection,优点是轻量,功能齐全,免费。

简单来看,为了完成我的网站优化,我需要首先将所有历史文章的中文slug转换为英文slug,然后再与原来的Number实现一一对应,实现重定向。历史文章的批量的修改,网上基本上找不到合适的方法,Wenprise Pinyin Slug的作者直接说因为修改会影响网站权重,所以不会增加这个功能。

因为不会写代码只能曲线救国,使用最笨的方法,我想到的是直接修改数据库,大致分成了几个步骤来实现:

1. 把Wordpress的所有文章链接导出

如果文章较少的话,手动就可以,但几百篇,还是用插件吧。推荐Export All URLs,可以直接把链接下载到CSV表格中。装好插件之后直接勾选导出选项即可,我只导出了Posts,勾选上Post ID,状态选Published,这两个是关键值,导出CSV之后可以存在本地进行处理。

image-20240112005825793

2.实现Post ID和Post Name一一对应

把导出的CSV打开,找到Title这一列,就是所有文章的标题,手动翻译,或者找个翻译软件翻译,我直接机翻的,还要对特殊字符,比如逗号句号分号之类的进行替换处理,单词之间用连字符,不要用下划线,链接尽量短一些,我没太管这个了。把翻译好的内容作为slug,最后得到Post ID和Post Name(Slug)的对应表,存储为export_all_urls.csv。

image-20240112010229246

3.英文Post_name替换中文Post_name

打开Wordpress的数据库,找到wp_posts这个数据表,可以看到它的结构大概是这样子的。其中,主要会用到的是ID,post_status:(publish/auto-draft/inherit),post_name,post_status是会发现同一个文章可能存在多个状态,只要替换掉已发表的,也就是状态为publish的就可以。

image-20240112010420749

接下来,备份数据库,切记!
把本地的export_all_urls.csv导入Wordpress数据库中,然后用Sql命令对两个表进行处理,大致语句如下:

UPDATE wp_posts AS A
JOIN export_all_urls_csv AS B ON A.ID = B.PostID
SET A.post_name = B.PostName
WHERE A.post_status = 'publish';

这样所有历史文章的Permalinks就都被替换成了英文形式,可以挑几个文章看看是否都导入成功,然后将Dashboard-Settings-Permalinks切换成自己想要的,比如我就是改成了/%post_name%.html。

4. 实现重定向链接一一对应

打开Redirection找到Import/Export界面,可以先导出或者下载一个现有的跳转看看导入模板应该什么格式。

image-20240112011340231

基本就四个字段,source是原来的地址,也就是之前的链接结构,注意反斜杠的数量,target就是新的地址,这里我是直接用Export All URLs重新导出了一次修改过的urls,regex和code无脑跟模板填。

image-20240112011728840

然后选择Import把CSV文件导回插件,在Redirection的Redirects菜单下就能看到定向的数据呢。导入完成之后还需要一段时间实现跳转,如果立刻用新的格式访问还是会404,耐心等一段时间就好了。

至此,整个替换过程结束。

其他优化

对于一些建站要求较高的站主,完成这一步之后可能会直接去搜索引擎提交sitemap,或者还有一些其他的SEO优化方式,不过我没那么专业,就没进行呢,我自己之前还做了两个动作。

1.Wordpress固定链接添加.html伪静态

在Dashboard-Settings-Permalinks自定义修改为/%postname%.html,就可以把文章(post)的后缀变成html,但是页面(page)的后缀还是没有改变的,可以在当前模板的functions.php文件添加以下代码:

/* 自定义tag、page页面url
function custom_page_rules() 
{
global $wp_rewrite;
/** page页面自定义URL样式 **/
$wp_rewrite->page_structure = $wp_rewrite->root . 'post/%pagename%.html';
/** tag页面自定义URL样式 **/
$wp_rewrite->extra_permastructs['post_tag']['with_front'] = ”;
$wp_rewrite->extra_permastructs['post_tag']['struct'] = $wp_rewrite->extra_permastructs['post_tag']['with_front'] . 'tag/%post_tag%.html';
}
add_action('init', 'custom_page_rules');

2. 检测历史链接

一般自己写博客的时候,会链接外站,也会站内链接自己的文章,经过上面的跳转,一般站内链接都会重定向,如果不放心的话,可以用Broken Link Checker这个插件检查一下。内链定向都没问题,不过有的十来年前写的博文链接早就挂了,这里显示有62个Broken,我反正是懒得搞了。

image-20240112013014272

3.监控404页面

如果不放心怕还是有文章链接没有转化成功的话可以用Redistriction带的404s功能监测下有哪些Source URL没有定向好。我看了下挺多bot访问记录的,定期看看把漏网之鱼替换掉就行。

其他类似可参考文章:
如何更换Wordpress固定链接?
wordpress自动给旧文章生成别名
Export All URLs 导出WordPres所有文章链接
WordPress分类/标签/页面的url链接添加html后缀

One Bag Travel 初体验
One Bag Travel 初体验
WordPress博客折腾记-续
WordPress博客折腾记-续
WordPress博客折腾记
WordPress博客折腾记
2022年微博/Mastodon/Twitter的同步方法
2022年微博/Mastodon/Twitter的同步方法

5

  1. SHore

    超级厉害

    1. Leche

      超级多彩虹屁~

  2. 椒盐豆豉

    点进来猛然发现模板也变了!

    1. Leche

      因为后台显示移动端访问很慢,所以搞了个WPtouch啥的移动优化,主题就变了……><非常挣扎,似乎应该现在一鼓作气换到Hugo去

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.