WordPress 7.2 新增 /random/ 随机文章入口:会影响性能和 SEO 吗?要不要关?

站长笔记2026-11-12发布 WarpEdit
1 0 0

WordPress 7.2 会新增一个默认开启的随机内容入口:访问 你的域名/random/,WordPress 从已发布的文章里随机挑一篇,用 302 跳转过去。它不会产生新的可索引页面,跳转本身带 noindex 和禁止缓存的响应头,对 SEO 的直接影响很小;每次访问会跑一条 ORDER BY RAND() 查询,几百上千篇文章的站基本无感,文章量很大的站要先测。不想要的话,一个过滤器就能整体关掉。注意 7.2 还没正式发布:按官方日程,RC1 在 11 月 17 日,正式版计划 12 月 8 日发布,下文依据 11 月 5 日的开发说明和 11 月 12 日读取的开发版源码,正式版细节仍可能调整。

WordPress 7.2 /random/ 封面:浏览器地址栏 /random/ 旁滚出一颗骰子,302 箭头指向随机文章卡片,旁边是开关和 noindex 标签

/random/ 到底会做什么

随机入口挂在现有的归档路径前面。用默认前缀、并且开启了固定链接(伪静态)时,会生成这几类规则:

访问地址 跳到哪里
/random/ 随机一篇已发布的文章
/random/category/分类别名/ 该分类下随机一篇
/random/tag/标签别名/ 该标签下随机一篇(其他公开分类法同理)
/random/author/作者名/ 该作者的随机一篇
/random/文章类型/ 某个可随机的自定义文章类型里随机一篇

源码里还有几条值得知道的边界:

  • 只挑 已发布、没有密码保护 的内容,草稿、私密文章和加密文章不会被选中。
  • 只响应 GET 和 HEAD 请求;单篇页面和 Feed 不算随机请求。
  • 归档里一篇可选的都没有时,返回 404。
  • 搜索结果也能随机,形式是 ?s=关键词&random。
  • 如果站里已经有一个发布在 /random/ 的页面,或者文章固定链接是 /%postname%/ 而恰好有篇文章别名叫 random,那这个页面或文章优先,随机入口让路。

「random」这个前缀可以在「设置 → 固定链接」里改,而且是可翻译的字符串。中文站升级后,建议先去固定链接页看一眼实际前缀是什么,别默认它一定叫 random。

WordPress 7.2 Beta 5 后台「设置 → 固定链接」页面,可选区域在分类前缀、标签前缀下方新增 Random base 输入框(已用红框标出)
本地测试站点(WordPress 7.2 Beta 5,搭配 7.1.4 简体中文语言包)的「设置 → 固定链接」页面,2026 年 11 月 12 日截图。新增字段的中文翻译尚未就绪,所以显示英文「Random base」;留空时使用默认前缀 random。

哪些内容会被随机到:randomable 规则

7.2 给 register_post_type() 加了一个 randomable 参数。没有显式设置时,规则是:文章类型同时满足 publicly_queryable(前台可查询)和设置了 has_archive(有归档页),才默认可随机。内置类型里,文章(post)可随机,页面(page)和附件(attachment)不可以。

分类法跟着文章类型走:只有挂在可随机文章类型上的分类法,才会生成 /random/分类法/... 这样的规则。

这条规则对用自定义文章类型的主题影响最大。拿 WarpNav 自己举例,它用 OneNav 主题,网址(sites)、软件(app)、书籍(book)都是自定义文章类型。11 月 12 日从站点公开的 REST 接口 /wp/v2/types 读到,这三个类型的 has_archive 都是 false,「网址分类」「软件分类」这些分类法也只挂在各自的类型上。照 7.2 的默认规则推算,升级后 WarpNav 的 /random/ 只会在普通文章里挑,网址、软件和书籍不会被随机到。这是按规则推出来的结论,主题以后如果给这些类型显式设置 randomable,或者改了归档设置,结果就会变,正式版上线后还要实测确认。

你的站也可以这样查。没装 7.2 时先看接口:

curl -s "https://example.com/?rest_route=/wp/v2/types" | python3 -m json.tool | grep -E '"slug"|has_archive'

has_archive 为 true(或是一个字符串)的公开类型,在 7.2 里默认就会进随机池。装好 7.2 测试版以后,可以直接问 WordPress:

wp eval 'print_r( get_post_types( array( "randomable" => true ) ) );'
wp rewrite list | grep random

第一条列出可随机的文章类型,第二条看实际生成了哪些随机规则。

性能:一次跳转一条 ORDER BY RAND()

随机文章是由主查询选出来的。访问 /random/ 时,WordPress 临时挂上三个回调:把查询限制在可随机的已发布内容里,排序改成 RAND(),结果限定 1 条,然后 302 跳过去。为了减轻开销,这条查询关掉了总数统计,也不预加载文章元数据和分类缓存。

ORDER BY RAND() 的问题是数据库要给所有候选行都算一个随机值再排序,候选越多越慢。几百、几千篇文章的站基本感觉不到。几十万篇文章的大站,或者 pre_get_posts 里有复杂条件的站,最好在测试环境用真实数据量压一下。开发说明的评论区也有人问到这一点,官方说明里没有给出通用的性能数据。

还有一个容易忽略的点:跳转响应带了禁止缓存的头,页面缓存插件和 CDN 一般不会缓存它,每次访问都会落到 PHP 和数据库。如果有爬虫或恶意请求反复刷 /random/,压力会直接打到源站。担心这一点的,可以在 CDN 或 Web 服务器层对这个路径限速,或者干脆关掉功能。

