这类问题我又碰上了一次。移动站 m.example.com 和响应式主域同时在线,必应里 site:m.example.com 有 4.1 万条,site:www.example.com 只剩首页和两个栏目。百度侧主域内页收录正常,两边的适配声明还写在同一个 head 里。
第一反应是「m 站返回的正文比主域少 只保留标题和列表」,验证下来不成立。
把日志和配置对完,能解释这个现象的基本就这几处。m 站页面没有指向主域的 canonical 必应把两份当成独立站点;主域的 alternate 和 hreflang 互指 m 站 信号自相矛盾;sitemap 只提交了 m 站地址 主域那份半年没更新。
先查 m 站详情页的 canonical
curl -s https://m.example.com/p/1 | grep -o '<link rel="canonical"[^>]*>'
然后查主域页面对 m 站的 alternate 声明
curl -s https://www.example.com/p/1 | grep -o '<link rel="alternate"[^>]*>'
再往下把 m 站 canonical 统一改成主域地址
sed -i 's#https://m.example.com#https://www.example.com#g' mobile_header.php
等前面都确认过,再重新提交主域 sitemap 并观察
curl -s https://www.example.com/sitemap_index.xml | head -5
怎么算真的好了,看的是同一批现象。四周后 site:m 的条数下降到千级,主域内页逐步出现在必应结果里,说明合并方向对了。
容易忽略的是,m 站和响应式并存时,canonical 必须全部指向主域,只靠 hreflang 表达不了重复关系。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
