搜索全站
数据库 10 分钟阅读

WordPress 固定链接结构怎么选:6 种模式对比与 SEO 建议

固定链接一旦定下就很难改,改错就是全站 404 加收录清零。本文对比 6 种固定链接结构对百度与 Google 的影响,讲清带日期、带分类、带 ID 各自的利弊,给出改链接时的 301 重定向完整方案。

U
UFO_PF 2022-11-23 · 阅读 10 分钟
Wo 数据库
阅读提示
本文约 3,713 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:一个改了就回不去的选择

WordPress 默认的固定链接是”朴素”模式:/?p=123。很多新手建站半年后才想起来改,改成 %postname% 之后发现:所有旧文章 404,百度收录的历史 URL 全掉,外链全部失效。

固定链接是全站 URL 的骨架,决定了三件事:搜索引擎对你站点结构的理解、URL 里关键词的权重传递、以及未来改版的迁移成本。这一篇把选择的逻辑讲透。

原理分析:固定链接是怎么工作的

WordPress 的 URL 美化依赖重写规则(rewrite rules),它存在 wp_options 的 rewrite_rules 字段里,是一张巨大的正则映射表。

流程是:访客请求 /2026/10/hello-world/ → 服务器(Nginx/Apache)把请求转给 index.php → WordPress 拿这个路径去匹配重写规则 → 解析成 ?p=123 之类的查询参数 → 查询数据库 → 输出。

所以固定链接有两层配置,缺一不可:

  1. WordPress 层:设置 → 固定链接,选结构并保存(生成 rewrite_rules);
  2. 服务器层:Nginx 的 try_files 或 Apache 的 .htaccess 重写规则,把请求转给 index.php。

只改 WordPress 而服务器没配伪静态,就会全站内页 404——这是新手最常撞的墙。

生成后的规则可以这样看:

wp rewrite list --format=csv | head -20

六种结构对比:

结构 示例 优点 缺点
朴素 /?p=123 永不失效 无关键词,SEO 差,不友好
日期和名称 /2026/10/10/sample/ 有时间戳 Google 和百度都不喜欢,长 URL,改日期即变
月份和名称 /2026/10/sample/ 同上稍短 同上
数字 /archives/123 短 无语义,且暴露 ID
文章名 /sample-post/ 短、含关键词、最推荐 中文别名可能被转码
自定义(带分类) /%category%/%postname%/ 层级清晰 文章换分类 URL 就变,多层分类时 URL 很长

保姆级实操

第一步:选择结构(决策逻辑)

结论先行:大多数站点选”文章名”(/%postname%/)。

理由:

  • URL 最短,关键词权重最集中;
  • 不含日期,内容更新后 URL 不变,避免”内容新鲜度”被日期拖累;
  • 不含分类,换分类不用做 301;
  • 不含 ID,不暴露站点规模。

几个例外情况:

  • 新闻站/时效性强的站:可以用 /%postname%/ 同样,日期不建议。Google 明确表示 URL 里的日期会让用户判断内容过期。
  • 多语言站:建议在前面加语言前缀,如 /en/%postname%/(Polylang/WPML 会自动处理)。
  • WooCommerce:产品 URL 单独在 WooCommerce → 设置 → 产品 → 固定链接 里配,通常保留 /product/%postname%/,避免和文章 URL 冲突。

第二步:配置服务器伪静态

Nginx:

location / {
    try_files $uri $uri/ /index.php?$args;
}

Apache:确保 .htaccess 可写,WordPress 会自动写入:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

宝塔面板:网站 → 设置 → 伪静态 → 选 “wordpress” 模板 → 保存。

第三步:处理中文别名

中文站用拼音或英文别名,不要用中文标题直接当别名。中文 URL 会被浏览器转成 %E4%B8%AD%E6%96%87 这种百分号编码,很长且不利于分享,部分老爬虫处理也有问题。

装插件 “WP Pinyin Slug” 或用代码自动转:

add_filter( 'sanitize_title', function( $title ) {
    if ( preg_match( '/[\x{4e00}-\x{9fa5}]/u', $title ) ) {
        // 需要拼音库,这里示意
        $title = sanitize_title_with_dashes( $title );
    }
    return $title;
});

实际上更简单的办法是:发文时在”别名”框手工填拼音,或用 SEO 插件(RankMath)自带的 slug 建议功能。

第四步:改固定链接时的 301 重定向(最关键)

如果是从 /?p=123 或 /%year%/%monthnum%/%postname%/ 改成 /%postname%/,必须做 301。

方法 A:用插件”Redirection”

安装后它会自动检测固定链接变化并提示创建重定向规则。或者手工加:

  • 源 URL:/(\d{4})/(\d{2})/(\d{2})/(.*)
  • 目标 URL:/$4
  • 类型:301

方法 B:Nginx 规则

# /2026/10/10/slug/ -> /slug/
rewrite ^/\d{4}/\d{2}/\d{2}/([^/]+)/?$ /$1/ permanent;

# /archives/123 -> 需要查库,不建议 Nginx 做,用插件

方法 C:代码层(最稳,能处理 ID 型旧链接)

add_action( 'template_redirect', function() {
    if ( is_404() && isset( $_GET['p'] ) ) {
        $id = absint( $_GET['p'] );
        $url = get_permalink( $id );
        if ( $url ) {
            wp_redirect( $url, 301 );
            exit;
        }
    }
});

第五步:提交改版规则

  • 百度站长平台 → 网站改版 → 添加改版规则(支持规则改版,能最短时间完成新旧 URL 映射);
  • Google Search Console 无需特殊操作,301 会被自动跟随,但要重新提交 sitemap。

第六步:验证

wp rewrite flush
curl -I https://example.com/某文章别名/
curl -I https://example.com/2026/10/10/某文章别名/   # 应返回 301

常见踩坑与失败案例

  1. 案例一:改了固定链接结构,前台内页全 404。原因是 Nginx 没配 try_files。WordPress 设置和服务器伪静态是两件事。
  2. 案例二:用 /%category%/%postname%/,后来调整分类结构,几百篇文章 URL 全变,没做 301,百度收录掉了一半。这是选择带分类结构最大的风险。
  3. 别名和页面 URL 冲突:一篇文章别名叫 about,同时有个页面别名也叫 about,会导致其中一个打不开。加后缀区分。
  4. /blog/ 前缀:如果文章 URL 是 /blog/%postname%/,记得设置 → 固定链接 → 自定义结构里写 /blog/%postname%/,同时分类基础要留空,否则分类页变成 /blog/category/xxx/。
  5. 改完后台 404:跑一次 wp rewrite flush,或去设置 → 固定链接 点”保存更改”(不需要真的改)。
  6. 分页 URL:/page/2/ 这种分页在新结构下也要测,尤其是首页分页和分类分页。
  7. WooCommerce 产品 URL 改了之后购物车失效:产品的 product 基础改了要同步刷新,并且清空 WooCommerce 的缓存(WooCommerce → 状态 → 工具 → 清空 transients)。

总结

固定链接的最佳实践是:建站第一天就定成 /%postname%/,同时配好服务器伪静态;如果已经用了别的结构要改,必须配套做 301 重定向 + 向百度提交改版规则 + 重新提交 sitemap。中文站额外注意别名用拼音不用中文。这一项属于”改一次伤筋动骨”的配置,宁可前期多花十分钟想清楚,也不要后期花十天补救收录。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。