还没发布的内容出现在搜索结果里,问题通常不在搜索这一侧,而在发布之前那些能打开的地址上。草稿页、预览地址、修订记录,本质是同一个问题:内容已经能通过一个 URL 取到,而那个 URL 没有被排除在索引之外。
这一篇讲怎么把这些地址一个一个找出来并处理。WordPress 自身的行为引官方文档,索引相关的判断只引 Google 官方文档。
泄漏一般发生在四个位置
| 位置 | 典型表现 | 先查什么 |
|---|---|---|
| 草稿与待发布 | 正常地址加一个前缀就能打开 | 这个地址返回 200 还是 404 |
| 预览地址 | 地址后面带一串预览参数 | 不登录时打开会看到什么 |
| 修订记录 | 地址后面带修订编号 | 修订页是否直接输出全文 |
| 缓存与 CDN | 已经下线,缓存里还在 | 换一个无痕窗口再请求一次 |
这四类里,第四类最容易被误判成"没删干净",其实是缓存还没过期,处理方式和前三类完全不同。

逐项检查:一份可以直接用的清单
- 后台列出所有非已发布状态的内容,把它们的地址抄下来,一条一行。
- 用一个没有登录状态的窗口逐条请求,记下状态码、是否需要密码、页面里是否出现正文。
- 在每个能返回 200 的地址上,看 head 里的索引指令是什么,以及内容是否真的只露出摘要。
- 对确实不该存在的地址,加跳转或让它直接失效;对需要留着的,单独处理索引指令。
这一步容易被缓存打断:如果全页缓存把草稿页连同当时的 head 一起存了下来,你后来加的索引指令在缓存过期之前根本不会出现在响应里。所以每次改完都要先清一次缓存再重新请求,否则看到的还是旧版本的头部信息,这也是"我明明加了却没变化"的常见原因。
WordPress 官方代码参考把发布状态、修订、参数校验这些都放在可查的函数里(例如取发布状态、取修订、判断参数是否有效),主题和插件就是挂在这套机制上改变前台输出的。所以第二步那个"不登录打开会看到什么"的测试,比翻设置界面更能说明问题。同样的“未发布内容先被打开”问题,在测试环境里要按预发布站防收录清单提前收口。
加索引指令能不能挡住:先看官方怎么定义这条规则
Google 在robots meta 标签与 X-Robots-Tag 的说明里第一句就写明:这些设置只有在允许抓取该页面的前提下才能被读取和执行。这句话有两个后果,一好一坏。好的结果是,给草稿页加正确的索引指令确实能让它退出结果;坏的结果是,如果你同时用 robots.txt 把它挡在抓取之外,这条指令就永远没机会被读到,页面状态会变得难以判断 —— 同一份文档在规范 URL 那篇里也提醒过,robots.txt 不适合用来做规范化。
同一份文档还有一条容易忽略:规则冲突时,更严格的那条生效。所以同一页上如果既有别人加的 noindex,又有插件加的其他规则,先要弄清楚最终生效的是哪一条,而不是看代码里写了什么。
哪些情况本来就不必拦
有两类可以放着:一是本来就打算公开、只是先在草稿里打磨的内容,它在发布后应该正常被检索,提前拦没有意义;二是通过参数访问的内部视图,比如编辑时的预览,WordPress 本身就要求通过参数校验才能取到,这类地址的处理逻辑和草稿页不一样,硬套同一套规则容易误伤。
需要说清楚的边界:官方文档没有公布"未发布内容被收录后多久会消失"这类时限,也没有公布过这类情况的处理优先级表格。它只说明了指令怎么生效,剩下的要靠你自己在 Search Console 里观察。
怎么确认这些地址已经不在索引里
第一步是复查请求结果:处理完再请求一次,确认状态码和索引指令都符合预期。第二步是查残留。Google 在搜索操作符说明里提到,site: 加路径前缀可以找某一类地址是否还有结果,同时提醒操作符受索引与检索限制影响,正式排查要用 Search Console 的网址检查工具。对每个地址提交网址检查,看它报告的规范地址和索引状态是否与你改完的样子一致。
把这套动作固定下来:改版、加插件、换主题之后,按"状态码、索引指令、缓存"这三项各过一遍,不要等到搜索结果里出现异常再回头查。
顺带提醒一句判断口径:某个标签到底有没有输出,思路和WordPress 站内搜索页被收录:先查 noindex 有没有真正输出那篇一样,都是先看响应里有没有它,再谈效果;给某个功能加开关前也要先查依赖,可以参考为 SEO 关闭 WordPress REST API 之前要做的依赖核对。