先给结论:如果这些域名都归你控制,最稳的做法不是在每个域名写一份只针对自己的 robots.txt,而是让其中一个域名作为“主站”被允许抓取,其余域名用 robots.txt 明确声明为不供搜索引擎抓取的副本或过渡站;如果这些域名各有独立品牌、独立受众,则不应互相屏蔽,而应让每个域名各自说明用途,并在页面层面做好规范化。判断依据只有一条:这些域名是同一套内容的多个入口,还是各自独立的站点。前者做抓取隔离,后者做用途区分。
这种情况下,robots.txt 的写法要服务于“别让搜索引擎把副本当独立内容抓进去”。假设你有 a.example、b.example、c.example 三个域名,指向同一套页面,你希望 a.example 作为唯一入口。那么 b、c 的 robots.txt 可以写成:
User-agent: *<br>Disallow: /
注意这里写的是 Disallow: /,不是 Disallow: *。前者表示屏蔽整站路径,后者是常见误写,容易被解析成屏蔽名为 * 的路径,实际效果不确定。
同时,a.example 的 robots.txt 保持正常放行,并可在其中用 Sitemap: 指向 a.example 自己的站点地图,帮助搜索引擎发现主站页面。这个动作的结果是:抓取预算和索引信号更可能集中到主站,副本域名不容易形成独立索引。但必须清楚,robots.txt 只是抓取限制,不是可靠的索引移除手段。如果 b.example 的页面已经被抓取并建索引,仅靠加 Disallow: / 并不能保证它从索引中消失,还需要配合页面级的 noindex 或规范的移除流程,而且 noindex 只有在页面仍可被抓取时才可能被读到,这本身就是一个需要取舍的地方。
如果这些域名对应不同地区、不同语言或不同产品线,各自有独立价值,就不该用 Disallow: / 互相屏蔽。这时 robots.txt 的职责不是隔离,而是放行和声明。每个域名的 robots.txt 都应允许抓取,并各自指向自己的站点地图:
User-agent: *<br>Allow: /<br>Sitemap: https://该域名/sitemap.xml
真正区分用途的动作发生在页面层,而不是 robots.txt 层:在相似页面上用 rel="canonical" 指向该内容的代表版本,或者在确实需要并存时用 hreflang 标注语言和地区对应关系。robots.txt 在这里只负责“让爬虫能进来读这些声明”,它本身不表达用途。把用途区分写进 robots.txt 是做不到的,因为 robots.txt 没有描述页面语义的字段。
你可能没有服务器日志、没有搜索平台后台权限,甚至无法确认这些域名当前被索引到什么程度。这时仍可执行的最小动作是:逐个域名请求 /robots.txt,确认返回的是 200 且内容可读,而不是 404、403 或一段 HTML 错误页。因为 robots.txt 返回异常时,不同搜索引擎的处理方式并不一致,有的会按“无限制”处理,有的会暂时限制抓取,这会让你的意图落空。
拿到各域名当前 robots.txt 内容后,先做一张对照表:哪个域名放行、哪个屏蔽、Sitemap 指向谁。这个动作的结果直接决定下一步——如果发现主站被屏蔽、副本被放行,那优先修正的是这个方向错误,而不是去调页面 canonical。反过来,如果各域名都放行且内容高度相似,下一步才轮到页面级规范化。
这里有一个不能推出的结论:请求 robots.txt 返回 200 且内容正确,不等于搜索引擎已经按你的意图处理。抓取限制是否生效、索引是否移除,都需要分别核查,而且不同搜索引擎的支持情况要分别确认。请求量或抓取量下降也不能单独证明 robots.txt 写对了,它也可能是站点整体流量变化、服务器波动或抓取策略调整造成的。
Disallow: / 与 Disallow: 不同。后者是空值,通常表示不限制,不是屏蔽整站。Disallow 后可能仍留在索引里,只是摘要信息不再更新。Sitemap: 只是提供发现线索,不等于页面会被收录。总结成一句可执行的判断:同一套内容只想留一个入口,就在副本域名写 Disallow: / 并让主站放行;各有独立用途,就全部放行并在页面层做 canonical 或 hreflang。无论选哪种,都要逐个域名核查 robots.txt 的实际返回内容,并记住抓取限制不等于索引移除,站点地图也不保证收录。