事情本身不复杂,线索都在日志里。近一个月蜘蛛抓取量从每天两万涨到五万,收录数一条没增加,把日志里的 URL 去重后发现九成是 ?color=red&size=m 这类筛选组合。
第一反应是「分页与筛选叠加,地址数量按乘法增长」,验证下来不成立。
排查方向其实有限,先把可能性排一排。筛选链接在列表页全部输出,蜘蛛顺着爬出成千上万组合。还有一种是canonical 在筛选页上指向自身,等于承认每个组合都是独立页。
另外,站内搜索建议接口返回的链接被渲染进了页面。
第一件事是按参数个数统计抓取分布
awk -F'?' 'NF>1{split($2,a,"&"); print length(a)}' access.log | sort | uniq -c
再往下抽样看筛选页的 canonical
curl -s 'https://www.example.com/list/?color=red' | grep -o '<link rel="canonical"[^>]*>'
随后把筛选页统一指向无参数列表页
add_filter('get_canonical_url', fn($u) => strtok($u, '?'));
剩下的就是在 robots 里封掉多参数组合
Disallow: /*?*&*
怎么算真的好了,看的是同一批现象。筛选页抓取占比从九成降到两成,抓取预算回流到文章页,新文章的平均收录时间缩短到三天。
这里还有个坑。参数页要么收口要么规范,放任它自己 canonical 自己,等于让蜘蛛把预算全花在重复内容上。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
