编辑在后台点一下“预览”,链接就带着一串临时参数出现在地址栏里。如果这个链接外网能打开、蜘蛛也能爬到,未完成的稿件、测试中的价格页、临时上线的活动页就可能提前进入索引。这类页面通常没有正式导航、没有内链支撑,一旦被抓走,既占用抓取预算,也会在搜索结果里留下半成品。下面按入口排查、分层防护、上线前自查和事后处理四个部分说。
一、先找出可能外泄的入口
- 后台预览链接:常见形式是 ?preview=1、?p=123&preview=true,或带一长串临时 token 的地址。
- 测试与预发环境:test.、stage.、dev. 之类的子域名,或独立 IP 上直接放了一份整站镜像。
- CMS 默认路径:草稿箱、回收站、附件目录、上传目录能被直接列举。
- 临时目录与压缩包:迁移时留下的 /new/、/bak/,以及没删掉的整站压缩包或数据库导出文件。
- 站内搜索与筛选:结果页可被参数化拼出大量地址,把中间状态的列表也暴露出去。
- 空栏目页:模板已经上传,内容还没填,但地址可以直接打开。
二、三层防护,按成本从低到高
服务器与网络层
测试环境优先放内网,或加 IP 白名单、走 VPN。确实需要公网可访问时,用基础认证或统一的前置网关拦住。基础认证不能百分百挡住抓取,但能过滤掉绝大多数无差别爬取,成本也最低。
页面与响应头层
预览页可以输出 X-Robots-Tag: noindex, nofollow,正式页面不要带这个头。这里要分清两件事:noindex 是“不索引”,不是“不抓取”。如果连抓取都想挡,得上 Disallow 或关掉访问权限。两套指令混着乱用,容易出现“既没挡住抓取、也没去掉索引”的尴尬局面。
结构与协议层
测试域名整体用 robots.txt 禁止抓取,同时确认不被主站的 sitemap、内链、canonical 指向。发布流程里再加一条:预览链接只在登录态有效,退出登录即失效,或者设置一个较短的过期时间。
三、上线前的自查清单
- 用未登录的浏览器打开预览链接,确认是否仍能看到内容。
- 检查测试子域名的 robots.txt 和响应头,确认处于禁止抓取状态。
- 站内检索 ?preview、?token、?tmp 这类参数,看有没有被索引的记录。
- 翻一遍服务器目录,确认没有残留的可下载文件,比如压缩包、备份文件、日志文件。
- 核对 sitemap 与首页内链,确认没有指向测试域或草稿地址。
- 检查后台权限,普通编辑不应能生成长期有效的公开预览链接。
四、如果已经被抓到了
顺序很重要:先断掉访问路径,再谈索引状态。先让页面下线、加 noindex 或收回访问权限,然后再等下一次抓取。如果地址已经出现在结果里,可以用移除工具做临时隐藏,同时用 404 或 410 明确告诉蜘蛛这个地址不再存在。
不建议用 302 跳回首页。这种做法会让蜘蛛持续回来确认跳转关系,反而延长了清理周期,也让首页承接了一堆语义无关的信号。
预览页面的处理原则很简单:先断掉访问路径,再谈索引状态。顺序反了,蜘蛛会反复回来确认一个它还够得着的地址。
五、把这一步并进发布流程
与其事后清理,不如固定成流程:预览只在登录态可见、测试域名长期禁止抓取、临时文件用完即删、上线前跑一遍上面的清单。另外,定期翻一下服务器日志里测试域名和未公开路径的抓取记录,能比较早地发现漏出的入口。日志不用天天看,但迁移、改版、大促这类节点前后值得专门查一次。
这些事情本身不产生内容,但它们决定了你已经做好的内容是被正常发现,还是被半成品页面分散掉注意力。养成习惯之后,每次大概十几分钟,比事后一边找索引一边删文件轻松得多。