检查访问状态的核心动作,是确认搜索引擎和真实用户请求你的页面时,服务器返回了什么结果。最直接的起点是看HTTP状态码:200表示正常返回,301或302表示跳转,404表示页面不存在,403表示被拒绝,5xx表示服务器出错。对刚接触这个问题的站长来说,先抓一个具体URL做单点测试,再扩展到全站,比一上来就翻整份日志更容易定位问题。
“访问状态”至少包括三层含义,混在一起查会浪费时间。第一层是服务器对爬虫的响应,看的是状态码和抓取是否成功;第二层是真实用户在浏览器里的体验,看的是页面能否打开、是否被跳转、加载是否完整;第三层是搜索引擎索引层面的状态,看的是页面有没有被收录、收录的是哪个版本。三者可能不一致:服务器返回200,但页面被robots.txt挡住,爬虫实际拿不到内容;用户能打开,但返回的是软404,索引状态照样异常。所以检查前先明确目标,是排查“打不开”,还是排查“能打开但没被正确收录”。
打开浏览器开发者工具的Network面板,刷新目标页面,找到主文档请求,看Status列。这是最快的一步,不需要任何工具授权。也可以用命令行核对,把示例域名替换成你自己的:
curl -I -L https://example.com/page
-I只取响应头,-L跟随跳转。重点看三项:最终状态码、跳转链长度、X-Robots-Tag响应头。如果跳转链超过两三层,或者最终落到首页,说明原URL的访问路径已经偏离预期。适用条件是你能直接访问服务器或本地有curl环境;如果站点在CDN后面,curl看到的是CDN返回的结果,和源站可能不同,这时要分别测源站和CDN节点。
单点正常不代表全站正常。批量检查可以借助站点地图:把sitemap里的URL逐条请求,记录状态码,筛出非200的条目。这一步可以用脚本完成,也可以借助现成的爬取工具。判断标准很简单:
然后把结果和服务器访问日志对照。日志里同一URL如果既有200又有404,说明请求参数或大小写不一致,比如带斜杠和不带斜杠被当成两个地址。这一步能区分“可能原因”和“已经定位的原因”:状态码告诉你现象,日志里的请求路径、UA、时间戳才能确认是爬虫、用户还是监控程序触发的。
发现异常后不要全部一起改。按代价和影响排序:先修影响抓取和索引的,比如整站返回5xx、robots.txt误封、重要栏目404;再修影响体验的,比如跳转链过长、移动端返回桌面版;最后处理只影响个别长尾页面的问题。每次改动只动一个变量,改完后隔一段时间再对比。比较时要注意季节性需求变化和数据采集差异,比如促销期流量本身会波动,不能把波动直接归因于这次修改。判断是否生效,看的是同类URL的状态码分布是否收敛,而不是单看某一天的总量。
挑一个你最近确认有访问异常的URL,按“开发者工具看状态码 → curl核对跳转链 → 对照当天日志确认触发来源”的顺序走一遍,把最终状态码和跳转目标记下来。如果这个URL正常,再把它所在目录的URL批量跑一遍,确认问题是个例还是成片出现。