终端中 curl -sI https://example.com/random/ 返回 HTTP/1.1 302 Found,带 Cache-Control 禁止缓存、X-Robots-Tag: noindex, follow,Location 指向一篇文章
在本地测试站点(Nginx 1.26 + WordPress 7.2 Beta 5,固定链接为 /%postname%/)执行的实际输出,域名为 example.com。正式版的响应头仍可能调整。

SEO:会不会被收录、会不会分走权重

从源码看,跳转前会先发禁止缓存的响应头,再加一行 X-Robots-Tag: noindex, follow,然后用 302(临时跳转)送到随机挑中的那篇文章。所以:

  • /random/ 这个地址本身不该被收录,搜索引擎跟着跳过去,看到的是原本就存在的文章页。
  • 没有生成新内容,也就不存在重复内容的问题。302 不会把 /random/ 当成某篇文章的永久地址。
  • 统计上会有点乱:点击 /random/ 的那一下看不出最后去了哪篇,只能从下一次页面浏览里看到落地页;会执行 JavaScript 的爬虫跟着跳转后,会被记成某篇文章的浏览。

对大多数内容站来说,SEO 上可以放心。真正需要考虑的是:你愿不愿意让访客随机看到老文章。有些过时的教程,被随机推到读者面前反而不是好事。

要不要关,怎么关

按站点类型大致可以这样判断:

  • 博客、资讯站、文章多的站:可以留着,甚至在页脚或侧栏放个「随便看看」链接到 /random/,零成本多一个找旧文的入口。
  • 企业官网、落地页为主、文章很少的站:用处不大,可以关。
  • 有大量过时内容、或者文章量非常大的站:要么关掉,要么排除掉不想被随机到的分类。

整体关闭

在 wp-content/mu-plugins/ 下新建一个 PHP 文件(比如 disable-random.php):

<?php
add_filter( 'wp_enable_random_content_redirect', '__return_false' );

用 mu-plugin 是因为它不会被误停用,也不依赖主题。关掉后不再生成随机规则,固定链接页的前缀设置会隐藏,random 查询参数也会被忽略。改了这个过滤器的返回值后要刷新一次重写规则:到「设置 → 固定链接」直接点保存,或者跑 wp rewrite flush。

只排除某个分类

随机选文走的是主查询,所以已有的 pre_get_posts 回调也会作用到它。只想影响随机请求,就先用 wp_is_random_content_query() 判断:

add_action( 'pre_get_posts', static function ( WP_Query $query ) {
    if ( wp_is_random_content_query( $query ) ) {
        $query->set( 'category__not_in', array( 123 ) ); // 换成你的分类 ID
    }
} );

把某个自定义文章类型排除在外

自己注册的类型,直接在 register_post_type() 里加 'randomable' => false。主题或插件注册的类型改不了源码,可以用 WordPress 早就有的 register_post_type_args 过滤器改参数:

add_filter( 'register_post_type_args', static function ( $args, $post_type ) {
    if ( 'sites' === $post_type ) { // 换成要排除的类型
        $args['randomable'] = false;
    }
    return $args;
}, 10, 2 );

像 WarpNav 这种自定义类型本来就没开归档的站,现在不需要加;主题以后改了归档设置,再加也来得及。

升级前在测试站跑一遍

7.2 正式版之前,可以用 WordPress Beta Tester 插件或官方提供的测试版 ZIP,在测试站装上 Beta 或 RC,按这个顺序检查:

  1. 访问 /random/,确认是 302 跳到某篇文章,响应头里有 X-Robots-Tag: noindex, follow。
  2. 去「设置 → 固定链接」看前缀叫什么,有没有和现有页面、文章别名撞车。
  3. 用上面的 wp eval 和 wp rewrite list 看哪些文章类型、分类法进了随机池,是不是你想要的。
  4. 文章量大的站,用真实数据量压测几次 /random/ 的响应时间。
  5. 决定关不关,需要关就把 mu-plugin 准备好,升级当天一起上线。

同一时期 WordPress 刚修过一个升级过程中的远程代码执行漏洞,升 7.2 之前,最好先确认站点已经在 7.1.4,升级前的防护做法见 WordPress CVE-2026-119977:升级到 7.1.4 前先封住 wp-content/upgrade。大版本升级的备份、插件兼容和回滚,可以参考 WordPress 7.1 升级避坑指南。WordPress 本身的介绍和下载入口见 WarpNav 的 WordPress 条目。

资料来源

原始资料(核对日期:2026 年 11 月 12 日):

  • WordPress 开发说明 Your Content Is Going To Get More Random!(2026 年 11 月 5 日):https://make.wordpress.org/core/2026/11/05/your-content-is-going-to-get-more-random/
  • WordPress 7.2 开发日程(2026 年 11 月 10 日更新):https://make.wordpress.org/core/7-2/
  • WordPress 开发版源码 class-wp.php、query.php、class-wp-post-type.php(2026 年 11 月 12 日读取 trunk):https://github.com/WordPress/wordpress-develop/tree/trunk/src/wp-includes
  • 相关工单 #64498:https://core.trac.wordpress.org/ticket/64498
  • WP Gazette,WordPress random content endpoint arrives in version 7.2(2026 年 11 月 6 日):https://wpgazette.com/core-releases/wordpress-random-content-endpoint/
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...