很多站点在运营中會發現,同一個頁面被不同来源連結到,地址寫法却不一样:有的带大寫字母,有的没有;有的末尾有斜杠,有的没有。對用戶来说点開都能到同一頁,但對搜尋蜘蛛来说,這可能是两個甚至多個 URL。URL 發現阶段多出重复地址,抓取预算就會被分散,内鏈權重也不容易集中。
蜘蛛先看到的是字符串,不是頁面
搜尋蜘蛛在决定是否抓取时,最先拿到的是 URL 字符串。它不會自動知道 /About 和 /about 指向同一份内容,除非服務器或頁面上的信号告诉它。連結出現在站内时,寫法是否统一,會直接影响蜘蛛记錄了多少個地址。
常见的情况包括:
- 導航里用 /about,文章正文里却寫成 /About;
- 有的連結带尾斜杠,有的不带;
- 大小寫混用,例如 /Product/123 和 /product/123;
- 參數顺序不同,虽然内容一样,但 URL 不同。
蜘蛛發現這些地址後,會分別放入抓取队列。如果服務器没有做归一,它們就可能被当作獨立 URL 抓取和索引。
服務器配置决定谁跟谁合並
大小寫和尾斜杠是否算同一個地址,很大程度上取决于服務器和框架。在 Linux 环境下,路径通常区分大小寫;部分服務器或 CDN 會把路径轉為小寫,或者把带尾斜杠的請求重定向到不带尾斜杠的版本。關键不是哪種一定對,而是全站是否一致。
如果服務器對 /about 和 /about/ 都返回 200,蜘蛛就會看到两個可訪問地址。更稳妥的做法是:選一個作為規范地址,另一個用 301 永久重定向過去。這样蜘蛛走到第二個地址时,會被明确告知最终地址是哪一個。
重定向不是越多越好,但一個清晰的 301 能减少蜘蛛在重复地址之間来回试探。
内鏈和 Sitemap 要指向同一個版本
即使服務器做了重定向,如果站内連結寫法長期混乱,蜘蛛仍然會不断發現舊寫法。运营中可以從几個位置统一:
- 導航和面包屑:全站统一大小寫和尾斜杠規則,不要同一栏目下出現两種寫法。
- 正文内鏈:編輯複製連結时注意是否從浏览器地址栏带入了另一種版本。
- Sitemap:只放規范地址,不要同时放 /about 和 /about/。
- canonical 标簽:如果頁面确實有多個可訪問地址,用 canonical 指向首選版本。
這些信号不需要复杂配置,但需要在發布流程中固定下来。否則蜘蛛每次来訪都可能發現新的重复地址。
怎么检查重复地址有没有被大量發現
一個简單的检查方式是看抓取日誌和站点搜尋。日誌里如果同一路径以不同大小寫或尾斜杠形式反复出現,說明蜘蛛确實在分別抓取。也可以站内搜尋 site:你的域名 加上不同寫法,观察返回结果是否合並。注意,搜尋结果的顯示方式會變化,不能只凭一次查询下结论。
更直接的办法是随机抽取内鏈,检查它們指向的 URL 是否和導航、Sitemap 一致。發現不一致时,優先改連結,而不是只加重定向。重定向是兜底,連結统一才是减少重复發現的根本。
小结
大小寫和尾斜杠看起来是细节,但在 URL 發現和抓取路径上,它們會决定蜘蛛看到的是一個地址還是一组地址。選擇一種規范寫法,让服務器重定向、内鏈、Sitemap 和 canonical 都指向它,重复地址就會少很多。蜘蛛的時間有限,把抓取留给真正需要更新的頁面,比让它反复處理同一内容更划算。