给客户看的预览链接、能直接访问的测试域名、没有下线的旧站、CDN 回源域名——这些 URL 上的内容往往和正式站一模一样。它们一旦被抓走,就会成为重复内容的一个来源,也可能让用户搜到不该看到的版本。处理这类问题,重点其实不在“怎么删”,而在“一开始就别让它能被抓”。
这些 URL 通常从哪来
先搞清楚入口,才谈得上封堵。常见的来源有这么几类:
- 外链泄露:预览链接发给了客户、外包或合作方,又被贴到公开页面、工单系统或聊天记录里,爬虫顺着链接就进来了。
- 域名本身可访问:测试域名解析到了公网,没有加任何访问限制;或者 CDN 的回源域名可以直接请求。
- 旧站没退场:改版后旧域名既没跳转也没下线,内页仍然能打开。
- 调试信息外露:页面上输出了内部路径、接口地址或环境变量。
这些 URL 的共同点是:它们不属于正式站点结构,却能被蜘蛛正常抓到,并且返回 200。
处理顺序:抓取 → 索引 → 清场
很多站点只做了一步就以为解决了,结果过一阵发现索引里还是有。这三层是递进关系:
- 阻止抓取:robots.txt 的 Disallow、IP 白名单、HTTP 基础认证,成本最低。
- 阻止索引:页面 head 里的 noindex,作用在能返回页面的那条路径上。
- 清场:已经进索引的 URL,只能等重新抓取后按 404、410 或 noindex 退出。
要注意一个顺序上的坑:robots.txt 全站 Disallow 之后,蜘蛛看不到页面,也就读不到 noindex。如果你既想挡抓取又想挡索引,得先确认蜘蛛到底能不能访问到那个页面。
第一层:让蜘蛛进不来
- 预发布环境整体加 HTTP 基础认证或 IP 白名单,这是最彻底的方式,蜘蛛和普通用户都进不去。
- 如果必须对外可访问,用独立的 robots.txt 挡住整站,并确认这个文件本身能被匿名请求到。
- 测试域名要单独放一份 robots.txt,不要默认主站规则会自动生效——它们通常是两套部署。
第二层:被访问到也别进索引
- 在页面里加 noindex,但前提是这条路径没有被 robots 完全挡死,否则标签形同虚设。
- 返回正确的状态码,不要用一个 200 的“无权访问”页面来伪装。
- 测试域名不要随手配 canonical 指回主站。这种写法在测试环境里容易被复制到正式站,导致正式页面的收录归属混乱。
已经进索引了怎么退场
- 能下线就下线,返回 404 或 410,让页面自然退出索引。
- 不能下线就先加 noindex,然后等蜘蛛重新抓取,这中间有时间差。
- 清理之前先确认没有正式页面依赖这些 URL,避免误伤正常入口。
- 图片、PDF、接口返回的 JSON 也可能被索引,不只是 HTML 页面。
容易漏掉的几个点
- 旧域名只做了首页跳转,内页还能直接访问。
- CDN 回源域名可以被直接请求,且没有被认证或 robots 覆盖。
- 预览环境沿用了主站的 robots.txt,没有单独配置。
- sitemap 里误把测试域名下的 URL 一起提交了。
预发布环境的问题,最好在部署阶段就解决:访问控制放在最外层,比事后一个个提交删除省事得多。已经进索引的也不用慌,按抓取、索引、退场的顺序走一遍,通常能慢慢收干净。