不少站点的抓取日志里会出现一些不该出现的地址:带 token 的预览链接、staging 子域名下的页面、还没排期的草稿内容。这些页面通常没有导航入口,也没有内链指向,但只要有一个人把链接分享出去,或者某个接口把地址吐给了前端,蜘蛛就有机会摸到。
预览链接是怎么漏出去的
- CMS 的预览按钮会生成带签名参数的临时地址,分享到外部后被别的页面引用或转存。
- 测试域名、staging 环境没有加访问限制,又和正式站共用同一套模板与站点地图生成逻辑。
- 前端路由把草稿状态的内容也渲染成了可访问 URL,只是没有在列表里展示。
- App、小程序或接口返回的字段里直接带上了未发布页面的地址,被用户复制走。
- 发在邮件、群聊里的预览链接被贴进了公开文档或论坛。
这些途径的共同点是:它们绕过导航和内链,直接给蜘蛛一个可请求的地址。蜘蛛不判断你的意图,它只认状态码和响应内容。
被收进索引之后会带来什么
草稿意味着内容还会改,标点、事实、价格、日期都可能变,用户搜到的是旧版本。同一主题下出现正式页和预览页两个版本,彼此消耗权重。预览页往往还缺少版权说明、联系方式,也可能带着内部批注。数量一多,还会占用本就不宽的抓取配额。
自查:先弄清有多少、来自哪里
- 用 site: 指令配合品牌词和栏目词,看看是否存在测试域名、预览域名下的结果,注意这只是参考,查不全。
- 翻原始抓取日志,过滤含有 token、preview、draft、staging、dev、uat、beta 等字样的路径。
- 检查站点地图、RSS 输出、接口响应里是否混进了未发布地址。
- 确认 CMS 预览链接的有效期,以及它在未登录状态下能否打开。
处理方式:分三层做
能关掉的就直接关掉
测试站优先加基础认证或 IP 白名单,别指望 robots.txt 挡人。robots 文件是请求,不是强制措施,防护强度和一个提示牌差不多。
关不掉的用 noindex
预览页在 HTTP 响应头里返回 X-Robots-Tag: noindex,比页面里的 meta 标签更稳,对非 HTML 资源同样有效。需要注意的是,不要让同一批 URL 同时被 robots.txt 屏蔽又指望 noindex 生效——被规则挡住的页面,蜘蛛读不到你写的 noindex。
已经进索引的逐个处理
- 确认页面确实要下线后,返回 410 或 301 指向正式页,别只删数据库记录留下空白响应。
- 在搜索资源平台提交移除请求,把它当作临时手段而不是长期方案。
- 检查是否有外部页面链接到它,必要时联系对方更新地址。
把检查提前到发布流程
事后清理的成本远高于事前拦截。几个可以落地的做法:
- 预览链接默认带有效期,过期自动失效,并限制同一链接的访问次数。
- 发布动作触发一次比对,草稿状态对应的 URL 统一返回 404 或 403,而不是正常渲染。
- 上线前跑一遍待发布内容里的地址清单,确认没有内网域名、临时参数外泄。
- 站点地图和 RSS 只允许正式域名下、状态为已发布的页面进入,规则写死在生成逻辑里,而不是靠人工把关。
如果团队规模不大,至少可以先做一件事:每月花十分钟翻一次抓取日志里的异常路径,把新冒出来的预览地址记下来,回头补上对应的拦截规则。问题通常不是一次爆发的,而是一个入口一个入口慢慢漏出来的。
预览链接对内部来说是草稿,对外部来说就是一个公开页面。蜘蛛不会替你区分这两者,它只按收到的响应行事。