做开发和运营的人常会遇到一种情况:某段还没正式发布的文案,在搜索引擎里能搜到,点进去却是测试域名或者带长串参数的预览地址。这类 URL 本身没有搜索价值,进了索引之后还会和正式页面争同一个内容信号。处理这件事的重点不在于“删掉”,而在于先把可被抓取的入口收口。
先确认被收录的是哪个地址
域名不同,处理方式完全不同,所以第一步是看清楚。用 site: 加上对应域名查一遍,再换几段正文里的原句搜一遍,通常能定位到具体形式:
- 测试子域:带 staging、test、dev、beta 前缀的域名或独立子域。
- 同域下的预览路径:如 /preview/、/draft/、带随机串的临时目录。
- 对象存储或 CDN 默认地址:静态站、附件、图片被单独部署时生成的那个域名。
- 带分享令牌的链接:在线文档、原型工具、图床生成的公开链接,往往一串随机字符就能直接打开。
把这几种分开记录,才知道该在哪一层做拦截。混在一起处理,容易出现“屏蔽了 A,结果收录的是 B”的情况。
这些地址是怎么被爬虫发现的
没有任何地方引用过的 URL,爬虫一般拿不到。所以发现入口可以反推:
- 开发时把预览地址贴进了工单、聊天群或公开论坛,被第三方页面转载或引用。
- 正式站的内链、导航或站点地图里混进了测试路径,比如复制模板时忘了改链接。
- 上线流程里把测试域名提交到了搜索后台,或者一份 sitemap 文件里同时列了两套域名。
- 服务器日志里的 Referer 能看出第一批访问来自哪里,这比靠猜可靠得多。
处置顺序:先断入口,再改信号
- 清理引用来源。内链、导航、站点地图、已经公开出去的分享链接,能删的删,能撤回的撤回。入口还在,信号怎么改都会反复出现。
- 限制访问。给测试环境加登录验证或限制来源 IP,让爬虫拿不到内容,比事后一个个去屏蔽更省事。
- 让状态码变干净。如果整个测试域名不再使用,让它统一返回 404 或 410,比留着一个可访问的页面更明确。
- 必要时加 noindex。注意顺序:noindex 要生效,页面必须能被抓取到。如果先用 robots.txt 把整个目录屏蔽掉,爬虫看不到 noindex,索引里的旧记录反而可能留得更久。
- 正式域名上线后补上规范化。如果同一份内容确实要在多个地址提供,用 canonical 指向正式地址,并确认正式地址本身可访问、状态正常。
- 走一遍移除流程。确认页面已经不可访问之后,再用搜索后台的移除工具加速。索引更新本身有延迟,不必反复提交。
robots.txt 的作用是“不要来抓”,不是“从索引里删”。已经收录的 URL,屏蔽抓取往往只能阻止内容被更新,记录本身还会在结果里存在一段时间。
上线前的自查清单
- 测试域名和预览路径没有出现在正式站的内链、导航与站点地图里。
- 站点地图只列正式域名,其中的 URL 都能正常访问。
- 分享类链接设置了有效期,或默认不对外公开。
- 打包发布流程里没有把测试环境的配置或链接带上去。
- 上线后用搜索框和服务器日志各核一遍,确认没有遗漏入口。
已经进了索引,还要等多久
页面不可访问之后,索引记录的移除速度取决于抓取频率,快的几天,慢的需要更久。这期间不要频繁改策略:一会儿 noindex、一会儿 robots 屏蔽、一会儿又放开,信号互相冲突反而拖慢处理。把入口收干净、状态码稳定下来,剩下的交给时间。