这类问题我又碰上了一次。产品页的描述里有「A&B」这样的型号,输出到 meta description 时被转义成 &,搜索结果里显示成「A&B」。
把日志和配置对完,能解释这个现象的基本就这几处。描述字段在入库时已经做过一次 HTML 转义;模板输出时又调用了一次转义函数;编辑在后台直接粘贴了带实体的文本。
第一件事是检查页面里 description 的实际内容
curl -s https://www.example.com/p/1024 | grep -o 'name="description"[^>]*'
接着输出前做一次反转义
html_entity_decode($desc, ENT_QUOTES, 'UTF-8');
修正入库时的重复转义
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, '&', '&') WHERE meta_key = '_yoast_wpseo_metadesc';
复检三篇带特殊字符的页面
curl -s https://www.example.com/p/1024 | grep -c '&'
同一份数据我导出了两份,一份留底,一份拿来试。
这类问题以前遇到过,但这次的触发条件和上次不一样。
怎么算真的好了,看的是同一批现象。修正后摘要里正常显示 A&B,搜索结果不再出现转义字符,相关页面的点击率回到正常水平。
这里还有个坑。转义函数用两次是这类问题的常见来源,写入和输出只留一处处理就够。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
