批量做入口頁时,這種問题很常见:同一個目标頁面,在 A 入口頁里寫成 https://example.com/page,在 B 入口頁里寫成 https://example.com/page/,還有的寫成 https://Example.com/Page。三種寫法看起来差不多,但在服務器和搜尋蜘蛛那里,它們可能是三個不同的地址。到底算不算重复,取决于這些寫法背後是不是同一個资源、有没有做過規范化。
URL 里哪些部分會影响判断
搜尋引擎识別 URL 基本是按字符串来的,但不同部位的處理並不一样:
- 协议和主机名:主机名不区分大小寫,Example.com 和 example.com 會被当成同一台主机;http 和 https 則是不同协议,除非服務器做了跳轉。
- 預設端口:https://example.com:443/page 里的 443 属于預設端口,一般會被归一化,不算新地址。
- 路径:多數情况下区分大小寫,/Page 和 /page 在 Linux 加 Nginx 這類环境里就是两個地址;但部分服務器(如一些 Windows 环境)預設不区分,實际结果要看服務器怎么响應。
- 尾斜杠:/page 和 /page/ 在 HTTP 层面是两個不同的标识,只有服務器返回 301 指向其中一個,才算真正合並。
- 查询參數:問号後面的内容通常完整參與判断,參數顺序不同、多一個無用參數,都可能被视為另一個 URL。
- 井号後面的片段:這部分不會發给服務器,搜尋蜘蛛一般按去掉片段後的地址處理,不會把它当成新頁面去抓。
重复寫法會带来什么實际影响
如果入口頁里同一個目标頁面出現了多種寫法,而服務器又没有做归一化,常见的结果是:
- 抓取预算被切成几份。本来能用在 100 個頁面上的抓取次數,可能有一部分花在了重复版本上。
- 日誌看起来热闹,實际覆盖面没變。分析时如果不去重,很容易高估入口頁的效果。
- 如果這些地址真的各自返回 200,目标頁面那一侧也會出現多個版本,信号被分散。這属于目标站要處理的問题,入口頁這邊管不了。
入口頁這邊能做的几件事
- 统一生成規則:在程序里定好一套寫法,比如全小寫路径、统一加或不加尾斜杠、统一用绝對地址,所有入口頁都按這套規則輸出連結。
- 服務器做 301:把大小寫變体、带尾斜杠和不带尾斜杠的版本,301 指向規范地址。這样搜尋蜘蛛走到哪一個,最後都落到同一處。
- 抽查日誌:定期看抓取日誌里目标 URL 的形態,如果同一個頁面反复以不同寫法出現,說明生成或跳轉环节有漏洞。
- 目标頁声明規范版本:如果目标站自己能控制,让它标注 canonical,入口頁這邊的重复寫法影响會小很多。
什么时候不用太纠结
連結量不大、目标站本身也没做規范化的項目,纠结大小寫和尾斜杠收益有限,先把可訪問性和抓取路径理顺更重要。但当入口頁數量多、每天提交的 URL 上千條时,這些细节會直接体現在抓取覆盖率和日誌质量上,值得在生成环节一次性统一。
判断标准很简單:同一串地址如果服務器會返回 301 指向另一個,說明它們本来就是同一個资源;如果各自都能返回 200,那在搜尋蜘蛛眼里就是多個頁面。