很多收錄問题不是内容問题,而是地址本身有多個寫法。同一個頁面,浏览器能打開、蜘蛛也能打開,但蜘蛛看到的 URL 和你以為的那個可能不是同一個。中文、空格、特殊符号、编碼方式,任何一個环节不统一,都會让一個頁面在抓取和索引里變成好几個候選。
蜘蛛拿到的 URL,和你複製到表格里的可能不一样
地址栏里顯示為中文的部分,在實际請求中通常是百分号编碼。比如路径里的「蜘蛛」,在 UTF-8 下會被寫成 %E8%9C%98%E8%9B%9B。空格也比較麻烦:有的地方编碼成 %20,有的地方寫成加号,還有的浏览器直接留一個空格,服務器收到的是三種不同的請求。
服務器對大小寫的態度也不一样。Linux 环境下,/Page-A 和 /page-a 是两個不同的资源;如果站点又做了自動解碼或重寫,實际生效的寫法可能更多。
常见的「一頁多址」来源
- 中文路径有的用原文,有的用编碼,两種寫法都被内鏈引用過;
- 空格出現 %20、加号、原始空格三種形態;
- 參數顺序不同,或夹带了跟踪、排序、會话相關的參數;
- 结尾带不带斜杠混用;
- 大小寫不统一,尤其是自動生成或人工手寫的内鏈;
- URL 里下划线和连字符混用;
- 中文域名同时存在 Unicode 與 punycode 两種形式。
這些地址往往都能返回正常頁面,蜘蛛不會自動帮你合並,它更像是按遇到的每一個地址分別抓取、分別判断。结果是抓取量被拆散,索引里可能留下多條相似记錄。
把寫法收口到一處
比較稳妥的做法是先定一個規范寫法,再让所有出口都指向它:内鏈、站点地图、canonical、分享按钮、對外投放的連結,都用同一套编碼規則。中文路径如果没必要保留,換成拼音或英文词组,後續维護會省很多事。
- 统一使用百分号编碼形式出現在頁面上,不要一半原文一半编碼;
- 在服務器层面對非規范寫法做 301 跳轉,而不是只靠 canonical 兜底;
- 確認服務器、CDN、應用框架是否會對 URL 做二次解碼或重寫;
- 检查站点地图里的地址與頁面 canonical 是否逐字一致。
哪些符号最好別出現在 URL 里
井号(#)之後的内容不會發送给服務器,它只對浏览器有意义,所以不要把關键内容放在片段里指望蜘蛛讀到。與号、等号、百分号這些符号本身有语义,堆叠過多既难讀,也容易出現解析差异。跟踪參數、會话 ID、篩選排序參數尽量只用于頁面交互,不要寫進内鏈和站点地图。
一個頁面只留一個規范地址,其余寫法都用跳轉收口,比事後在索引里清理要轻松得多。
自查时可以看這几個地方
- 在服務器日誌里检索带 % 的請求,統計哪些编碼地址被蜘蛛訪問過,再和真實頁面列表對照;
- 用索引狀態工具或站内检索,確認同一内容是否對應多個 URL;
- 抽查首頁、栏目頁、内容頁的内鏈,看编碼寫法是否统一;
- 检查站点地图與 canonical 的寫法是否完全一致,包括大小寫與结尾斜杠;
- 如果使用中文域名,確認對外引用的是同一種形式。
URL 規范不是一次性的工作,站点改版、栏目調整、运营添加連結时都可能重新引入新的寫法。把它当成常規检查項,比等收錄對不上再回头排查要省力。