同一份页面内容,如果 HTML 主体完全一样、只有响应头不同,robots.txt 的写法不因此改变,但你对“这个页面该不该继续被看到”的判断会变。更准确地说,响应头差异影响的是抓取与索引信号,而不是 robots.txt 的语法。处理旧内容时,先固定一个可核对的对象:同一 URL 在服务器返回的完整响应头,然后按状态码、缓存指令和内容类型分别决定是保留、改造还是退出。
假设你手上有一个旧产品页,正文和另一个新页面几乎相同,但旧页返回 200 OK,新页返回 301 跳转到旧页,或者反过来。此时 robots.txt 无论写 Disallow: /old-page 还是放行,都不能替代对响应头的处理,因为抓取限制和索引移除是两件事。
响应头里最影响判断的通常是三类:状态码、Cache-Control 或 Expires、Content-Type。状态码告诉你这个 URL 当前是否还被当作有效资源;缓存指令影响中间层和抓取端多久之后再来确认;内容类型则影响返回体是否被当作 HTML 处理。三者不一致时,不要只看页面肉眼是否相同。
robots.txt 能表达的是抓取许可和站点地图位置,不能可靠地完成索引移除。若旧页仍返回 200 且允许抓取,仅靠 Disallow 可能让抓取端看不到页面上的 noindex,反而延长旧信号存在的时间。若旧页已经返回 301 或 410,再补一条 Disallow 通常不会让退出更快,还可能让后续核查更困难。
可以按这个顺序写:先确认要退出的 URL 是否还返回有效内容,再决定是否需要在 robots.txt 中放行该路径以便抓取端读到页面级指令,最后才考虑是否用 Disallow 限制无价值目录的抓取。这个顺序的依据是:抓取限制不等于索引移除,站点地图也不保证收录。
下面用一组假设比较,说明不同响应头如何改变下一步动作。数字只用于区分条件,不代表任何真实站点表现。
301 或页面级规范指向保留页;robots.txt 可继续放行,避免抓取端读不到指令。Disallow,否则后续核查跳转链时会多一层遮挡。应检查跳转是否直达最终页,而不是跳到另一个还会再跳的地址。Cache-Control 很长,新页 200 且缓存很短:这组差异不会直接决定索引状态,但会影响你多快能看到变更后的响应。核查时应以源站当前返回为准,并注意中间缓存可能仍返回旧响应头。Content-Type: text/plain,新页返回 text/html:即使正文相同,前者通常不会被当作 HTML 页面处理。若你希望保留它作为页面,应先修正内容类型;若它只是旧接口输出,应决定是否退出抓取范围。这些分支的共同点是:robots.txt 只回答“能不能抓”,响应头回答“这个 URL 现在是什么”。把两者混在一起,最容易出现该退出的没退出、该保留的被误伤。
以你手里的旧页面为对象,按以下步骤做,不要先改 robots.txt:
Location、Content-Type、Cache-Control。Disallow。一个常见的误判是:抓取量或请求量归零,就认为退出成功。请求量下降还可能来自抓取预算调整、内部链接减少、robots.txt 误屏蔽了整站,或抓取端只是暂时降低频率。要区分这些原因,应同时看状态码是否稳定、跳转链是否变短、站点地图是否更新,而不是只看一个数量指标。
如果旧内容里只有一部分仍值得保留,例如旧版说明中的一段参数解释,处理方式不是把整个目录 Disallow,而是把有价值的部分迁到保留页,再让旧 URL 指向保留页。robots.txt 此时应继续允许抓取旧 URL,以便跳转被读到;如果直接屏蔽整个旧目录,抓取端可能看不到跳转,保留页也不会因此自动获得旧页的信号。
反过来,若旧系统输出的是无价值参数页、搜索结果页或重复筛选页,可以用 robots.txt 限制抓取这些路径,但应清楚这不等同于把它们从索引中移除。对于已经产生索引的地址,仍需配合 410、301 或页面级指令来处理。
最后,不同搜索引擎对 robots.txt 和页面级指令的支持与优先级需要分别核查,不能因为一个引擎的表现就推断所有引擎一致。HTTPS 也不改变上述判断,它只说明传输层加密,不代表页面一定安全无漏洞,更不保证排名。把响应头核对清楚,再写 robots.txt,才是让旧内容有序退出的可靠起点。