这类问题我又碰上了一次。日志按路径聚合后,蜘蛛的请求有 40% 打在 /search 结果页,正文页只占 11%,新文章平均要等五天才被抓。
第一反应是「搜索参数组合接近无限,每个查询串都能生成新地址」,验证下来不成立。
排查方向其实有限,先把可能性排一排。搜索结果页有站内链接入口,蜘蛛顺着爬出去停不下来;结果页返回 200 且没有 noindex,被当成正常内容页;站内搜索页之间互相推荐,形成大量循环链接。
上来先按路径统计抓取占比
awk '{print $7}' access.log | cut -d'?' -f1 | sort | uniq -c | sort -rn | head -10
给搜索页加 noindex 并收紧参数
add_header X-Robots-Tag 'noindex' always;
等前面都确认过,再在 robots 里挡住带 q 参数的地址
User-agent: *
Disallow: /search?*q=
恢复的判定其实很直接。清理后搜索页的抓取占比从 40% 降到 2%,正文页分到的抓取量翻了一倍,新文章的抓取间隔缩短到两天。
站内搜索页是最常见的预算黑洞,入口在导航里又自带参数,不主动收口它会一直被当成内容抓下去。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
