如何通过rel=canonical和robots.txt控制过滤页面的索引?

解读

国内电商、房产、招聘类站点普遍存在“多条件筛选/过滤”场景,同一组商品或职位因颜色、价格区间、地铁口等参数组合生成海量相似URL。这些URL被搜索引擎抓取后会造成:1.重复内容稀释主页面权重;2.抓取配额浪费;3.排名信号分散;4.甚至被算法判定为“低质聚合”遭降权。因此,面试中面试官想确认两点:①候选人能否准确区分“不抓取”与“不索引”两个维度;②能否用最低成本、对线上业务无伤害的方式,把“过滤页”隔离在索引库之外,同时让主频道页拿到全部权重。

知识点

  1. rel=canonical:页面级指令,告诉搜索引擎“当前URL只是副本,请把权重算到指定规范地址”,但蜘蛛必须先抓取当前页才能看到该标签;canonical允许传递权重,不浪费抓取配额。
  2. robots.txt:站点级协议,放在根目录,用于“禁止抓取”或“允许抓取”,但本身不能“禁止索引”;若页面已被索引,后来加Disallow不会自动删除已收录结果,需配合noindex或站长平台删除工具。
  3. 过滤页特征:参数通常带“?filter=”、“&sort=”、“?price=”、“?district=”等,且多数无唯一落地内容价值。
  4. 国内主流蜘蛛:百度(Baiduspider)、搜狗(Sogou web spider)、360(360Spider)均同时支持以上两条协议,但百度对canonical的响应速度略慢,需要3–7个抓取周期才能稳定归权。
  5. 风险点:robots.txt一旦Disallow,蜘蛛永远不会看到该URL任何标签,后续即使加了noindex也无效;canonical若指向404或死循环,会导致主页面降权。

答案

第一步,先判断过滤页是否“必须被用户看到但无需参与排名”。若答案为“是”,采用“双保险”策略:
A. 对所有带过滤参数的URL统一返回200状态码,并在<head>里加<link rel="canonical" href="主频道页唯一规范地址"/>;主频道页自身canonical指向自己,避免循环。
B. 在robots.txt里仅Disallow蜘蛛抓取“?filter=”等高频参数组合,写法示例:
Disallow: /?filter=
Disallow: /
&filter=
Disallow: /?price=
Disallow: /
&sort=
这样蜘蛛不会浪费配额去抓取过滤页,但已收录的过滤地址会在下一次更新时被百度识别为“被robots屏蔽”,结果标记为“仅收录,无摘要”,不再更新快照;同时因canonical存在,历史权重会被归并到主频道页。

第二步,若发现部分过滤页(如“品牌+价格”组合)有搜索需求且内容唯一,则单独建立静态目录或伪静态URL,并移除该路径的robots屏蔽,改用“canonical自指+优质内容”方式,使其独立参与排名,其余继续按第一步处理。

第三步,上线后一周,通过百度搜索资源平台“Robots检测”与“索引量统计”观察抓取下降幅度与主频道页索引量上升曲线,确保配额释放;同时用site:域名 inurl:?filter 检查旧URL是否已变为“仅收录无摘要”,确认策略生效。

拓展思考

  1. 如果公司技术资源不足,无法批量加canonical,可先做robots.txt屏蔽抓取,等开发排期到位后再补canonical,但期间主频道页权重增长会滞后,需用外链与站内sitemap加速。
  2. 百度2021年上线“聚合页算法”后,对“空结果过滤页”打击力度加大,因此屏蔽前务必保证主频道页内容≥80%填充,否则即使canonical也可能被判“无价值聚合”。
  3. 对小程序+H5双端站点,需在小程序端同步设置web化URL的canonical,否则百度小程序流量与H5权重无法合并,会出现“H5收录下降、小程序排名不涨”的诡异现象。
  4. 若过滤页已被大量外链引用,直接robots会导致外链权重丢失,此时应放弃robots,改用“canonical+200返回+无index,follow”组合,把外链权重收拢到主频道页,同时用百度站长平台“外链拒绝”功能清理低质锚文本,防止被连带惩罚。