同一個頁面,canonical 寫的是不带參數的版本,站内連結用的是带參數的版本,sitemap 里又是第三種寫法。這时候讨论“為什么還不收錄”,其實是在三個互相矛盾的信号里找答案,很难有结论。
為什么口径不一致會拖慢收錄
搜尋引擎對每個 URL 的處理是分開的。它先要判断這個 URL 代表什么内容,再判断它和其他 URL 是不是同一個東西,最後才决定把哪一個放進索引。這几個判断都依赖網站自己给出的信号。
如果信号互相打架,抓取工具就需要額外的判断時間,或者干脆把几個 URL 都当成獨立頁面各抓一遍。结果是抓取配額被分散,真正想被收錄的那個版本反而排队更久。
需要說明的是,這不會直接導致不收錄,只是让流程變得更慢、更不确定。不要把它当成萬能原因,先確認是不是真的存在冲突。
先對齐這三處信号
1. canonical 标簽
canonical 表達的是“我認為這個才是主版本”。它應当是绝對 URL,指向的頁面要能正常訪問、返回 200、内容确實和其他版本一致。指向一個 404 或者重定向目标,等于没寫。
2. 站内連結
内鏈是搜尋蜘蛛發現 URL 的主要入口之一。如果列表頁、面包屑、相關推荐里的連結寫法各不相同,蜘蛛會顺着每一種寫法各走一遍。
- 大小寫、结尾斜杠、預設端口要统一
- 跟踪參數、排序參數尽量在内鏈里去掉
- 同一個目标頁,別在不同入口混用 http 與 https
3. sitemap 與其他提交入口
sitemap 應该只放你希望被索引的那套 URL。如果里面同时躺着带參數、带大小寫變体的地址,等于主動告诉搜尋引擎“這些也算一份”。
一個可执行的自查顺序
- 挑一個内容頁,從抓取日誌里找出它實际被抓取過的所有 URL 寫法。
- 對每一種寫法,记錄它目前的返回狀態碼和 canonical 目标。
- 检查 canonical 指向的那一個 URL,是否在所有入口里都是同一串字符。
- 检查内鏈和 sitemap 里有没有混入舊域名、舊路径或多余的參數。
- 把不一致的地方统一到同一個 URL 上,然後等下一轮抓取。
- 观察一段時間,看被抓取的 URL 種類是否减少、主版本是否被更频繁地訪問。
几個容易被忽略的点
- 重定向也算一種信号。 如果 A 跳到 B,而 B 的 canonical 又指向 A,會形成来回指認,蜘蛛很难判断谁是主版本。
- canonical 不是命令。 它只是建议,最终選擇權在搜尋引擎。其他信号越一致,建议越容易被采纳。
- 別把全站 canonical 都指向首頁。 這會让其他頁面失去被索引的机會。
- 改動後不會立刻生效。 已索引的版本需要重新抓取和重新處理,通常要按周来观察。
什么时候不必强求统一
如果两個 URL 表達的是真正不同的内容——比如不同的篩選结果、不同的語言版本——那它們本来就该是各自的頁面,用 canonical 强行合並反而會丢掉有效内容。统一口径针對的是“同一個東西被寫成了好几個地址”,不是把所有相似頁面都並成一個。
總结下来:收錄進展慢,很多时候不是内容不行,而是你對搜尋引擎说了几套话。先把 canonical、内鏈、sitemap 這三處的 URL 寫法统一,再看抓取和索引狀態的變化,判断會清楚很多。