先看现象。英文站 /en/ 目录下文章的面包屑指向 /category/nginx/,缺少 /en/ 前缀,点一下就从英文页回到中文栏目。
把日志和配置对完,能解释这个现象的基本就这几处。面包屑按分类 slug 拼绝对路径,没有读取当前语言。还有一种是英文分类是中文分类的复制品,slug 相同但前缀不同。
不容易想到的是,语言插件只处理正文链接,模板里手写的路径被跳过。
还有一种情况,hreflang 指向英文页而内链全回中文,信号互相矛盾。
第一件事是抓英文页看面包屑地址
curl -s https://www.example.com/en/nginx-502/ | grep -o 'href="[^"]*category[^"]*"' | head -5
接着按当前语言拼前缀
add_filter('breadcrumb_link', function($u){ return is_lang_en() ? '/en'.$u : $u; });
给旧路径补跳转
rewrite ^/en/category/(.*)$ /en/cat/$1 permanent;
末了统计英文页里的中文内链
curl -s https://www.example.com/en/nginx-502/ | grep -c 'href="/category/'
恢复的判定其实很直接。英文页面包屑全部带 /en/ 前缀,页面里的中文栏目链接数为零,英文页收录量在四周内上升。
补一句。多语言站的内链要整条链路都带语言前缀,只改导航不改面包屑,用户照样被送回默认语言。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
