搜尋抓取

同一個頁面几種寫法:URL 規范形態如何影响蜘蛛的發現與去重

同一個頁面,只要内外連結寫法不同,對搜尋蜘蛛来说就可能是几個獨立地址,發現、抓取和去重都會跟着變化。本文從大小寫、结尾斜杠、預設文档、主机名、參數顺序等常见差异入手,說明怎么定下唯一形態,並让内鏈、Sitemap、canonical 與跳轉统一指向它,最後用日誌核對蜘蛛實际走了哪條路。

搜尋抓取

同一個頁面几種寫法:URL 規范形態如何影响蜘蛛的發現與去重

搜尋蜘蛛發現一個新地址,起点不是“頁面”,而是“字符串”。同样一個頁面,只要内外連結里寫成了不同的形式,對蜘蛛来说就可能是两個甚至三個獨立地址。發現之後要不要抓、抓几次、算不算重复,都會跟着變。

為什么寫法差异會被当成不同地址

蜘蛛没有“看懂”頁面的能力,它先记錄 URL 字面。URL 里的大小寫、斜杠、參數顺序、编碼方式只要有一處不同,队列里就是一條新的记錄。站内連結不统一时,最容易出現的現象是:明明只有一篇文章,却在抓取資料里看到多個地址各抓了一次,權重也被分散。

這不只是重复抓取的問题,還會牵扯到抓取预算。蜘蛛在同一個站点的額度是有限的,把額度花在“同一頁面的多種寫法”上,新頁面的發現自然就慢了。

最常见的几類寫法差异

  • 大小寫:/About 與 /about 在多數服務器上是两個地址,頁面上連結混用就會分裂。
  • 结尾斜杠:/news 與 /news/ 是否同一頁,取决于服務器規則,蜘蛛不替你判断。
  • 預設文档:/about 與 /about/index.html 同时可訪問时,两條都會被记錄。
  • 主机名:带 www 與不带 www,是彻底不同的域名級地址。
  • 參數顺序:?a=1&b=2 與 ?b=2&a=1 内容一样,字面不同。
  • 编碼方式:中文、空格、特殊符号的百分号编碼寫法不一致,也會产生不同字面。
  • 追踪參數:從外部渠道带進来的 utm 之類參數,會把同一頁拆成很多份。

把規范形態定下来,再谈發現

做法不复杂:先确定唯一形態,再让所有出口统一指向它。

  1. 站内連結、導航、面包屑、分頁、相關推荐,全部使用同一寫法。
  2. Sitemap 只提交規范形態,不要把带參數或大小寫混用的版本一起丢進去。
  3. 頁面上寫上 canonical,指向規范地址;canonical 與内鏈寫法保持一致,不要互相打架。
  4. 其余寫法用一條跳轉指向規范地址,跳轉层級控制在一跳,別串成長鏈。
規范化的目的不是“让蜘蛛少抓”,而是让它把抓取花在该花的地方。同一份内容被抓一次,就够用了。

用日誌和資料核對

規則定完要驗證。翻一遍服務器日誌,看蜘蛛實际請求的路径里有没有大寫版本、index.html 版本、带追踪參數的版本。再看抓取統計里同一個頁面對應几條地址。如果發現多條,回到内鏈和 Sitemap 里找源头。

顺带留意服務器稳定性:如果带斜杠的地址返回 301,而原地址偶尔 5xx,蜘蛛對這條路径的判断會變得犹豫,發現节奏也會受影响。規范化和服務器反馈要一起看。

容易被忽略的两個细节

内鏈里的相對路径

相對連結本身没問题,但基准地址寫错时,解析出的绝對地址可能多出目錄层級。上线前抽查几條,確認解析结果就是規范形態。

接口與前端路由生成的地址

由 JS 拼出来的連結,寫法往往不统一,還容易带上排序參數。能收敛就收敛;收敛不了,至少保證主動提交和 Sitemap 里是干净的。

URL 規范形態属于基础工程,不會带来立竿见影的效果,但它决定了蜘蛛看到的是几個地址。把這一层理顺,後面谈抓取路径、内鏈层級、Sitemap 申报才有共同的前提。