做死链排查或者 URL 盘点的人都遇到过这种事:明明去过重,清单里还是有一堆”看着一样”的地址;换个工具再跑一遍,数字又变了。问题多半不在去重那一步,而在前面的写法没统一——同一个页面能写出七八种 URL,机器当然把它们当成不同页面。
同一个页面能写出多少种地址
- 协议不同:http:// 和 https://;
- 主机不同:带 www. 和不带 www.;
- 末尾斜杠:/about 和 /about/;
- 路径大小写:/News/ 和 /news/;
- 带跟踪参数:?utm_source=xxx、?spm=xxx;
- 带锚点:#comment、#top;
- 默认文件:/index.php、/index.html;
- 默认端口::80、:443。
这些地址在浏览器里打开都是同一个页面,但作为字符串它们完全不同。十万条清单里,这类变体占两三成很常见,所以去重前不归一化,等于白做。
三条归一化规则
| 层级 | 做法 | 注意 |
|---|---|---|
| 协议 | 统一成站点实际使用的那个,多数现在都是 https | 先确认站点没做 http 跳转的例外页 |
| 主机 | 全部小写,去掉末尾的点,www. 与裸域名二选一,去掉 :80 / :443 | 以站点 canonical 写的那个为准 |
| 路径 | 去末尾斜杠或统一加斜杠(二选一即可),合并重复斜杠,去掉 # 之后的部分 | 部分 CMS 路径区分大小写,改小写前先抽样验证 |
规则本身不复杂,难点是要统一。团队里两个人按两套规则整理,合表时又是一场灾难,所以规则最好写成一页文档,谁整理都一样。
参数别一刀切
utm_source、utm_medium、gclid、spm、from、share 这类跟踪参数可以整段删;id、page、p、cat、s 这些是内容定位参数,删了就是另一个页面。稳妥的做法是先把所有参数名统计出来,按出现频次排序,人工过一遍黑白名单,再批量执行。这一步花二十分钟,能避免误删几万条有效链接。
顺序错了等于白干
- 归一化:协议、主机、路径按上面的规则统一;
- 去重:按完全一致的字符串去重,保留第一条;
- 抽样验证:随机抽 100 条,看原来”看起来一样”的几组是否已经合并;
- 再分层:按路径深度、栏目、参数有无分成几档,方便后面按优先级处理。
先分层再去重是个常见错误:分层时按原始字符串分的组,去重后组内又空了一批,得重来。
最枯燥的两步交给工具
归一化和去重都是规则固定、量又大的活,手工搓 Excel 公式很容易出错,尤其是路径大小写和参数这两块。文本去重工具能直接吃百万级清单,百万文本去重工具就是按这个场景做的;网址批量转域名可以先把主机名单独抽出来校对,两头配合基本不用手写公式。有个小经验:先转域名核对主机层,再回原表做路径归一化,主机层错了后面全错。
行动建议
下次整理 URL 清单,先花十分钟抽样:随机抽 100 条,看有多少种写法。如果变体超过两成,直接先做归一化,别急着去重。规则定下来之后固化成脚本或者固定流程,同样的活下次几分钟就能跑完,比每次临场发挥靠谱。相关功能在软件工具一览里能对照看。
相关推荐
关键词网址采集器:始于2007年的原创采集软件,支持百度、搜狗、360、神马、谷歌、必应。微信/QQ:13327215,飞机:gjcwzcjq
