先看现象。搜索词拼错或商品下架时,站内搜索返回一个「没有找到相关内容」的模板页,状态码是 200,正文只有一句话,百度一周内收了 800 多条这种空页。

这类报错背后常见的原因有几处,逐个排除就行。无结果分支沿用了正常模板,没有单独返回 404。还有一种是空结果页标题和描述与正常页一致,被判成重复。

还有一种情况,推荐位里塞了十几个热门链接,页面看着不算空。

上来先让无结果分支返回 404

if (empty($rows)) { status_header(404); }

随后确认返回码与正文

curl -s -o /dev/null -w '%{http_code}\n' 'https://www.example.com/search?q=zzzz'

无结果页不再输出推荐链接

curl -s 'https://www.example.com/search?q=zzzz' | grep -c 'hot-link'

末了清理已收录的空结果页

site:www.example.com/search

那几天正好在做别的变更,先把时间线对齐才敢动手。

改完先别撤,确认这几项。改完后新产生的无结果页全部返回 404,两周内这批地址在索引里消失,搜索页抓取量下降六成。

无结果页返回 404 对用户没有影响,但要在页面上保留搜索框,别让访客走进死胡同。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189