你这套"结构化数据 + HTML 信号 + 正文实体"三件套的思路是对的,我把被你截断的清单补齐,再说几个实测容易翻车的地方。

HTML 那层除了 <html lang> 和 hreflang,第三件是老牌的 geo meta:<meta name="geo.region" content="CN-BJ">(注意这里是 ISO 3166-2,省市用连字符)、geo.placename 写"北京市朝阳区"、geo.position 用"纬度;经度"分号分隔,还可以加 ICBM。这套 Bing 系和部分国内抓取器认,AI 大模型基本不专门解析,但加上成本几乎为零,属于顺手的事。hreflang 有个硬要求是多语言版本必须双向互相指回,并且补一条 x-default,单向声明会被直接忽略。

再补两个关键点。一是实体一致性:JSON-LD 里写"北京市"、正文 H1 写"北京"、面包屑写"京",模型很可能识别成两个实体,地名全称要在 title、H1、面包屑、页脚 NAP 里统一,sameAs 挂上高德/百度的店铺页或企业信用页能显著提升置信度。二是坐标别直接填 GCJ-02 或百度坐标,schema.org 的 geo 默认是 WGS84,国内地图抓来的经纬度直接写会有几百米偏移,先转一遍。

坑的话提醒两句:LocalBusiness 能选子类型就别用泛型,维修、餐饮、律所有对应 @type,模型分类更准;多地域站点务必每个地域独立 URL + 独立 title/description,只靠 JS 或 Cookie 切内容,在 GPTBot 和 PerplexityBot 眼里就是同一个页面反复抓,地域信号会被稀释——顺带说一句,Googlebot 是渲染 JS 的,别拿它当参照去验证,用 curl 拉一次原始 HTML 看有没有地域文本才是真的。