搜尋蜘蛛發現一個新地址,起点不是“頁面”,而是“字符串”。同样一個頁面,只要内外連結里寫成了不同的形式,對蜘蛛来说就可能是两個甚至三個獨立地址。發現之後要不要抓、抓几次、算不算重复,都會跟着變。
為什么寫法差异會被当成不同地址
蜘蛛没有“看懂”頁面的能力,它先记錄 URL 字面。URL 里的大小寫、斜杠、參數顺序、编碼方式只要有一處不同,队列里就是一條新的记錄。站内連結不统一时,最容易出現的現象是:明明只有一篇文章,却在抓取資料里看到多個地址各抓了一次,權重也被分散。
這不只是重复抓取的問题,還會牵扯到抓取预算。蜘蛛在同一個站点的額度是有限的,把額度花在“同一頁面的多種寫法”上,新頁面的發現自然就慢了。
最常见的几類寫法差异
- 大小寫:/About 與 /about 在多數服務器上是两個地址,頁面上連結混用就會分裂。
- 结尾斜杠:/news 與 /news/ 是否同一頁,取决于服務器規則,蜘蛛不替你判断。
- 預設文档:/about 與 /about/index.html 同时可訪問时,两條都會被记錄。
- 主机名:带 www 與不带 www,是彻底不同的域名級地址。
- 參數顺序:?a=1&b=2 與 ?b=2&a=1 内容一样,字面不同。
- 编碼方式:中文、空格、特殊符号的百分号编碼寫法不一致,也會产生不同字面。
- 追踪參數:從外部渠道带進来的 utm 之類參數,會把同一頁拆成很多份。
把規范形態定下来,再谈發現
做法不复杂:先确定唯一形態,再让所有出口统一指向它。
- 站内連結、導航、面包屑、分頁、相關推荐,全部使用同一寫法。
- Sitemap 只提交規范形態,不要把带參數或大小寫混用的版本一起丢進去。
- 頁面上寫上 canonical,指向規范地址;canonical 與内鏈寫法保持一致,不要互相打架。
- 其余寫法用一條跳轉指向規范地址,跳轉层級控制在一跳,別串成長鏈。
規范化的目的不是“让蜘蛛少抓”,而是让它把抓取花在该花的地方。同一份内容被抓一次,就够用了。
用日誌和資料核對
規則定完要驗證。翻一遍服務器日誌,看蜘蛛實际請求的路径里有没有大寫版本、index.html 版本、带追踪參數的版本。再看抓取統計里同一個頁面對應几條地址。如果發現多條,回到内鏈和 Sitemap 里找源头。
顺带留意服務器稳定性:如果带斜杠的地址返回 301,而原地址偶尔 5xx,蜘蛛對這條路径的判断會變得犹豫,發現节奏也會受影响。規范化和服務器反馈要一起看。
容易被忽略的两個细节
内鏈里的相對路径
相對連結本身没問题,但基准地址寫错时,解析出的绝對地址可能多出目錄层級。上线前抽查几條,確認解析结果就是規范形態。
接口與前端路由生成的地址
由 JS 拼出来的連結,寫法往往不统一,還容易带上排序參數。能收敛就收敛;收敛不了,至少保證主動提交和 Sitemap 里是干净的。
URL 規范形態属于基础工程,不會带来立竿见影的效果,但它决定了蜘蛛看到的是几個地址。把這一层理顺,後面谈抓取路径、内鏈层級、Sitemap 申报才有共同的前提。