报错是这么冒出来的。SERP 截图里 12 条结果有 9 条标题末尾带省略号,点进去发现原 title 有 45 个字符,模板还额外拼了栏目前缀。

中间走过弯路,把「标题里带了「怎么解决」这类可省的尾词」当成主因,改完现象没变。

把日志和配置对完,能解释这个现象的基本就这几处。中文按像素宽度截断,45 字符在移动端只显示约 30 个。也可能是栏目前缀占了 8 个字符,正文标题被挤掉。

不容易想到的是,不同设备宽度不同,桌面完整移动端被截。

先统计现有标题长度分布

python -c "import io;ts=[l.strip() for l in io.open('titles.txt',encoding='utf-8')];print(sum(1 for t in ts if len(t)>32),len(ts))"

接着列出超过 32 字符的标题

awk 'length($0)>32' titles.txt | head -20

去掉栏目前缀

add_filter('document_title_parts', function($t){ unset($t['tagline']); return $t; });

末了按字节复核混排标题

echo -n 'Nginx 502 上游超时排查' | wc -c

恢复的判定其实很直接。抽 50 条结果里带省略号的降到 3 条以内,移动端与桌面端显示的首段文字一致。

这里还有个坑。30 字符是经验值不是硬线,英文按字符算会低估宽度,混排标题要按字节再核一遍。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189