robot txt本身不能直接阻止重复页面被建设或生成,它只能告诉爬虫哪些路径可以抓、哪些不可以抓。要避免重复建设页面,核心是把“内容规划”“URL规范”“抓取规则”分开处理:先在源头决定一个主题只保留一个主页面,再用canonical、重定向和内部链接指向它,最后才考虑在robot txt里屏蔽确实不需要被抓取的路径。把robot txt当作去重工具,往往会出现“页面还在、只是没被抓”的假象。
重复建设通常有三种来源,处理方式不同:
判断依据是:用户是否需要这个页面独立存在。如果两个页面回答同一个问题、面向同一批用户,就应合并为一个主页面;如果筛选结果确实提供不同信息,可以保留,但要处理好标题、描述和canonical。
?sort=、?page=、?ref=等参数。若参数只改变排列、不改变核心信息,应通过canonical指向无参数版本,或在robot txt中屏蔽无价值参数路径。<link rel="canonical">。若每个重复页都指向自己,说明没有做统一;若都指向同一个主页面,说明已声明首选版本。注意canonical是建议信号,不是强制指令。/robots.txt,看是否用Disallow屏蔽了某些路径。若屏蔽的是仍有用户价值的页面,用户和爬虫都难以通过该路径获取内容;若屏蔽的是筛选参数或后台路径,则属于合理范围。屏蔽不等于删除,页面仍可能存在。site:查询或查看站点地图提交情况,确认主页面是否被收录、重复页是否仍出现。若重复页仍被索引,说明仅靠robot txt不够,需要配合重定向或canonical。方案一:用robot txt屏蔽重复路径。适用条件是这些路径对用户没有独立价值,且你不需要它们参与搜索竞争,例如站内搜索结果页、会话ID页、排序参数页。判断结果是:爬虫减少抓取这些路径,但页面本身仍存在,外部链接仍可能指向它们,用户仍可能访问。
方案二:用301重定向或canonical合并。适用条件是重复页面有用户价值或已有外部链接,你希望把权重和用户集中到一个主页面。判断结果是:用户访问旧URL时跳到主页面,搜索引擎也更可能把主页面作为首选。若旧URL已有排名或外链,优先用301;若只是同一内容的不同参数版本,canonical更轻量。
选择顺序建议是:能合并内容就合并;不能合并但需要统一信号就用canonical;确实不需要被抓取再考虑robot txt屏蔽。不要用robot txt去“解决”本应合并的重复页面,因为那只是让爬虫看不见,重复建设的问题仍然存在。
robot txt是纯文本文件,放在站点根目录,规则按用户代理分组。常见写法包括:
User-agent: * 表示对一般爬虫生效。Disallow: /search 表示不允许抓取search路径下的内容。Allow: /search/about 可用于在整体屏蔽中放行某个具体路径,但不同爬虫对Allow的支持程度不完全一致。需要明确:robot txt控制的是抓取,不是索引。被屏蔽的URL如果被外部链接指向,仍可能出现在搜索结果中,只是没有摘要。因此,避免重复建设的重点仍是内容层面的合并与URL规范,robot txt只是辅助手段。修改robot txt后,应观察抓取日志或搜索控制台中的抓取统计,确认规则是否按预期生效。
先选一个你怀疑重复的主题,列出它对应的所有URL,逐项对照上面的六条清单。把有用户价值、有外链的URL保留为主页面,其余做301或canonical;只有确认无用户价值且无需被抓取的路径,才写进robot txt的Disallow。处理完成后,用站点地图和内部链接再次确认主页面是唯一入口。