清理 sitemap 时发现 400 多条地址返回 200,打开后正文只有一句「暂无内容」,这些页面却一直在被蜘蛛抓取。
一开始怀疑是「分页超出范围时返回空列表而不是 404」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。空分类和空标签没有做 404 或 noindex 处理。少数情况下是搜索结果为空时仍然渲染页面模板并返回 200。
不容易想到的是,商品下架后详情页保留了壳,没有状态判断。
筛出正文过短的页面
for u in $(head -500 urls.txt); do n=$(curl -s $u | sed 's/<[^>]*>//g' | wc -m); [ $n -lt 200 ] && echo $u; done
空页面统一返回 404
if (empty($items)) { header('HTTP/1.1 404 Not Found'); }
超范围分页直接 404 而不是渲染空列表
curl -sI https://www.example.com/list/page/999/ | head -1
白天有业务在跑,能验证的部分都压到了晚上做。
恢复的判定其实很直接。空页面改判 404 后,这批地址在两周内退出索引,抓取量重新分配到有内容的页面。
这里还有个坑。返回 200 的空壳页对搜索引擎是最差的选择,既占预算又拉低整站的质量判断。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
