# 保哥笔记 — 电商SEO > 本分片含 23 篇文章,按发布日期倒序。全部分片索引见 https://zhangwenbao.com/llms-full.md **站点**:https://zhangwenbao.com/ **分类**:电商SEO **生成**:2026-09-12 16:00:11 CST --- ## ChatGPT购物推荐65%只从商品feed里挑 - URL:https://zhangwenbao.com/chatgpt-shopping-product-feed-retrieval-shift.html - 分类:电商SEO - 发布:2026-09-10 | 更新:2026-09-12 - 摘要:店铺后台一切正常,商品却忽然在ChatGPT购物模式里消失了。问题不在页面上,而在它取数据的地方换了一份。这篇讲清楚换的是什么、怎么查自己有没有中招。 - 关键词:电商SEO,ChatGPT购物,AI购物,商品feed > **TLDR**:摘要:2026年7月10日,ChatGPT购物推荐里来自商品feed的比例,一天之内从8.26%跳到了61.54%。同一天有450家店的购物可见度掉了至少三分之一,另有67家反向上涨。到9月初这个比例稳定在65%上下。换句话说,没把商品数据接进去的店,在六成半的推荐位置上根本没参与竞争。而OpenAI那份feed规范里有64个字段,真正必填的只有9个。 > 摘要:2026年7月10日,ChatGPT购物推荐里来自商品feed的比例,一天之内从8.26%跳到了61.54%。同一天有450家店的购物可见度掉了至少三分之一,另有67家反向上涨。到9月初这个比例稳定在65%上下。换句话说,没把商品数据接进去的店,在六成半的推荐位置上根本没参与竞争。而OpenAI那份feed规范里有64个字段,真正必填的只有9个。 做电商的人最怕一种情况:后台一切正常,页面能打开,收录也没掉,可订单就是少了一截,查不出原因。 今年7月中旬,一批店铺就碰上了这个。他们的商品在ChatGPT购物模式里原本能被推出来,忽然就不见了。技术团队查抓取、查结构化数据、查页面速度,什么都没查出来。因为问题不在他们的网站上。 ChatGPT挑商品的原料,那几天换了一份。 ## 7月10日那天到底发生了什么? AI可见度监测公司Profound在一份9月3日发布的研究 (https://www.tryprofound.com/blog/chatgpt-5.6-shopping-transformation)里把这件事复盘了出来。它的做法是每天替客户在ChatGPT上跑一批固定的提示词,然后从网络请求日志里判断:这一次推出来的商品,是ChatGPT现场去网页搜索找来的,还是从它自己那份已经接进来的商品目录里取的。 两种来源的占比,在7月10日这一天发生了断崖式互换。来自feed的推荐从8.26%涨到61.54%,网页搜索那条路从主力变成了配角。7月整月的日序列一共覆盖1757723次购物提示词运行,按50%抽样、每个提示词每天只计一次。 把观察窗口拉长看,趋势更清楚。7月1日到8月24日之间的97725次运行显示,feed检索是在8月正式超过网页搜索的,而到9月3日,它已经占到全部商品推荐的65%左右。 顺手把这个倍数核一下:报告写的是约6.5倍,而61.54除以8.26是7.45。两个数字都对,只是它算的是增量那一层——涨了几倍和变成了几倍差一倍,引用这类数字的时候最好直接拿两个百分比。 这不是一条缓慢上升的曲线。年初ChatGPT几乎完全依赖网页搜索取商品数据,4月开始有一点feed的份额,5月加速,7月10日一天之内完成了主次易位。 口径 | 7月7日至9日 | 7月10日至12日 | 变化 | feed检索占商品推荐比例 | 8.26% | 61.54% | 报告称约6.5倍 | 前10商家占全部引用的份额 | 22.5% | 41.8% | +19.3个百分点 | 被引用到的唯一商家数 | 13524 | 10607 | -21.6% | 时间点上唯一对得上的事件是OpenAI在7月9日发布了GPT-5.6 (https://openai.com/index/gpt-5-6/),并说明会在接下来24小时内推完。Profound把7月的大部分变化归到了这次发布上。 这里要说清楚一件事:OpenAI从来没有确认过这层因果关系,它的ChatGPT更新说明里也没写购物检索来源的调整。所以严格讲,这是一次时间上的吻合加上排除法,不是官方口径。 ## 为什么同一天有450家店掉了三分之一,67家反而涨了? Profound手上有687个客户满足严格的观察条件:整个7月每天都有提示词触发购物模式,并且7月7日到12日每一天都至少出现过一张指向自家商品的卡片。在这687家里,450家的购物可见度在7月10日前后掉了至少三分之一,67家涨了同样的幅度,合计517家的波动超过33%。 涨跌同时出现,说明这不是一次全局降权,而是一次换料。原料从网页换成了feed,谁的feed在里面,谁就接住了这波流量。 Profound对这517家做了一次最小二乘回归,自变量只有两个:这家店在网页搜索那条路上丢了多少检索、在feed那条路上又拿回了多少。两个变量联合解释了83%的可见度变化。剩下的17%里才是别的因素。 对一个观测性数据集来说,83%已经是很强的解释力。它的含义很直白:7月那一轮涨跌,绝大部分不是因为你的商品变好了或变差了,而是因为你在不在那份新原料里。 保哥去年帮一个做户外装备的客户查过一次类似的掉量。当时的判断路径是先看自然搜索、再看广告、最后才想到AI入口,整整绕了三周。那次的结论是:一个渠道的份额变化,往往先于任何页面层面的原因显形,而排查顺序通常是反的——先查自己能改的,最后才查自己改不动的。现在回头看,如果第一步就问一句“这个渠道取数据的地方还是原来那个吗”,三周能压到三天。 ## 这份报告的三处口径,读的时候得留神 数据很漂亮。不过越漂亮的数字,越得先问一句它是怎么量出来的。这份报告有三个地方,如果不注意,会让你把结论推得太远。 ## 判断来源的那把尺子,是Profound自己刻的 “这条推荐来自feed还是网页搜索”,不是OpenAI给的标签,是Profound从网络请求日志里自己分类出来的。GPT-5.6这次发布如果顺手改了返回结构,那么同一件事就可能被重新归了一次类。 一天之内6.5倍这个数字,既可能是检索机制真的切换了,也可能是分类口径跟着接口变了一次。报告没有做这一层对照,也就是说,它没有回答“把7月9日的数据用7月10日之后的分类规则重跑一遍,还是8.26%吗”。 这个问题不是吹毛求疵。任何一次“A和B不一样”的结论,都得先过一道自基线:A和A自己一样吗。站内之前做过一次实测,测出74%的页面对爬虫和用户呈现不同,补上一组同源对照之后只剩2.2%——差的那七十几个百分点全是测量方式造出来的。方法论细节在页面抖动那篇的自基线设计 (https://zhangwenbao.com/page-content-jitter-baseline-seo-diff-false-positive.html)里写过。 ## 687家这个样本,是筛过的 入选条件写得很清楚:7月7日到12日每一天都得至少有一张自家商品卡。这意味着在7月10日彻底消失的店,根本进不了这个样本。 所以“450家掉了三分之一”是在一批本来就能被看见、并且掉了之后还能被看见的店里数出来的。真正被清出场的那批,人数不在这份报告里。这不是报告的错,它的观察设计需要连续数据;但读的时候要知道,实际受影响的面比450大。 ## Shopify那35%,是用相关系数推出来的 报告说Shopify大约占全部feed检索的35%。依据是把Shopify渠道的日检索曲线和整体feed检索曲线放一起算相关,7月1日到24日的Pearson系数0.997、Spearman系数0.993。 两条曲线几乎完全同形,这一点没有疑问。但同形不等于包含关系。7月10日那天所有在这个机制里的子集都会同时跳变,任何一个这样的子集拿去算相关,都能得到接近1的系数。相关系数能证明“它跟着一起动”,证明不了“它占了其中35%”。 这类把时间序列相关当成占比依据的做法,在工具报的准确率里很常见,以前拆过一次审计工具自己划及格线的分母问题 (https://zhangwenbao.com/ai-audit-tool-accuracy-rate-denominator.html),是同一种毛病:结论的形式比它的证据强度要硬。 说这三条不是要否掉这份研究。它的核心结论——检索来源换了、换在7月10日、没接feed的店在六成半的位置上不参与——三条口径都不影响。要小心的是别把35%当成精确数字去做预算,也别以为受影响的只有450家。 ## 接了feed和没接feed,ChatGPT眼里是两套世界吗? 先说官方口径。OpenAI在购物功能的帮助文档 (https://help.openai.com/en/articles/11128490-shopping-with-chatgpt-search)里写的是:ChatGPT用结构化商品数据来挑选商品,比如价格和描述,数据来自数据提供方,也来自商家自己。同一页还有一句话值得原样记住——商品结果由ChatGPT独立挑选,不是广告,也不受OpenAI任何合作关系影响。 这句话回答了“能不能花钱买位置”,没回答“不接数据还能不能被挑中”。而Profound那组数据给出的答案是:能,但只剩三成半的机会。 接入方式目前分三条,门槛差得很远。 路径 | 谁适用 | 要做什么 | 当前状态 | Shopify Catalog | Shopify店铺 | 不用做额外动作,商品数据已经接好 | 已生效 | Etsy目录 | Etsy卖家 | 平台侧已接入 | 已生效 | 直连feed申请 | 自建站与其他零售商 | 在商家页提交申请 | 现有申请者在等待名单上 | 第三方提供方 | 已用Salesforce、Stripe这类服务的 | 走提供方的通道 | 视提供方而定 | OpenAI的商家页面 (https://chatgpt.com/merchants/)把这件事说得很克制:其他零售商可以申请直连feed,但已提交的申请处在等待名单上。购物功能目前只对美国用户开放,官方说会逐步扩到更多地区,并计划在今年晚些时候上线一个自助接入平台,让商家自己把feed连上去。 这几句话拼起来是个挺尴尬的局面。六成半的推荐位置只对接了feed的人开放,而接进去的通道对大多数人是排队制,自助口子还没开。Shopify因此成了小商家眼下唯一走得通的那条缝——Profound的建议也是这个:大品牌自己接直连feed,小卖家通过Shopify接。 Shopify这边还有一层默认配置值得一并看:它默认上线了agents.md (https://zhangwenbao.com/shopify-agents-md-agentic-discovery.html),集合页也被很多人评估成AI购物时代的主战场 (https://zhangwenbao.com/shopify-collection-page-geo-ai-shopping.html),两件事和目录接入是三条不同的通道,别混在一起算。 Shopify自己还有个说法可以对照:由Shopify Catalog驱动的AI搜索,转化率是用抓取数据的2倍。这句话出自平台方,口径和动机都要打折看,但它至少说明平台把这条通道当卖点在推。 这套feed走的是Agentic Commerce Protocol这条协议,它在3月24日扩展到了商品发现环节。站内之前拆过这几个协议的选型,结论是小商家接入AI购物代理本质上是道配置题 (https://zhangwenbao.com/agentic-commerce-platform-config-guide.html),不是站点重构。7月10日这件事没改变那个结论,只是把配置的紧迫性提前了。 ## 那份feed规范里到底要填什么? Profound在报告末尾给了一个预测:等更多品牌都接上feed之后,竞争就会从“有没有接”变成“接进去的字段填得怎么样”。 这个预测有道理,但它没说清楚字段是哪些。于是把OpenAI那份商品数据上传规范 (https://developers.openai.com/commerce/specs/file-upload/products)整份拆了一遍,逐行统计了字段表。 结果比预想的有意思:整份规范一共64个唯一字段,标着必填的只有9个。剩下55个分散在14个分组里,全部是可选或者条件必填。 分组 | 字段数 | 其中必填 | 基础商品数据 | 9 | 9 | 商品信息(材质、颜色、尺码、尺寸、重量等) | 14 | 0 | 可选与条件列(含Google旧列名) | 11 | 1 | 变体 | 6 | 0 | 其他受支持数据 | 6 | 0 | 退货 | 3 | 0 | 结账 | 3 | 0 | 履约、评价问答、地理标记、广告 | 各2 | 0 | 媒体、价格促销、商家信息、OpenAI标记 | 各1 | 0 | 那9个必填字段挤在同一个分组里,就是基础商品数据:item_id、title、description、url、brand、seller_name、image_url、availability、price。 看这份清单的第一反应可能是“这也不难”。难的不在这9个,在剩下55个上。必填字段决定你的商品能不能进来,可选字段决定它在一堆同类商品里凭什么被挑中。材质、颜色、尺码、性别、年龄段、三围尺寸、重量、退货期限、是否接受换货、店铺评分、评价条数——这些全在可选里。 换个角度看这件事就更清楚:ChatGPT要回答“我想买一双防水的越野跑鞋,41码,能在两周内退的”,它靠的不是你的商品标题,是material、size、size_system、accepts_returns、return_deadline_in_days这几个字段。你不填,这个问题里就没有你。 规范里还有几个字段透露了别的信息。有一个广告分组,is_ads_eligible和ads_metadata——同一份feed也是广告侧的原料。结账分组要seller_privacy_policy和seller_tos,说明它在为站内直接成交留位置。还有一批字段叫identifier_exists、google_product_category、additional_image_link、item_group_id,这几个名字是Google购物feed的旧列名,规范在兼容那套字段表,做过Merchant Center的人可以直接搬。 关于分类字段这件事,Google自己今年也补了一手,给商品结构化数据加了category属性,把页面标记和数据源的分类口径对上了 (https://zhangwenbao.com/merchant-listing-category-property-google-product-taxonomy.html)。两边现在是同一个方向:让页面上的商品和feed里的商品能被认成同一件东西。 ## 哪些字段填错会让整行商品当场消失? 规范里有一条写得非常硬,但很容易被跳过。 availability这个字段只认五个值:in_stock、out_of_stock、pre_order、backorder、unknown。规范的原话是,缺失、空值或者无法识别的值会让这一行被拒。库存状态确实拿不到的时候,要显式写unknown,而不是留空。 留空和写unknown是两个完全不同的结果:一个是整条商品被丢掉,一个是照样进来只是状态未知。 这一条值得所有从Google feed搬过来的人多看两眼。Merchant Center对availability的容错策略和这里不一样,很多店的feed生成逻辑里,库存字段拿不到值就输出空字符串,在旧渠道只是少一个属性,搬到这里就是整行商品不见了。 站内做过一次大规模实测,结论正好能对上:5537件商品的描述字段是空的,其中2542件出自同一个站 (https://zhangwenbao.com/product-description-empty-field-attribution-audit.html)。空字段从来不是均匀分布的,它扎堆出现在同一套模板、同一段生成逻辑上。真要排查,按站按模板查比按商品查快得多。 另外三个容易出事的字段: - item_id要求在整份feed里对每个商品或变体唯一且稳定,并且永远不能复用给另一个商品。用自增序号或者按行号生成的,商品下架再上架就会撞上这条。 - gtin必须是恰好8、12、13或14位数字,校验位要有效,前导零要保留,不许有空格和短横。没分配GTIN的商品,规范要求直接省略这个字段。 - mpn要和brand一起提交,规范特别写了一句:不许编一个值去顶替缺失的GTIN。 GTIN这一栏是所有商品数据里最容易自欺欺人的地方。校验位算得过并不代表填对了——之前拆过一次,条码栏里填的那串数字其实是变体ID的后八位 (https://zhangwenbao.com/product-identifier-cross-copy-mismatch-audit.html),位数对、校验也过,可它指向的不是任何一件真实商品。校验位这道闸能拦住的大约只有一半问题,剩下一半得靠和真实商品库对账。 ## 变体那三个字段为什么最容易配错? 变体在这份规范里不是一个字段,是三个字段的联动,而且有前后依赖。 - group_id:所有变体共享的父级列表ID,必须稳定。缺失或为空时会退回用item_id,而那样就不构成变体组了——不报错,只是静悄悄地把一组变体拆成了一堆互不相干的独立商品。 - listing_has_variations:每一行变体都要设成true。省略、留空或者填false,变体选项就不生效。 - variant_dict:把选项名映射到选中的值。它要求listing_has_variations=true,并且group_id和item_id不同,两个条件缺一个就被忽略。 这三条连起来是一个典型的静默失败链。你把variant_dict写得很完整,但group_id忘了输出或者直接等于item_id,规范的处理方式是忽略,不是报错。于是同一双鞋的8个尺码,在ChatGPT那边是8件毫无关系的商品,每一件都只有一个尺码可选。 为什么这类错误特别难发现?因为feed校验通过了,行数对得上,字段也都在。要发现它,得去数“变体组的数量应该是多少、实际是多少”,而不是数行数。 同一类问题在品牌字段上也出现过。站内实测过66个站的商品数据,品牌字段一个空的都没有,可有17个站把自己写成了好几个牌子 (https://zhangwenbao.com/product-vendor-brand-field-variants-audit.html)——大小写不一、带不带公司后缀、全称和简称混用。字段填满率100%,一致性却不到。填没填是一道闸,填得对不对是另一道,后面那道从来没有工具替你把关。 ## 为什么头部更集中了,被提到的商家反而少了两成? 这是7月10日那组数据里最该被单独拎出来看的一条。 7月7日到9日,前10商家占全部引用的22.5%;7月10日到12日,这个数字变成41.8%。同一段时间里,被引用到的唯一商家总数从13524降到10607,掉了超过两成。 头部份额差不多翻了一倍,而被提到的商家少了两成。这两件事同时发生,说明feed检索的取数范围比网页搜索窄。网页搜索能碰到的是整个开放网络,谁的页面被抓过、被索引过,就有被碰到的可能;feed检索能碰到的只是已经接进来的那份目录,目录里没有的,再好也不在候选集里。 候选集一收窄,结果必然向头部集中。这不是算法偏爱大品牌,是可选项变少的自然后果。站内之前写过一篇,讲的就是AI代理替用户逛店下单时品牌到底是没被看见还是被淘汰 (https://zhangwenbao.com/agentic-commerce-brand-visibility-blindspot.html),那时候这个问题还是个假设,现在它有了日期和数字。 这个机制对独立站主的含义比数字本身更重要。过去几年AI搜索给中小站的那点机会,靠的是开放网络这个大池子——内容写得够专、够细,就有可能在长尾问题里被引到。站内之前统计过,85%的品类在AI可见度上还没有主人 (https://zhangwenbao.com/ai-visibility-topic-ownership-category-level.html),说的就是那个池子还没被占满。 购物这条线现在变了性质。它从“谁写得好谁被引”,变成了“谁在名单上谁被选”。这两种玩法的进入成本差得很远:写得好这事靠长期内容投入,上名单这事靠一次接入动作。 好消息是,接入动作是一次性的,而且门槛不高。坏消息是,等所有人都接完,竞争就回到字段颗粒度上,那时候比的是谁的商品数据更干净、更完整——而这件事需要很长时间的治理,临时补做不出来。 ## 不是Shopify店,现在该按什么顺序动手? 先说不该做什么:不要因为这件事去重做站、重做页面结构、重写商品详情页。这一轮变化跟你的页面无关,重做页面一分钱回报都没有。 按回报排个序,大概是这样四步。 ## 第一步,先确认自己现在到底在不在名单上 最直接的办法是在ChatGPT购物模式里用自己的品类问几个真实购买问题,看会不会出现自家商品卡,以及卡片指向哪里。要问带约束条件的问题,比如尺码、材质、价格区间、退货条款,因为那种问题才会去用feed里的细节字段。 光问一次不算数。这里最容易踩的坑是拿单次查询当结论——站内做过2961次实测,结论是AI可见度的名次本身带很大噪声 (https://zhangwenbao.com/ai-visibility-ranking-statistical-noise.html),同一个问题连问几次结果都不一样。所以至少要跑十几次、分几天跑,看的是出现频率不是有没有出现。想把这事做成可重复的流程,可以直接拿智能体就绪度自查打分表 (https://zhangwenbao.com/agent-readiness-scorecard-dtc-ai-shopping-agent.html)当模板,再配上AI可见度竞品分析的那套跑法 (https://zhangwenbao.com/ai-visibility-competitive-analysis-share-of-voice.html)把对手一起量进来。 ## 第二步,按那9个必填字段先把数据体检一遍 不管申请通道排到哪一天,数据得先干净。这9个字段里最容易出问题的是availability和item_id:前者留空会整行被拒,后者复用会把两件商品混成一件。 体检不用等接入,现在就能做,用自己现有的Google购物feed当输入就行,两边字段大面积重合。价格字段还要多看一眼:站内拆过一次商品价格不一致的六条报警 (https://zhangwenbao.com/product-price-copies-false-positive-audit.html),扣完之后一条不剩,那次的教训是先定好拿哪一份价格当标准,再去比对。站内那份产品feed该谁管的拆解 (https://zhangwenbao.com/product-feed-seo-asset-organic-ai-ownership.html)里有一份可以直接用的字段核对清单。 ## 第三步,把55个可选字段里跟自己品类强相关的那批补上 不要全填,填了也没用。判断标准是一句话:买你这类东西的人,在决定买之前会问什么,就补那几个字段。 - 服装鞋帽:size、size_system、color、material、gender、age_group - 家电与工具:dimensions系列、weight、condition - 高单价品类:accepts_returns、return_deadline_in_days、return_policy、accepts_exchanges - 口碑敏感品类:review_count、star_rating、store_review_count、store_star_rating 这一步的工作量常常被低估。不是往表里加几列的事,是要在商品库里真有这些数据。多数店的尺码写在商品描述的一段文字里,而不是一个结构化字段,要抽出来得先治理一遍。 ## 第四步,提交直连申请,同时把Shopify那条路当备选评估一下 申请要排队,所以早交比晚交好。同时值得算一笔账:如果自己的品类和规模适合,走Shopify接入是当下唯一确定能通的路。这不是说要搬站,是说把它放进选项里认真算一次成本。 顺带说一句,接进feed之后流量的落点还是你的站。之前拆过一次数据,AI来的流量转化率是自然搜索的好几倍,但落地页常常接不住 (https://zhangwenbao.com/ai-referral-traffic-conversion-landing-page.html)。前面四步做完只是能被找到,能不能成交是另一条链路上的事。 ## 这件事和feed该谁管不是同一个问题 站内之前写过一篇,讲的是产品feed在组织里的归属——它通常被当成投手的活,挂在广告部门下面,而它实际影响的是自然搜索和AI购物的露脸机会。那篇的落点是责任划分和协作机制。 这一篇不解决那个问题。这一篇讲的是检索来源在某一天换了,以及换完之后那份数据的字段规范长什么样。两件事的关系是:7月10日之后,feed归谁管这个问题的代价变高了。以前管得松,损失的是一部分免费曝光;现在管得松,损失的是六成半的推荐位置。 如果你正在读的是“该谁管”那个问题,直接去看那篇;这一篇的用处是给那篇的紧迫性加一个具体的数字。 另外一个容易混的边界:这一篇讲的不是怎么在AI回答里被引用。被引用和被推荐是两套机制,站内分开写过,被检索和被引用是两套打法 (https://zhangwenbao.com/ai-citation-retrieval-content-strategy.html)。购物模式里的商品卡走的是第三套——商品目录检索,跟前两套都不一样。 ## 到9月12日为止,还有哪些事没定? 把已知和未知分开列一下,免得把推测当结论用。 已经确定的:检索来源在7月10日发生了主次互换;到9月初feed占比稳定在65%上下;Shopify与Etsy的目录已接入;直连申请处在等待名单状态;购物功能只对美国用户开放;那份规范64个字段、9个必填。 还没有答案的: - OpenAI没有确认过GPT-5.6和这次检索来源变化的因果关系,官方更新说明里也没有这一条。 - 自助接入平台官方说在今年晚些时候上线,到9月12日还没有具体日期。 - 等待名单的处理速度、是否有筛选标准、按什么顺序放行,官方三处文档都没写。 - feed里的商品一旦进来,是按什么排序被挑中的,这一层完全没有公开信息。Profound的数据只能说明谁在名单上,说明不了名单内部怎么排。目前唯一能摸到的线索是有人把ChatGPT挑源时的内部字段扒了出来 (https://zhangwenbao.com/chatgpt-source-selection-network-traffic-fields.html),但那是网页引用那条路的字段,不是商品目录这条。 - 购物功能扩到美国以外市场的时间表没有公布,对做多市场的独立站来说,这一条直接决定要不要现在就投入。 那份feed协议本身是公开的,3月24日扩展到商品发现环节 (https://openai.com/index/powering-product-discovery-in-chatgpt/)的时候OpenAI发过说明,Salesforce和Stripe这类服务商也在支持名单里。也就是说,通道的技术规格是透明的,被卡住的是准入。 ## 常见问题解答 ## 没有接商品feed,是不是在ChatGPT购物模式里就完全看不到了? 不是完全看不到。网页搜索这条检索路径还在,按9月初的数据它还占三成半左右。没接feed意味着你只在这三成半里参与竞争,另外六成半的位置不参与。而且这个比例还在往feed那边偏。 ## 那份规范64个字段,是不是填得越多越好? 不是。9个必填决定能不能进来,必须填对;剩下55个决定在同类商品里凭什么被挑中,判断标准是买你这类东西的人在决定前会问什么。和购买决策无关的字段填了也不会带来额外机会,反而增加数据维护成本。 ## availability留空和写unknown有什么区别? 区别是整行商品在不在。规范明确写了,这个字段缺失、留空或者填了无法识别的值,这一行会被拒;库存状态确实拿不到时,要显式写unknown。从Google购物feed搬过来的生成逻辑最容易踩这一条,因为两边的容错策略不一样。 ## Shopify占35%这个数字可信吗?要不要按它做决策? 方向可信,数字不要当精确值用。它的依据是两条日检索曲线的相关系数0.997,而相关系数能证明两者同步变动,证明不了占比。把它理解成“Shopify渠道在这次变化里是主要组成部分之一”是安全的,拿35%去算预算分配就过度了。 ## 我的店在7月10日之后掉量了,怎么确认是不是这件事导致的? 看三个信号能不能同时对上:掉量发生在7月10日前后而不是渐进下滑;掉的是来自ChatGPT的流量而不是全渠道;自然搜索排名和广告表现在同期没有可解释的变化。三条都对上,指向这次检索来源切换的可能性就很高。需要注意的是后台本身也不一定看得见这部分流量,ChatGPT来的访问在很多站的报表里是隐身的 (https://zhangwenbao.com/chatgpt-recommendation-traffic-attribution-blindspot.html),先把归因链补上再下结论。都对不上就别往这上面归因,去查别的。 ## 现在申请直连feed,大概多久能通? 官方没有公布处理时间,也没说筛选标准和放行顺序。已知的只有一条:现有申请者处在等待名单上。所以申请这件事早做比晚做好,但不要把上线时间点押在它身上做排期。 ## 权威参考资料 ## 没有GTIN能填UPC码吗?GMC里没有UPC这一栏 - URL:https://zhangwenbao.com/gtin-upc-identifier-exists-gmc-geo.html - 分类:电商SEO - 发布:2026-09-09 | 更新:2026-09-09 - 摘要:商品只有一串UPC码,Merchant Center里翻遍属性表也找不到UPC字段,于是顺手勾了无标识符。这一勾可能让整批商品拒登,也让AI认不出你卖的和别人卖的是同一件东西。只有MPN和用Shopify的情况另有一套填法。 - 关键词:GTIN,电商SEO,AI购物,Merchant Center > **TLDR**:摘要:把200万个UPC-E码逐个算一遍,其中58%直接填进gtin那一栏,能顺顺当当骗过Google的校验位。末位是5到9的那100万个,一个不落全部通过;末位是3的那20万个,一个都过不去。位数和校验位这两道闸,只拦得住写错的数字,拦不住写成了另一件商品的数字。 > 摘要:把200万个UPC-E码逐个算一遍,其中58%直接填进gtin那一栏,能顺顺当当骗过Google的校验位。末位是5到9的那100万个,一个不落全部通过;末位是3的那20万个,一个都过不去。位数和校验位这两道闸,只拦得住写错的数字,拦不住写成了另一件商品的数字。 后台翻了三遍,属性表里就是没有UPC这一栏。 这大概是做Google购物的人最容易卡住的一分钟。手上明明有一串12位的UPC码,印在包装背面的条形码下方,清清楚楚。可Merchant Center的字段清单里,只有一个叫gtin的东西。于是很多人做了同一个动作:把商品标记成没有唯一标识符,然后接着往下走。 问题就出在这一步。UPC不是GTIN的替代品,它本身就是GTIN。 ## 手上只有UPC码,Merchant Center里该填哪一栏? GTIN是Global Trade Item Number的统称,中文叫全球贸易项目代码。它不是某一种条码的名字,而是一整个家族的户口本。北美用的UPC、欧洲用的EAN、日本用的JAN、图书用的ISBN、整箱整托盘用的ITF-14,全都是GTIN的不同格式,只是位数和使用地区不一样。 所以答案很简单:有UPC就直接填进gtin,这不是凑合,这就是标准填法。Merchant Center里没有UPC字段,将来也不会有,因为压根不需要。 按Google官方对gtin属性的规定 (https://support.google.com/merchants/answer/6324461?hl=zh-Hans),这一栏接受的位数只有0、8、12、13、14这五种,数据类型是数字,中间的空格和短划线会被系统忽略掉。各种格式对应的位数是这样的: 格式 | 主要地区 | 位数 | 提交前要注意什么 | UPC | 北美 | 12位 | 官方原话是“请将8位数字的UPC-E代码转换为12位数字的代码” | EAN | 欧洲、中国大陆 | 13位 | 最常见的一种,出口商品基本都是它 | JAN | 日本 | 8位或13位 | 两种都收 | ISBN | 图书 | 13位 | 官方要求“请将ISBN-10转换为ISBN-13” | ITF-14 | 多件组合装 | 14位 | 整箱整托盘用,零售单品别填这个 | 这张表里藏着两个动作词:转换。8位的UPC-E要转成12位,10位的ISBN要转成13位。它们不是“也可以转”,是提交之前必须转。 很多人不知道UPC-E是什么。它是UPC-A的压缩版,专门给口香糖、单支笔这种没地方印条码的小包装用。压缩的办法是把UPC-A里连成一串的零抽掉,剩下8位。抽掉的零在扫码枪里会被自动补回去,但在Merchant Center的输入框里不会。 表格最后一行的ITF-14也值得单独说一句。它是包装层级码,一箱、一托盘各有各的号,跟零售单品那个码不是同一个东西。工厂发来的资料里经常两个码并排列着,采购顺手把整箱那个填进了feed,商品照样上架,因为14位是合法位数、校验位也算得过。真正的后果要到很久以后才显形:比价的时候,你那件单品被拿去和别人家的整箱装比价格,怎么看都贵得离谱。 分辨方法是看GTIN-14的第一位。零售单品的13位码补零成14位时首位是0,而包装层级码的首位是1到8,代表不同的箱装规格。首位不是零的,基本可以断定不该出现在零售feed里。 ## 8位的UPC-E直接提交,那道闸拦得住吗? 这是保哥这次真正想弄明白的事。 直觉上,Google有一道校验位验证,填错的数字应该会被打回来。校验位就是GTIN最后那一位,它由前面所有数字按固定权重算出来,随便编一个数字,最后一位对不上的概率是九成。听起来挺可靠。 可UPC-E的情况特殊。它是8位,而GTIN-8也是8位。位数这道闸对它完全无效。剩下的就只有校验位那一关了。 所以我把所有可能的UPC-E码穷举了一遍。数字系统位取0和1,后面6位数据从000000排到999999,一共200万个。每一个都按GS1规范展开成UPC-A算出真校验位,拼成商家会从条码上照抄的那8位,再拿GTIN-8的校验规则去验一次。跑之前先用五组公开的标准配对校准了尺子,包括EAN-13的经典示例9780306406157,以及UPC-E 0425261展开成042100005264这一对,全部吻合才开始跑。 结果比我预想的难看得多。 UPC-E末位数字 | 样本量 | 被当成合法GTIN-8收下的比例 | 5、6、7、8、9 | 各20万 | 100% | 0、1、2 | 各20万 | 20% | 4 | 20万 | 20% | 3 | 20万 | 0% | 合计 | 200万 | 58% | 末位是5到9的UPC-E码,直接填进去,校验位验证一次都拦不住。不是概率高,是必然通过。 这不是巧合,是能证明的。UPC-E展开成UPC-A时,末位5到9那一档的规则是在中间插进4个零。校验位算法按从右往左的奇偶位分配3和1两种权重,插进去的零本身不贡献任何数值,而4是偶数,插完之后后面每一位的奇偶都没变。于是两个式子算出来的加权和完全相同,校验位自然也相同。 末位是3那一档,插的是5个零,奇偶全部翻转,而且被抽走的那个3在展开体里根本不出现。两个式子的差固定是个奇数,永远不可能被10整除。所以那20万个码,一个都通不过。 把这两件事合起来说就是:你把UPC-E直接填进gtin,有超过一半的概率不会收到任何报错,商品照常上架,而那个8位数字指向的是GTIN-8编码空间里另一件东西——那是GS1单独分配给小包装商品的号段,跟你的商品没有半点关系。 会报错的那42%,反倒是幸运的。至少它告诉你填错了。 ## 校验位算得过,就等于填对了吗? 顺着上面那条线再往下走一步。既然校验位这道闸在UPC-E面前形同虚设,那它到底能拦住什么? 我又跑了三组对照。 填错的方式 | 样本量 | 完全漏过去的比例 | 位数就不对(9位、10位、11位内部编号) | 各20万 | 0% | 纯数字的内部SKU冒充12位UPC | 200万 | 7.01% | UPC-E不展开直接提交 | 200万 | 58% | 位数不对的那一类,Google一个都不放过。ISBN-10的10位、内部编号的9位和11位,全部被位数闸挡在门外。这道闸虽然笨,但绝对可靠。 中间那一行是重点。把店铺自己的SKU填进gtin,这个错误在独立站里泛滥成灾。随机的12位纯数字,恰好通过校验位的概率是十分之一,再扣掉落在受限前缀里被二次拦下的那部分,还剩7%左右能完整地漏进Google的商品目录。 说到受限前缀,这是Google那道闸的第二层,很多人根本不知道它存在。官方明确写了两条禁止提交的号段:前缀为02、04或2的属于受限范围,前缀为05、98或99的属于优惠券范围。前者是企业内部自用码,超市里现场称重打印的价签就用它;后者是优惠券专用。这两类号在GS1体系里本来就不指向任何一件全球流通的商品。我算了一下,随机生成的合法13位码里有15.06%会落进这两个区间,等于白送一道拦截。 这一层拦截也解释了一个现象:为什么有些卖家在某个中文平台上买了一批“便宜条码”,提交后不报错,过一阵子却被判无效。因为那批码要么本来就在受限号段里,要么早就被别人用过。 顺带说一句站内的实测数据。之前抓了131个海外独立站的商品页,在结构化数据里真填了条码的只有11个站 (https://zhangwenbao.com/product-identifier-cross-copy-mismatch-audit.html),一共141条,其中25条经不起校验位一算,而这25条集中在4个站——挖开看,填的其实是平台变体ID的后八位。这就是上面那7%在真实世界里的样子。 ## 手上只有MPN,能顶替GTIN填进去吗? 不能。而且这个错法有个很坏的性质:它有小概率不报错。 MPN是厂商自己定的料号,通常带字母、带横线,位数也不按GTIN那套走。填进gtin那一栏,多数情况下当场报invalid value [gtin],位数闸先把它挡在门外了。 危险的是少数情况:万一你的MPN恰好是纯数字,位数又正好是12位。上面那组对照量过这种概率——纯数字冒充12位UPC,7%能完整漏过去。漏过去之后是什么局面?你提交了一串合法的、但属于别人产品的GTIN。缺一个标识符只是信息不全,提交一个别人的标识符是编造,后者在Google那里的定性严重得多。 MPN有它自己的位置,就叫mpn。填在那里,同时务必把brand也填上。至于identifier_exists,下一节会说它的语义;这里先补一句:这个字段缺省值就是true,所以有品牌有料号、只是没条码的时候,最省事的处理是根本不提交它。 ## brand加MPN这一组,能顶多少用? 比什么都没有强不少,但要清楚它弱在哪。 GTIN是全球唯一且跨平台通用的,MPN只在“品牌加料号”这个组合下才唯一。机器做跨源合并时,前者是精确匹配,后者要先确认品牌名说的是同一家公司——多一道判断就多一分不确定。后面要讲的评论聚合、比价合并那套价值,MPN只能兑现一部分。 在配件、零部件、工业品这些品类里,厂商料号本来就是行业内通用的检索键,MPN的实际效果会好一些。OpenAI的商品feed规范里也收mpn,同样是可选字段,要求是“保留其标点和大小写”——注意这跟gtin那一栏“不带空格和短划线”的要求正好相反,别用同一套清洗规则处理两个字段。 缺GTIN的代价是有的,只是不像很多人以为的那么重。Merchant Center里有一类专门的提示叫“因缺少值而导致效果受限”,缺gtin是其中最常见的一种。它不是拒登,商品照常投放,但Google没办法把你的商品和目录里的同款对上,覆盖面和展示量都要打折。 ## 代理别人的品牌,码该找谁要? 找供应商。他们手上一定有,只是常常懒得给。 要的时候把用途说具体:Google Merchant Center和AI购物渠道需要这个号,比笼统地说“给我个条码”容易要到得多。前者是一个能落到具体系统的诉求,后者听起来像可有可无的资料整理。 ## 说自己没有GTIN,凭什么Google说了不算? 现在说回最开始那个动作:找不到UPC字段,于是把商品标成没有标识符。 这个开关在feed里叫identifier_exists。它的取值只有yes、true、no、false四个,Merchant API里只收true和false,而且必须用英文提交,写成中文的“否”不算数。这一条看着像废话,但每年都有人栽在本地化插件自动翻译上。 关键在于,这个开关不是你说了算的。 Google官方对“商品标识码不正确”这个问题的说明 (https://support.google.com/merchants/answer/12158126?hl=zh-Hans)写得很直白:如果你把这个属性提交成false,而Google认为该商品应该拥有GTIN,商品会被拒登,直到你提供为止。判断依据是那句“我们认为该商品拥有全球贸易项目代码,因为类似的商品/服务会使用此标识码”。 注意这句话的落点。它不是去比对别家商店的同款商品页,而是看你所在的品类通常怎么做。你卖的是量产的电动牙刷,这个品类里九成九的商品都有条码,那你说自己没有,这句话本身就不成立。 这里要区分两种后果,中文教程里经常混为一谈: - 把identifier_exists错填成no:官方措辞是“将收到警告”,不是立刻拒登。 - 提交了不正确的标识符:官方措辞是“您的商品可能会被拒登”。 - 被判定为“商品标识码不正确”:这条明确写了拒登,直到补上为止。 换句话说,最危险的不是留空,是填了一个错的。这跟大多数人的直觉正好相反——很多人觉得随便填点什么总比空着强,实际情况是空着只挨一句警告,填错了直接下架。 ## 自有品牌到底该填no还是干脆留空? 这是自有品牌卖家最常问的一句,也是被误导得最狠的一句。 先把identifier_exists的真实语义摆出来。Google对这个属性的官方定义 (https://support.google.com/merchants/answer/6324478?hl=zh-Hans)说得很清楚:只有在你确定商品没有任何可用的唯一商品标识码时,才能把它设成否。而所谓唯一商品标识码,按Merchant Center对唯一商品标识码的说明 (https://support.google.com/merchants/answer/160161?hl=zh-Hans),是由GTIN、MPN、品牌这三个属性共同构成的。 三个,不是一个。 所以identifier_exists = no的意思,从来不是“我没有条码”,而是“条码、厂商零件号、品牌,我一样都没有”。一个有自己LOGO、有型号、有品牌注册的自有品牌卖家,去勾这个选项,等于在系统里说自己是三无产品。Google那边看到的是一组自相矛盾的数据:品牌栏填得好好的,却声称没有任何标识符。 官方给出的、可以合理填no的场景其实只有两类,英文原文列得很具体:一类是定制或独一无二的商品,比如定制T恤、艺术品、手工制品;另一类是GTIN制度出现之前的老东西,比如老货、古董、1970年前出版的书。 那自有品牌该怎么填?gtin留空,brand和mpn填满,identifier_exists不动。这样系统读到的是“这件商品用品牌加厂商零件号来识别”,逻辑自洽,不会报矛盾。 但这只是权宜之计。品牌加零件号这套组合的问题在于,它是你自己家的语言。别人家的目录里没有你这套编号,跨渠道对不上,等于每一个渠道都要重新认识你一次。真要长期做,还是得去GS1申请一段属于自己的厂商识别代码,申请流程和材料清单在这篇里写过 (https://zhangwenbao.com/cross-border-product-gtin-guide.html),走完大概两到四周。 ## 同款不同色,能共用一个码吗? 不能。这句话说了很多年,但落到具体怎么做,还是有人搞混。 GS1的分配规则是一物一码,不同规格、不同包装、不同颜色尺码,厂商分配的本来就是不同的码。红色M码和黑色L码是两件商品,各有各的号。共用一个码不只是不规范,是让Google无法区分你的两件商品,比价的时候会把它们当成同一件来算。 结构化数据这一侧的要求也是配套的。按Google对商品款式结构化数据的规定,商品组必须有一个唯一ID,用productGroupID或者变体上的inProductGroupWithID声明;而每一个款式“在对应的结构化数据标记中都必须具有唯一ID,例如使用sku或gtin属性”。 注意官方这里说的是sku或gtin,两个都行。所以变体层的唯一性不是非要靠条码不可,用你自己的SKU也能满足。但这两条路的效果差得远:SKU只在你家系统里有意义,gtin才能让别人家的机器认出这是同一件东西。 预算有限的时候有个折中办法:给销量前20%的变体买独立的码,剩下的用SKU撑住结构。页面JSON-LD的具体写法和各平台字段差异 (https://zhangwenbao.com/product-gtin-seo.html)另有一篇写得比较细,这里不重复。 ## 页面上那几个标识符字段,各自管什么? 前面说的都是feed那一侧。页面的结构化数据里还有一组对应的字段,不少人以为要在它们之间二选一,其实它们是四个平行的属性,有哪个填哪个。 把schema.org官方词汇表拉下来查一遍就很清楚:gtin、mpn、sku三个的定义完全对称,都允许挂在Demand、Offer、Product上,值的类型都是文本;brand的取值类型是Brand或Organization,所以它必须写成一个对象,写成裸字符串是不合规的。 字段 | 它回答的问题 | 没有它会怎样 | gtin | 全世界怎么称呼这件商品 | 跨站合并失效,效果受限 | mpn | 厂商内部怎么称呼它 | 没有GTIN时连备用键都没有 | sku | 你自己怎么称呼它 | 着陆页可能对不上你的feed | brand | 它是谁家的 | MPN失去唯一性,等于白填 | sku那一行值得单独说。它看着最没技术含量,却有个很多人不知道的用途。Merchant Center对结构化数据属性与值的官方说明 (https://support.google.com/merchants/answer/6386198?hl=zh-Hans)里写着:“建议在每个注释中提供SKU(ID id属性)或GTIN(gtin属性)。如果您未提供此信息,您着陆页上的商品可能与您的结构化商品数据不匹配。”它是页面和feed之间的那把对齐钥匙——feed里那个id,就是页面上这个sku。 同一份文档里还有两条约束,比字段本身更容易被忽略。第一条是关于生成方式的:“结构化数据标记必须包含在从网络服务器返回的HTML中。页面加载后,将无法使用JavaScript生成结构化数据标记。”第二条是关于取值的:“结构化数据必须与客户所看到的值一致。在商品着陆页上提供不正确的数据属于违反Web开发者指南的行为。” 第一条直接判了一类常见做法的死刑:装一个应用,让它在页面加载完之后往DOM里塞一段JSON-LD。你在浏览器里看得见,Google那边不认。 ## 没有GTIN的时候,那一栏怎么处理? 直接不写。别写空字符串,别写N/A,更别把MPN复制一份塞进去。空值会触发校验错误,假值是编造标识符,两条都比缺字段严重。 还有一件事容易想当然:identifier_exists在schema.org里根本没有对应属性。把词汇表1676个属性翻一遍,没有这个名字——它是Merchant Center feed独有的字段。页面上没办法、也不需要声明“我没有条码”,缺就是缺。某个属性到底能不能挂在某个类型上 (https://zhangwenbao.com/third-party-review-schema-entity-linking.html),有个离线核对的办法,另一篇里写了。 最后是一致性:页面schema里的gtin、mpn、sku必须和feed里的值完全一致。多语言站点尤其容易翻车,一个语言版本改了另一个没跟上,两边就开始互相打架。 ## GTIN对GEO到底有什么用? 到这里,前面所有关于位数、校验位、开关的话题,才终于连到一起。 Merchant Center那份文档里有一句话,是整件事的地基:制造商会为每种商品指定唯一商品标识码,因此,如果您销售的商品与其他零售商的相同,那么商品的唯一商品标识码也会相同。 这句话读起来平平无奇,但它定义了GTIN在生成式引擎优化里的全部价值。GTIN不是一个用来给你的商品打分的信号,它是一把钥匙,用来判定“你这个商品”和“别处那个商品”是不是同一件东西。 这件事在AI推荐商品的场景里格外要紧。同一个SKU,可能同时躺在你的独立站、亚马逊、几个地区经销商、两三个比价站的目录里。机器要判断这件商品值不值得推荐,会去看它的评论数、评分、价格区间。有统一的GTIN,这些分散在各处的信号才能合并成一个实体的证据;没有,机器眼里就是五六件各自只有零星几条评论的可怜商品,哪一件都不够格被推荐。 更微妙的是,这把钥匙是双向的。同一个机制,往一个方向用,是把好评归拢起来;往另一个方向用,就是前面那条拒登规则——Google之所以能反驳你的“我没有GTIN”,靠的正是它对这个品类里其他商品的认知。能替你聚合信号的那套逻辑,同时也是能戳穿你的那套逻辑。 ## 这算实体消歧,还是别的什么? 圈子里习惯把这件事叫实体消歧,方向没错,但两个概念被合在一起用了,分开看更有指导性。 实体消歧解决的是“一个名字对应好几个候选,该选哪个”——小米是公司还是谷物,苹果是水果还是那家公司。那是文本侧的问题。GTIN干的是另一件事:你官网、亚马逊、经销商站、比价平台上那五条记录,本来就没有歧义,没人搞不清它们各自是什么,问题在于引擎不知道它们是同一件东西。把多条记录合并到同一个现实对象上,这在学术上叫实体归并,是数据侧的问题。 这个区分有实操价值,因为两者的可控性差得远。 GEO里大部分实体工作是概率性的:你写sameAs、建各种条目、让第三方一致地提你的品牌名,引擎把这堆弱信号加权,最后给一个置信度。你能施加影响,但保证不了结果。GTIN是确定性的——字符串精确匹配,要么对上要么对不上,没有打分也没有模糊地带。在这个到处是概率的领域里,能拿到一把硬主键属于稀罕事。 所以它的性价比高得有点不讲道理。同样的人力,补GTIN覆盖率是确定收益,做品牌实体建设是概率收益,先做哪个不用犹豫。 但也别指望它包打天下。品牌层的组织信息、社媒与百科条目之间的对应关系,GTIN一点都管不到;属性层的规格参数、型号名在各处内容里的表述是否一致,它同样管不到。它的主场只有中间那一层:商品与SKU。 顺便说个反面例子。OpenAI早期做ChatGPT购物时,商品信息有相当一部分是靠抓取零售商网站得来的,结果就是库存和运费经常不准,沃尔玛那边对这套体验的抱怨很直接。抓取之所以不准,本质上就是因为缺一把能把两边对上的钥匙——页面上写的和数据库里存的,机器没办法确认是同一件商品。 ## ChatGPT的feed规范里,gtin并不在必填清单上 这一节要泼一点冷水,因为中文圈里关于这件事的说法大多不准确。 常见的说法是:AI购物的feed有一套pass/fail前置检查,缺必填字段的商品会被静默丢弃,所以GTIN是生死线。前半句对,后半句错。 翻开OpenAI公布的商品feed规范 (https://developers.openai.com/commerce/specs/feed/),必填字段一共九个:item_id、title、description、url、brand、seller_name、image_url、availability、price。gtin不在里面,它是可选字段。规范里对它的要求是“exactly 8, 12, 13, or 14 digits, including a valid check digit”,保留前导零,不带空格和短划线,而且明确说明它标识的是具体商品而不是变体组。 两套规范放在一起对照,能看出不少东西: 要表达的事 | Google Merchant Center | OpenAI商品feed | 商品条码 | gtin(必填条件视品类而定) | gtin(可选) | 没有标识符 | identifier_exists | Google兼容格式里同样认identifier_exists=no | 评论条数 | 商品评论feed单独提交 | review_count | 平均评分 | 同上 | star_rating,0到5分,两位小数 | 变体关系 | item_group_id | group_id加listing_has_variations加variant_dict | 所以别把Merchant Center那套字段名照搬过去,两边不是一回事。评论字段尤其容易搞错,OpenAI那边叫review_count和star_rating,而且规范要求这两个必须配对出现。 那GTIN在这套体系里到底算什么?它不是准入线,是消歧线。没有它,你的商品照样能进feed;但进去之后,它是一个孤零零的条目,没法跟任何外部证据挂上钩。关于ChatGPT购物推荐从哪里取数、query fan-out怎么把一句话拆成多条意图,之前那篇拆得比较透 (https://zhangwenbao.com/chatgpt-shopping-carousel-google-shopping-optimization-guide.html),可以对着看。 ## 结账那半边停了,发现这半边反而更值钱 2026年3月,OpenAI宣布把站内结账迁到apps里去,重心转回ChatGPT内部的商品搜索与发现。这个转向的背景不太好看:用户在对话里问了大量商品问题,但很少在里面完成购买。沃尔玛测出来的数字是,ChatGPT站内结账的转化率比跳回自己网站差大约三倍。 这件事对做电商的人有个直接推论:别把资源压在agentic checkout上。成交那半边现在是停滞的,而发现那半边活得好好的,并且因为结账退场,它反而成了AI购物里唯一还在跑的环节。 发现环节的全部输入是什么?就是feed,加上页面上机器能读到的东西。这也是为什么保哥这两年给客户做电商SEO诊断时,越来越多的问题最后都指回商品数据本身,而不是页面标题写得好不好、外链够不够。 顺带提醒一句页面这一侧:产品页JSON-LD里的gtin,要和feed里提交的那个值完全一致。两边不一致比只有一边更糟——只有一边是信息不全,两边打架是信息可疑,机器对后者的处理方式通常是两个都不信。 ## 哪些AI问题里,GTIN一点忙都帮不上? 这一节是给自己泼的第二盆冷水,也是我觉得最该讲清楚、却几乎没人讲的一件事。 GTIN起作用的前提,是这次对话里存在一个确定的商品实体。用户说“帮我看看Anker那款737充电宝现在多少钱”,或者“这三款扫地机器人哪个吸力大”,机器要去目录里取具体条目,这时候能不能把你的商品和别处的同款对上,直接决定你出不出现。 可用户也会这样问:“露营用的手电筒怎么挑,需要注意什么”。这句话里没有任何一个可以落到商品条目上的东西。机器这时候要找的是解释、是对比逻辑、是使用经验,它去引用的是评测文章、论坛讨论、品牌自己的内容页。你的feed修得再干净,在这类问题里的权重是零。 怎么快速分辨这两类问题?看那句话里有没有能唯一指向一件商品的锚点:品牌加型号、一组具体参数、一个明确的价格带、某个具体的使用场景加具体的规格要求。有锚点的走目录,没锚点的走内容。 这个分界带来的实际后果是,商品数据和内容这两条腿得分开算账,也得分开投人。保哥见过的一种典型误判是:某个客户把GEO预算几乎全压在feed治理上,半年后确实在比价类问题里露脸多了,可品类教育类的问题一条都没进去——因为那半边根本没人写。 反过来的误判也有,而且更常见:内容团队写了一堆选购指南,商品数据那边条码乱七八糟,结果用户看完AI推荐的指南想买,机器却指不出他家的具体商品。 还有一种情况比信息型问题更隐蔽:商品是同一件,名字却裂开了。官网叫“XX Pro二代”,包装盒印的是“XX Pro II”,亚马逊listing写成“XX Pro 2升级版”,评测视频和论坛里大家一律简称“XX Pro”。GTIN能把feed层面那几条记录焊死在一起,可当用户在对话里问“XX Pro二代比一代强在哪”,机器去检索的是文本语料,那四个名字是不是同一个东西,GTIN根本没参与。 所以型号命名的规范化是跟GTIN并行的另一件事,谁也替代不了谁。见过最常见的失误是市场部改了产品叫法,旧内容和经销商物料没同步,一个型号在语料里裂成三个实体,彼此谁也不认识谁。 ## 一次把自己站上的商品编号盘清楚 说了这么多,落到能动手的事情上其实不多,一个下午够了。 第一步,把feed导出来,跑一遍位数和校验位。下面这段脚本不依赖任何第三方库,直接能跑: def check_digit(body): s = 0 for i, ch in enumerate(reversed(body)): s += int(ch) * (3 if i % 2 == 0 else 1) return str((10 - s % 10) % 10) def audit(code): c = code.strip().replace(' ', '').replace('-', '') if not c.isdigit(): return '不是纯数字,多半填了SKU' if len(c) not in (8, 12, 13, 14): return '位数不合法:%d位' % len(c) if check_digit(c[:-1]) != c[-1]: return '校验位对不上' c13 = c.rjust(13, '0') if c13.startswith(('02', '04', '2')): return '落在受限号段,不能提交' if c13.startswith(('05', '98', '99')): return '落在优惠券号段,不能提交' if len(c) == 8: return '注意:8位码请确认是GTIN-8而不是没展开的UPC-E' return 'OK' 最后那条提示是这次实验的直接产物。8位码是唯一一类机器帮不了你的情况,只能人去确认它到底是GS1分配的GTIN-8,还是从UPC-A压缩来的UPC-E。判断办法也简单:问供应商要商品包装上那个完整的12位码。 第二步,把UPC-E展开成UPC-A。规则按末位数字分档:末位0、1、2的,取前两位数据加末位再补4个零再接剩下三位;末位3的,取前三位加5个零加剩下两位;末位4的,取前四位加5个零加最后一位;末位5到9的,取前五位加4个零再把末位接回去。展开完重算校验位,别沿用原来那一位。 第三步,检查identifier_exists有没有被误设。重点看这三类商品: - 用了本地化插件、字段被自动翻译过的; - 从别的平台批量迁移过来、迁移工具默认给了false的; - 自有品牌,当初找不到GTIN顺手勾上的。 第四步,看变体层。母款有码、变体没码是最常见的形态,也是最容易被忽略的——因为Merchant Center不会为此报错,它只是安静地把你的几十个变体当成几十件互相独立、彼此陌生的商品。 ## 站在Shopify上的话,这个字段藏在哪? 不用建元字段,Shopify原生就有,只是不叫GTIN。位置在变体层的库存区块,那一栏写着“条形码Barcode (ISBN, UPC, GTIN, etc.)”。Google与YouTube销售渠道会把变体的条形码直接映射成feed里的gtin,没有别的来源——这一栏空着,feed里的gtin就是空的。 注意它在变体层不在商品层。不同尺码颜色各填各的,只在父级填一个不算数。 这个字段刚刚变过,就在2026年9月8日。Shopify的变更日志说,变体现在最多支持20个条形码,每个可以指定类型,UPC、EAN、ISBN、GTIN、ASIN都能选,也支持自定义类型放内部编号;选了类型之后,Shopify会按那个标准的格式校验数值,输入时就能抓到打字错误。商品CSV里对应的列名是Variant Barcodes,第一个条形码在只需要单个条形码的场景里继续使用,向后兼容。 这条变更之前,那一栏是完全不做校验的——填字母、填内部编号都不报错,于是不少店把它当成了第二个SKU用,直到feed同步过去才发现全是废号。如果你的店还没拿到这次更新,自己写条规则先过一遍:长度是8、12、13或14位,且全是数字。 另外两个字段的对应关系也顺带说清楚:brand映射的是vendor,很多店铺那一栏填的是供应商名字或者干脆留空,这是Shopify站在Merchant Center里被拒的常见原因之一;mpn则没有原生字段,要建一个商品元字段,再在feed应用里映射过去。 最后提醒一句:条形码填了,不等于产品页的结构化数据里就有gtin,那是两套数据。而且按前面引过的那条官方要求,标记必须包含在服务器返回的HTML里,靠应用在页面加载后用JavaScript塞进去的那一段,Google不认。 这四步做完,再去谈GEO的其他动作才有意义。商品身份都没对齐的时候,内容写得再好,机器也不知道你在说哪一件东西。 ## 常见问题解答 ## UPC和GTIN到底是什么关系? UPC是GTIN的一种格式,不是并列的两样东西。GTIN是统称,涵盖UPC、EAN、JAN、ISBN、ITF-14五种,分别对应北美、欧洲、日本、图书和整箱包装。所以Merchant Center里没有UPC字段,只有gtin,手上有UPC直接填进去就是正确做法。 ## 8位的条码能直接填进gtin吗? 要看它是什么。GS1分配的GTIN-8可以直接填,从UPC-A压缩来的UPC-E必须先展开成12位。麻烦的是两者位数一样,系统分不出来。实测200万个UPC-E码,58%直接提交能通过校验位验证,末位是5到9的更是100%全过,一点报错都不会有。所以拿到8位码时,最稳妥的办法是问供应商要包装上那个完整的12位码。 ## identifier_exists填no会不会被拒登? 分两种情况。单纯把它错填成no,官方的处理是发一条警告;但如果Google判定你这个品类的商品本来就该有GTIN,问题会升级成“商品标识码不正确”,后果是拒登,直到补上为止。另外要注意这个字段只收英文值,yes、true、no、false四个,中文的“否”不管用。 ## 手上只有MPN,能填进gtin那一栏吗? 不能。MPN多半带字母和横线,位数也不对,填进去通常直接报invalid value [gtin]。真正麻烦的是万一它恰好是纯数字、位数又正好,校验位有7%的概率侥幸通过,那你就提交了一串属于别人产品的GTIN,性质从信息不全变成了编造标识符。正确做法是填进mpn字段并补上brand,identifier_exists保持缺省的true。代价是缺GTIN会收到“因缺少值而导致效果受限”的提示,商品照常投放但覆盖面打折。 ## Shopify里的GTIN字段在哪,需要建元字段吗? 不用建,原生就有,只是不叫GTIN。它在变体层的库存区块,那一栏写着“条形码Barcode (ISBN, UPC, GTIN, etc.)”,Google与YouTube销售渠道会把它直接映射成feed里的gtin。2026年9月8日Shopify更新过这个字段:一个变体最多能放20个条形码,每个可以指定UPC、EAN、ISBN、GTIN、ASIN等类型,选了类型之后Shopify会按该标准校验格式,CSV里的列名是Variant Barcodes。真正需要建元字段的是mpn,Shopify没有原生字段。 ## 自有品牌没去GS1申请过码,该怎么填? gtin留空,brand和mpn填完整,identifier_exists不要动。填no是错的,因为这个开关的真实含义是条码、厂商零件号、品牌三样都没有,而你至少有品牌。长期看还是建议去GS1申请自己的厂商识别代码,品牌加零件号这套组合只在你自己家的系统里通用,跨渠道对不上。 ## 同一件商品在亚马逊和独立站要用同一个GTIN吗? 要,而且必须是同一个。GTIN由制造商分配,同一件商品在哪里卖都是同一个号,这正是不同零售商的目录能对上的原因。给同一件商品在不同渠道分配不同的码,等于亲手把本该合并的评论、评分、价格信号拆成互不相干的几堆。 ## 结构化数据里的gtin和feed里的对不上会怎样? 比只填一边更糟。只填一边是信息不完整,两边不一致是信息互相矛盾,机器通常的处理方式是两个都不采信,页面和feed的可信度一起下降。所以改任何一边的时候,另一边要同步改。 ## 权威参考资料 ## 站内搜索页搜不到也返回200,两道锁锁的是同一扇门 - URL:https://zhangwenbao.com/site-search-results-page-identity-audit.html - 分类:电商SEO - 发布:2026-08-31 | 更新:2026-08-31 - 摘要:站内搜索页搜不到东西也返回200,标题里还带着用户随手敲进去的任何字符。35个站里,robots.txt和noindex真正配对的只有2个。 - 关键词:电商SEO,抓取预算,站内搜索,索引控制 > **TLDR**:摘要:131个海外品牌站里,35个站的站内搜索结果页被完整探到。搜一个不存在的词,35个站全部返回200,没有一个返回404;页面上白纸黑字写着0 results found的18个站,状态码也是200。有结果页和空结果页的noindex处理34个站完全一致——也就是说,没有一个站区分过“搜到了”和“搜不到”。robots.txt和页面noindex这两道锁,同时用上的19个站其实是同一扇门锁了两遍,真正配对的只有2个。schema.org有个类型叫SearchResultsPage,用它的站是0个。 > 摘要:131个海外品牌站里,35个站的站内搜索结果页被完整探到。搜一个不存在的词,35个站全部返回200,没有一个返回404;页面上白纸黑字写着0 results found的18个站,状态码也是200。有结果页和空结果页的noindex处理34个站完全一致——也就是说,没有一个站区分过“搜到了”和“搜不到”。robots.txt和页面noindex这两道锁,同时用上的19个站其实是同一扇门锁了两遍,真正配对的只有2个。schema.org有个类型叫SearchResultsPage,用它的站是0个。 8月27日OpenAI给ChatGPT的桌面浏览器加了WebMCP支持。Search Engine Journal的报道 (https://www.searchenginejournal.com/chatgpt-adds-webmcp-support/587237/)里的说法是,网页可以把自己能干的事情结构化地暴露出来,让模型直接调用,而不是靠猜页面上哪个按钮能点。 这件事听起来很新,但它想解决的问题很老。 网站上最老的那个“动作”是什么?是搜索。从1990年代末开始,几乎每个站的右上角都挂着一个放大镜。用户敲一个词,站点吐回一页结果。这个动作比购物车早,比登录早,比现在这些花哨的交互都早。 问题是:这个跑了快三十年的动作,它产出的那一页,对机器说过自己是什么吗? 保哥这一轮就是去问这个问题的。答案挺干脆——没说过。 ## 站内搜索页这一类,是怎么被量出来的? 样本还是这一系列在跑的131个海外品牌与电商独立站。每个站的流程是四步: - 打开首页,从DOM里找搜索框,记下表单的提交地址和输入框的字段名; - 用一个大概率有结果的词(shirt)拼出搜索地址,抓一遍; - 用一串一定没结果的乱码(qzxkvw7391)拼出另一个地址,再抓一遍; - 顺手把根目录的robots.txt也拉下来。 两页都记录状态码、响应头里的X-Robots-Tag、页面里的meta robots、规范网址、标题、JSON-LD类型,以及渲染完之后页面上还剩多少商品卡片、有没有出现“没找到”这类文案。 131个站里,能在首页HTML里找到搜索入口的只有48个。这个数字本身值得停一下:三分之二的站,搜索框是JavaScript渲染出来的组件,对不执行脚本的抓取方来说,那个放大镜压根不存在。这跟JS渲染那一轮量到的损失面 (https://zhangwenbao.com/js-rendering-loss-three-myths-audit.html)是一致的:丢的往往不是正文,是入口。搜索框是独立站最被低估的高转化入口 (https://zhangwenbao.com/site-search-bar-ux-design-conversion.html),可它在机器眼里的能见度,和它在用户眼里的完全是两回事。 ## 为什么45个探到的样本,最后只留了35个? 这一步是这轮最该讲的一步。 脚本探到45个站有结果页返回。可逐条人工核对地址和标题的时候,发现其中10个根本没到搜索结果页: - article.com、burrow.com、italic.com、peakdesign.com、philips.com、shein.com、traeger.com——这7个站的表单提交地址是空的或者指向#,参数被原封不动挂到了首页上,抓回来的是一份首页; - brompton.com的参数在跳转中被整个丢掉; - everlane.com返回的是反爬挑战页,warbyparker.com直接403。 剔掉这10个,严口径样本是35个站。所有百分比都按这个分母算。这一步是这一系列反复吃过亏之后的规矩 (https://zhangwenbao.com/obsolete-html-tags-platform-fossil-audit.html):新造的判据跑完先人工过一遍,别信脚本第一遍给的分母。 这8个被剔的站(7个参数落在首页,1个参数在跳转里丢了)顺手给了一条额外的发现:给首页挂一个它完全不认识的参数,8个站全部返回200和一份完整页面。example.com/?q=shirt、example.com/?searchTerm=shirt、example.com/?header-search=shirt——参数随便编,页面照发。唯一在拦这件事的是规范网址:这8个站的canonical全都指向不带参数的首页。这一层要是也没写,一个首页就能被参数繁殖出无数份。 ## 搜到东西的那一页,对机器说了什么? 35个站,有结果的搜索页: 声明 | 站数 | 占比 | 状态码200 | 35 | 100.0% | meta robots里写了noindex | 9 | 25.7% | 响应头X-Robots-Tag里写了noindex | 15 | 42.9% | 两处任一有noindex | 21 | 60.0% | 写了规范网址 | 31 | 88.6% | 有任意JSON-LD | 20 | 57.1% | 声明自己是SearchResultsPage | 0 | 0.0% | 最后一行是这轮最干脆的一个数字。schema.org里有SearchResultsPage这个类型 (https://schema.org/SearchResultsPage),2015年就有了。57.1%的搜索结果页发了结构化数据,发的是Organization、WebSite、SearchAction这些“我们是谁”的东西。没有一页说过“这一页是一批搜索结果”。 这跟上一轮量到的类目页只有三分之一说清自己是什么 (https://zhangwenbao.com/ecommerce-page-type-declaration-audit.html)是同一条线上的事,而且更极端一档:类目页至少还有33.3%说了,搜索结果页是0。 原因不难理解。产品页写Product有富媒体回报,类目页写ItemList偶尔有,搜索结果页写SearchResultsPage一分钱回报都没有——它本来就不该进搜索结果。没有回报的声明,没人写。 但这里有个逻辑上的拧巴:正因为这类页面不该被索引,它才更需要说清自己是什么。一页没有身份声明、又返回200的内容,机器只能按普通网页对待。 ## 搜不到东西,页面为什么还说自己是200? 把那串乱码喂进去,34个站的空结果页抓到了。 结果是一条直线: - 返回200的:34个,100.0% - 返回404的:0个 - 页面上明确写着“没找到”的:18个,52.9% - 这18个里,状态码仍是200的:18个,100.0% 页面正文说“0 results found”,HTTP层说“200 OK,内容在这儿”。这两句话在同一次响应里,方向相反。 打个比方,这就像客服接起电话跟顾客说“您要的这款我们没有”,挂了之后在工单系统里把这通电话标成了处理成功。顾客那边信息是准的,系统这边记录是错的,而看报表的人只看得到系统。 这就是软404的标准形态 (https://zhangwenbao.com/google-404-crawl-seo-positive-signal.html)——内容层承认没有,协议层坚持有。搜索引擎对这类页面有一套自己的识别逻辑,识别出来之后会当404处理,但那是在抓完、渲染完、判断完之后。这中间的抓取成本已经花掉了。要判断自己站上有多少这种页面,得从收录异常那一头倒着查 (https://zhangwenbao.com/google-not-indexed-fix-playbook.html)。 还有一半更微妙。34个空结果页里,18个(52.9%)在“搜不到”的同时,页面上还铺着三个以上的商品卡片——热门推荐、你可能喜欢、大家都在买。从留客的角度这是对的 (https://zhangwenbao.com/site-search-bar-ux-design-conversion.html),甩个空白页给用户等于把人赶走。可从机器的角度,这一页有商品、有价格、有链接、返回200,它看起来跟一个正常的类目页没有区别。 换句话说:为了留住人做的那件事,恰好抹掉了机器判断这一页是空的唯一线索。 ## 有结果和没结果,站点区分过吗? 34个站两页都探到,逐项对比: 对比项 | 一致的站数 | 占比 | noindex处理完全相同 | 34 | 100.0% | 状态码相同 | 34 | 100.0% | 标题一字不差 | 19 | 55.9% | 规范网址指向同一个地址 | 15 | 44.1% | 头两行是100%。34个站,没有一个在技术声明上区分过“搜到了”和“搜不到”。 这不是疏忽,是结构决定的。这些声明写在模板层:一份搜索结果页模板,输出的时候不管命中几条,那几行meta都长一个样。要区分,得让模板知道结果数,再据此改状态码或者改robots指令——这是应用层的事,不是模板层的事,绝大多数平台默认不给这个口子。 标题那一行倒是分开了,55.9%的站两页标题不同。分开的方式很有意思,下面单说。 ## 那14个把乱码原样写进标题的站,是怎么回事? 32个空结果页有标题,其中14个(43.8%)把qzxkvw7391这串乱码原样写进了title: Search: 0 results found for "qzxkvw7391" Search: 0 results found for "qzxkvw7391" – Decathlon Search results: 0 results for "qzxkvw7391" – OLIPOP Suchergebnisse für "qzxkvw7391" 13个是同一句英文模板,标点和短横线的样式都一致,一眼能看出是同一个平台的默认写法。第14个是德语站,句式换了,逻辑一模一样。 这句话本身写得没毛病,用户看着很清楚。问题在于它意味着什么:标题是用户输入的函数。任何人往地址栏里塞任何字符串,都能得到一个标题独一无二的页面,返回200,带完整导航和页脚,还带一批推荐商品。 这就是那个老问题的现代版本。搜索引擎很早就描述过“无限空间”这件事:一个能按参数无限生成页面的入口,会把抓取资源耗在没有价值的组合上。抓取预算的优化清单 (https://zhangwenbao.com/google-crawl-frequency-optimization-guide-2026.html)里排在前面的几条,讲的都是怎么关掉这类入口。 而这类页面被外部链接指到的情况并不罕见:论坛里有人贴了一条搜索链接,比价站抓走了一批带参数的地址,广告落地页带着追踪参数被人复制转发。这些链接一旦被爬到,就是一个个带独立标题的200页面。 ## robots.txt和noindex这两道锁,为什么锁的是同一扇门? 这是本轮数据里最值得说的一组。 把robots.txt里有没有挡住搜索路径,和页面上有没有noindex,交叉起来看,35个站落在四个格子里: 组合 | 站数 | 占比 | 实际效果 | robots挡了 + 页面也写了noindex | 19 | 54.3% | 第二道锁读不到 | robots挡了 + 页面没写noindex | 7 | 20.0% | 不抓,但可能凭外链收录 | robots没挡 + 页面写了noindex | 2 | 5.7% | 唯一真正生效的组合 | 两样都没有 | 7 | 20.0% | 完全敞开 | 第一行占了一半以上,而且这一半恰恰是做得最认真的那批人——两道防线都上了。 可这两道防线不能叠加。Google关于阻止索引的文档 (https://developers.google.com/search/docs/crawling-indexing/block-indexing)里写得很清楚:noindex要生效,前提是这一页能被抓到。robots.txt把这一页挡在门外,爬虫就永远读不到页面里那行noindex。 结果是:你以为上了两把锁,实际上第二把锁被第一把锁在了门里。 更麻烦的是,这两种做法防的不是同一件事。robots.txt管的是爬虫能不能来读这一页 (https://developers.google.com/search/docs/crawling-indexing/robots/intro),noindex管的是这一页能不能进结果。一个已被收录的页面加noindex之后要多久才从结果里消失 (https://zhangwenbao.com/when-does-noindex-page-remove-from-google-search-results.html),本身就是个需要抓取才能推进的过程;robots.txt挡住之后,这个过程直接停摆——旧的索引条目留在那儿,新的noindex指令永远送不到。 只有2个站落在了正确的那个格子里:不挡抓取,让爬虫进来读到noindex,然后把这一页从索引里剔掉。站内搜索URL到底该不该写Disallow (https://zhangwenbao.com/should-search-page-urls-be-disallowed-in-robots-txt.html)这个问题,多数人凭直觉选了Disallow,而直觉在这件事上刚好选反。 顺便说一句样本外的数字:130个能拿到robots.txt的站里,40.8%挡了搜索类路径,55.4%写了Disallow: /*?这种一刀切的参数规则。后者的杀伤面比多数人以为的大得多——它会把所有带问号的地址一起挡掉,包括分页 (https://zhangwenbao.com/category-pagination-seo.html)、包括筛选 (https://zhangwenbao.com/filter-generated-pages-robots-txt-disallow.html)、包括带追踪参数的正常落地页 (https://zhangwenbao.com/robots-txt-disallow-utm.html)。 ## 规范网址是唯一在认真干活的那一层吗? 四层声明里,规范网址的覆盖率最高:88.6%的搜索结果页写了。但它写的内容有点出人意料。 规范网址指向 | 站数 | 指向自己(带搜索词) | 5 | 指向首页 | 1 | 指向别处 | 25 | 其中把查询参数整个去掉的 | 12 | 没写 | 4 | 12个站的规范网址指向不带任何搜索词的/search。这意味着搜shirt、搜shoes、搜那串乱码,三页的规范网址是同一个地址。按规范网址的合并逻辑 (https://zhangwenbao.com/google-canonical-url-selection-logic.html),这三页会被当成同一页的不同版本,最终只有一份进索引。 从治理角度这是聪明的:一行配置就把无限空间收成了一个点。从数据角度它有代价——Search Console里所有搜索词的表现会被合并到一个地址上,你再也看不出用户搜了什么。 还有一个值得记下来的:joolz.com的规范网址是…/search?cgid=undefined。undefined这个词被拼进了规范网址里。某个变量没取到值,模板照拼不误,于是全站所有搜索结果页的规范网址都指向同一个语法上合法、语义上没有意义的地址。这种错误不报警、不掉排名、也不会有任何工具提醒你——它跟同一页写两条meta各说各话 (https://zhangwenbao.com/duplicate-meta-tag-first-declaration-wins-audit.html)属于同一族:语法过关,语义失效。 ## 代理时代要来了,这一类页面为什么突然重要了? 回到开头那件事。 过去搜索结果页在SEO里的位置很清楚:一类不该被索引的垃圾页,关掉就行。这个判断在“机器只是来抓内容”的年代是对的。 但WebMCP这类东西改变的是机器和网站的关系。模型不再只是读你的页面,它要在你的站里执行动作——搜一个词,看一批结果,选一个,进详情,加购。上一轮量过AI代理能不能在电商站里完成四个基本动作 (https://zhangwenbao.com/agent-actionability-html-audit.html),83个站里只有1个全通。搜索是那四个动作里最基础的一个。 这时候搜索结果页的身份就有了新意义。它不需要进索引,但它需要能被理解:这一页是不是一批结果,有几条,每条对应什么商品,搜不到的时候机器怎么知道自己搜空了。 目前的答案是:机器无从知道。返回200,页面上有商品卡片,标题里有搜索词,一切看起来都像搜到了。唯一能说明搜空了的信号,是页面上那行给人看的英文句子。 这里面有个很实际的分野。索引和理解,从此是两件事:你可以既不想让这一页进搜索结果,又希望机器能读懂它。过去这两件事捆在一起,用一个noindex就解决了;现在得分开处理。 ## 这一类页面到底该怎么配? 先说一个例外,不然下面的结论会用错地方。有一小类站,站内搜索页本身就是有价值的着陆页——商品品类极多、用户搜的词本身就是成型的长尾需求,把高频搜索词的结果页转成正经类目页,是很成熟的做法。属于这一类的站,下面几条要反着读:那些词的结果页不该加noindex,该当类目页认真做内容和标题。 但这条例外的适用面比多数人以为的窄。它成立的前提是你拿得出一份名单,说清楚哪几十个词值得留、剩下的一律不留。拿不出名单就一律留着,那不叫策略,那叫没管。 下面按这轮量到的问题,从最该动的排起。 ## 先把两道锁拆开,只留一道 如果你现在既在robots.txt里挡了搜索路径,又在页面上写了noindex,选一个。推荐的是后者:从robots.txt里去掉搜索路径的Disallow,保留页面上的noindex。 代价是爬虫会来抓这些页面,消耗一点抓取额度。收益是noindex真正生效,已经进了索引的旧条目会被清掉。等索引清干净了,再考虑要不要加回Disallow——但那时候多半也没必要了。 如果你的站抓取额度确实紧张,且搜索页从来没被收录过,那保留Disallow、去掉noindex也行。别两个一起上,那是自欺欺人。 ## 让空结果页说实话 搜不到东西的时候,最规矩的做法是返回404。但这会伤用户体验,多数团队不会接受。 折中方案有两个。一是保持200,但在页面上给机器一个明确信号——把结果数写进结构化数据,条数为0的时候机器就知道了。二是把空结果页和有结果页拆成两套模板,空的那套加noindex,有结果的那套按索引策略处理。第二种改动更小,效果也更直接。 不管选哪种,别在空结果页上铺满推荐商品还返回200。要推荐可以推荐,但得让机器知道这些卡片跟这次搜索无关。 ## 把搜索词从标题里拿掉,或者收窄 标题里带用户输入,等于把标题的控制权交给了任何一个能编辑地址栏的人。稳妥的做法是给搜索词加长度和字符集限制:超过一定长度、含有非预期字符、或者结果数为0的时候,标题回落成一个固定值。 这一条改起来最快,五分钟的模板改动,直接掐掉整条无限生成的链路。 ## 规范网址想清楚再指 指向不带词的/search是最省事的做法,35个站里12个这么干。但这等于放弃了搜索词的数据。 如果你的站内搜索词是重要的需求来源,更好的做法是让规范网址指向自己,同时靠noindex控制索引。这样Search Console里能看到每个词的抓取情况,索引这一层由noindex管。规范网址和noindex是两件事 (https://zhangwenbao.com/canonical-url-seo-guide.html),不要用一个去代替另一个:前者按合并重复网址的规则 (https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)决定收哪一版,后者决定收不收。 ## 顺手补一句身份声明 在搜索结果页的JSON-LD里加一段SearchResultsPage,成本是几行代码。它现在没有任何富媒体回报,短期内也不会有。但它把“这一页是什么”这件事说清楚了,而这件事在代理时代的价值会比在索引时代高。 顺带把结果数也写进去。这一条比什么都直接:"numberOfItems": 0比页面上那句英文可靠得多。 ## 先查一遍自己站 最小成本的自查是三步:搜一个真词,搜一串乱码,然后各看一遍状态码、meta robots、X-Robots-Tag、规范网址。再打开robots.txt看有没有挡住这条路径。四样凑齐,问题在哪一眼就出来了。 要看历史情况,得从服务器日志里查爬虫到底抓了多少搜索地址 (https://zhangwenbao.com/log-analyzer-crawl-budget-googlebot-guide.html)。这个数字往往比想象的大——尤其是robots.txt里写了Disallow、以为已经挡住了的那些站。 ## 这套查法还能用在哪儿? 站内搜索只是这类页面里最典型的一个。同样的四层对账,能套到几个地方。 筛选后的类目页是最像的一个。用户点了颜色和尺码,网址多了两个参数,页面结构没变。它跟搜索结果页共享同一套问题:能被无限组合、内容重复、状态码永远200。区别是筛选页往往有真实的搜索需求,分面导航的治理要在放和挡之间做取舍 (https://zhangwenbao.com/faceted-navigation-seo-crawl-budget-index-control.html),不能一刀切。 购物车、结账页、账户页是另一类。它们同样不该进索引,但处境跟搜索页不太一样——这几类页面牵涉隐私和交易,通常有专人盯着。电商站该屏蔽哪几类页面 (https://zhangwenbao.com/page-types-to-block-in-robots-txt-for-ecommerce.html)那份清单里它们排在最前,搜索页往往排在最后。这一轮没有专门测这几类页面,所以只说到这儿。 比价和排序参数是第三类。?sort=price_asc这种地址产生的页面,内容跟原页面一模一样,只是顺序不同。这类最适合用规范网址收,不适合用noindex。 还有一类容易被忘掉:站点自己的404页面。它有没有真的返回404?这件事跟空结果页是同一个毛病的两种表现,自定义错误页配错状态码 (https://zhangwenbao.com/apache-errordocument-custom-error-pages-http-status-codes-soft-404.html)是相当常见的一个坑。 站内搜索页的尴尬在于,它是站里唯一一类由用户写内容、由模板发身份、然后没有人审的页面。三十年来它一直这么跑着,因为它从来不出错——返回200,页面完整,用户满意,报表上什么异常都没有。只有换成机器的视角看一遍,才发现它对机器一句实话都没说过。 ## 常见问题解答 ## 站内搜索页到底该不该让搜索引擎抓 让抓,别让索引。这是这轮数据支持的结论,也是Google文档的逻辑推出来的结论:noindex要生效必须先被抓到。如果你的抓取额度极度紧张,且这些页面从来没进过索引,用robots.txt挡也可以,但那时候就别再写noindex了,写了也没用。 ## 空结果页返回404,会不会伤用户体验 会,所以多数站不这么做,这轮35个站里一个都没有。更实际的方案是保持200但拆模板:空结果那套模板加noindex,同时把结果数写进结构化数据。用户看到的还是一个友好的页面,机器拿到的是明确的信号。 ## 规范网址指向不带词的搜索页,算不算错 不算错,是一种取舍。好处是把无限空间收成一个点,坏处是丢掉了搜索词维度的数据。如果站内搜索词对你的选品和内容规划有价值,就别这么做;如果只是想尽快止血,这是最快的一招。 ## 为什么要写SearchResultsPage,它又没有富媒体展示 短期确实没有回报。写它的理由是把页面身份说清楚,让机器不必靠猜。这轮35个站一个都没写,说明这件事目前完全是自选动作。判断标准很简单:如果你在意AI代理和生成式搜索怎么理解你的站,就值得写;如果只在意传统搜索排名,可以先放着。 ## 标题里带搜索词,会被当成关键词堆砌吗 不会。它的问题不是堆砌,是可以被外部无限操纵。真实风险有两个:一是任何人都能造出一个带自定义标题的页面挂在你的域名下,二是这些页面被外链指到之后会消耗抓取资源。给搜索词加长度和字符限制就能解决。 ## 我的搜索框是JS渲染的,会影响SEO吗 搜索框本身不影响,它不是内容。真正的影响是抓取方发现不了这个入口,从而发现不了搜索结果页——从减少无效抓取的角度看,这反而是件好事。但如果你希望AI代理能用你的站内搜索,那就得让这个入口在HTML里可见,或者用WebMCP这类机制显式声明出来。 ## 这轮为什么只有35个站的数据 131个站里,能在服务端HTML找到搜索入口的48个,实际探到结果页的45个,人工核对后剔掉10个没真正到达搜索页的,剩35个。剔除的主要原因是表单提交地址为空,参数被挂到了首页上。这一步不做,数据里会混进一批首页,所有比例都会跑偏。 ## 权威参考资料 ## 结构化数据实测66个站:产品页都写了,类目页只有三分之一 - URL:https://zhangwenbao.com/ecommerce-page-type-declaration-audit.html - 分类:电商SEO - 发布:2026-08-30 | 更新:2026-08-30 - 摘要:AI代理打开你的类目页,怎么判断这是一个能往下钻的列表,还是一个能直接下单的详情页?多数电商站没有给出这个答案。 - 关键词:结构化数据,电商SEO,AI代理,页面类型 > **TLDR**:摘要:131个海外品牌站,用真实浏览器把首页、类目页、产品页各抓一遍,66个站三种页面齐全。给人看的那几行分辨率很高——三种页面的标题无一重复,规范网址无一重复。可轮到机器要判断“这一页是什么”,产品页有Product类型的占93.9%,类目页有列表类型的只有33.3%。剩下那44个类目页里,16个页面上唯一的列表是面包屑,12个连一段结构化数据都没有。三种页面全都说清了自己是谁的站,58个严口径样本里只有15个。 > 摘要:131个海外品牌站,用真实浏览器把首页、类目页、产品页各抓一遍,66个站三种页面齐全。给人看的那几行分辨率很高——三种页面的标题无一重复,规范网址无一重复。可轮到机器要判断“这一页是什么”,产品页有Product类型的占93.9%,类目页有列表类型的只有33.3%。剩下那44个类目页里,16个页面上唯一的列表是面包屑,12个连一段结构化数据都没有。三种页面全都说清了自己是谁的站,58个严口径样本里只有15个。 先做个小测试。下面三个网址,你不打开页面,只看地址,能判断出各是什么页吗? bellroy.com/products/category/outlet babybjorn.com/products/baby-carriers/ untuckit.com/collections/new-arrivals/products/morningside 第一个路径里写着products,其实是个折扣专区的列表页。第二个也写着products,是背带的品类页。第三个路径里写着collections,反倒是一个实实在在的商品详情页。 这三条不是我挑出来为难人的,是这一轮实测里脚本自己撞上的。用网址模式挑页面,70组里挑错了4组——而这恰恰是本文要讲的那件事:网址不是身份声明。它长什么样,取决于当年谁定的路由规则。 人不看网址,看页面。屏幕上摆着一排商品卡片,一眼就知道这是列表页;摆着一个大图加一个加购按钮,那就是详情页。这个判断快到你意识不到自己在判断。 但机器没有这个眼力。它得从字节里找线索。这一轮就是想量清楚:三种页面并排放着,究竟有多少东西能让机器把它们区分开。 ## 三种页面各抓一遍,样本是怎么来的? 样本沿用这一系列一直在跑的131个海外品牌与电商独立站,覆盖服饰、家居、户外、3C、美妆、食品饮料几大类,绝大多数是有独立品牌的中大型站。这个分母要先说清楚:Web Almanac 2024统计过全网只有0.77%的页面带Product结构化数据 (https://almanac.httparchive.org/en/2024/structured-data),那是把所有网页放一起算的;本文的样本全是电商站的商品页,两个数字不矛盾,分母压根不是一回事。 抓取方式是真实浏览器(Chromium),带常见的桌面浏览器身份,每个站按同一套流程走三步: - 打开首页,等页面渲染完; - 从首页链接里挑一个类目页,打开; - 再挑一个商品详情页,打开。 每一页都存两份:服务器直接吐出来的那份HTML,和浏览器执行完脚本之后的那份DOM。两份都解析,取并集——也就是说,只要结构化数据是在渲染后才出现的,也算它有。这一点很重要,不然会把一批用前端框架的站冤枉掉。 131个站里,128个拿到了首页;三种页面全部拿到的有70个。拿不齐的原因基本都是首页链接结构特殊,脚本按路径规则没挑出合适的候选,跟站本身好坏无关。 两份分开存这一步没白做。后面要用到的那几个身份声明,服务端就有和渲染后才有,差着几个百分点:产品页的Product声明服务端有60个站,渲染后61个;类目页的列表声明服务端19个,渲染后22个。差值不大,但方向一致——正文整段要等脚本跑完才出现的空壳页 (https://zhangwenbao.com/html-shell-page-readable-text-audit.html)确实存在,只是在结构化数据这一层没那么普遍。有个站还反过来:服务端那份里有Product,渲染完反而没了,多半是前端把整段节点重写掉了。 然后是人工那一步。70组网址我逐条看过一遍,剔掉了4个挑错页面的站,主口径落在66个站。另外单独标出了8个站的“产品页”其实是礼品卡——它是商品,但没有尺寸重量这些属性,很多站不给它发结构化数据,放在一起会稀释结论。严口径的58个站会在后面单独出现一次。 ## 给人看的那几行,三种页面写得一样吗? 先看好消息,而且是相当出乎意料的好消息。 做技术审计的人,脑子里大多有个刻板印象:内页没人管,标题是模板拼的,描述干脆空着。这一轮的数据不支持这个印象。 字段 | 三种页面都填了的站 | 三条一字不差 | 三条互不相同 | 标题标签 | 67 | 0 | 67 | 规范网址 | 66 | 0 | 66 | 社交分享标题 | 61 | 0 | 61 | 页面描述 | 56 | 2 | 51 | 社交分享描述 | 47 | 0 | 40 | 社交分享图 | 33 | 0 | 18 | 标题、规范网址、分享标题这三样,三种页面之间没有一个站出现重复。规范网址这一栏还能再挑一次刺——三条互不相同只说明它们指向不同的页,指得对不对是另一回事,首页那一轮量下来有23%的站自己跟自己对不上 (https://zhangwenbao.com/canonical-self-declaration-conflict-google-selected.html)。页面描述56个可比站里只有2个三条完全一样(flyingtiger和italic)。文字层的分辨率几乎是满的。 顺带说一句,模板做齐了不等于内容做对了。allbirds的类目页有一行完整的描述标签,只是content写成了空字符串——框架发下去了,填值那步没跟上。这类“标签在、值空着”的情况,跟标签压根不在,是两种病。 再往下走一层,情况就变了。 ## 那机器怎么知道这一页是列表还是详情? 屏幕上那排商品卡片,在字节里是几十个div。机器要判断“这是个列表页”,最直接的依据是页面自己声明:我是一个CollectionPage,里面有一个ItemList,成员是这些商品。schema.org给ItemList的定义 (https://schema.org/ItemList)很朴素——一组有序的条目,配上itemListElement和numberOfItems两个字段,就够机器把这一页认出来了。 66个站的三种页面,各查一项最该有的身份声明: 页面 | 该有的声明 | 有的站 | 占比 | 首页 | WebSite或Organization | 55 | 83.3% | 类目页 | ItemList或CollectionPage | 22 | 33.3% | 产品页 | Product | 62 | 93.9% | 产品页93.9%,类目页33.3%。这不是一点差距,是接近三倍。 把礼品卡那8个站也剔掉,只留下有真实商品属性的58个站,差距只会更大:产品页94.8%,类目页29.3%。 再换个角度数。这58个站里,三种页面全都说清了自己是什么的,只有15个(25.9%);说清两种的34个;只说清一种的8个;一种都没说清的1个。四分之三的站,页面身份这件事上是缺一块的,而缺的那块几乎总是同一块。 ## 为什么产品页做到了94%,类目页只有33%? 这个问题的答案,比“大家偷懒”要有意思得多。 顺便说一句,这两类页面的结构化数据经常不是同一个人在维护。主题输出一套、SEO插件再输出一套,最后在head里撞成一团 (https://zhangwenbao.com/cms-seo-plugin-theme-tag-conflict-duplicate-canonical-title-og-schema-cleanup.html)是很常见的局面,而撞车最多的恰恰是产品页——因为那一层大家都在抢着写。 产品页的结构化数据是有直接回报的。写了Product和offers,搜索结果里就可能带上价格、库存、评分那几行。这个回报十几年来一直存在,一直被工具检测,一直被建站平台写进默认模板。同一批样本里,产品页带offers的比例是92.9%,带评分的57.1%——这些字段的分布,跟Google富媒体结果需要什么,几乎是同一张形状。 类目页没有这个回报。很长一段时间里,把类目页标成CollectionPage,搜索结果不会因此多出任何东西。没有可见回报的事,默认模板就不做;模板不做,绝大多数商家也不会自己补。 这里有个更早的证据可以对照。上一轮量产品页规格的时候发现过一件事:64个有Product结构化数据的产品页,写了价格的64个一个不落,写了规格属性的只有7个 (https://zhangwenbao.com/product-spec-field-value-pairing-audit.html)。同一批人、同一套模板、同一个页面,差别只在于哪个字段能换来搜索结果里的一行显示。 行业是被富媒体结果牵着走的。牵到哪,就写到哪。这句话在字段层成立,在页面类型层同样成立。 ## 那44个没说清自己是列表的类目页,页面上都写了什么? “没有ItemList”不等于“没有结构化数据”。把66个站的类目页按有什么分成四类: 类目页的形态 | 站数 | 占比 | 有ItemList或CollectionPage | 22 | 33.3% | 没有列表类型,但有面包屑 | 16 | 24.2% | 有别的结构化数据,列表和面包屑都没有 | 16 | 24.2% | 完全没有结构化数据 | 12 | 18.2% | 中间那两类加起来48.5%,占了将近一半。这些页面不是空白——它们有Organization,有WebSite,有搜索动作声明,有联系方式,甚至有客服电话和邮寄地址。关于“我们是谁”,写得很齐;关于“你现在看的这一页是什么”,一个字没有。 把70个类目页的结构化数据类型统计一遍,排在最前面的是ListItem,出现38次。乍一看挺好,列表项都有了。但再看第三名是BreadcrumbList,32次——ListItem大部分是面包屑的成员项。 也就是说,类目页上出现最多的那种“列表”,描述的是你在网站的哪一层,不是这一页有哪些商品。 再往下,ItemList只有20次,CollectionPage 17次。Organization倒是有34次。 这个排序本身就能说明问题。面包屑在搜索结果里能显示成路径,所以做的人多;ItemList在过去很多年里不显示,所以做的人少。跟上一节是同一个机制。 ## aloyoga:三种页面发的是同一份声明 有个站值得单独拎出来。aloyoga的首页、类目页、产品页,结构化数据的类型集合完全一样,一个字不差:Organization、WebSite、SearchAction、SoftwareApplication、AggregateRating、Offer。 包括产品页——它的产品页里没有Product。一个卖瑜伽服的站,全站每一页都在庄严声明自己是个软件应用,而且评分不低。 顺着看下去还挺有意思:那个SoftwareApplication加AggregateRating,跟一个服装品牌的商品毫无关系,多半是某个评分类应用注入的模板。第三方脚本往页面里塞东西这件事,只看HTML基本看不出来 (https://zhangwenbao.com/third-party-domain-dependency-invisible-in-html-audit.html),等它塞完,你的结构化数据里就多了一段不属于你的类型。整套东西就这么挂在全站每一页上,不管你打开的是首页还是一双鞋。 这是“身份声明”最极端的形态:它给每一页都发了一份“我们是谁”,却没有一页说清“这一页是什么”。全站一致,一致得毫无信息量。 ## 用网址判断页面类型,我自己就判错了4次 说回开头那三条网址。 脚本挑页面用的是路径规则:路径里有 /products/、/p/、/item/ 的当详情页,有 /collections/、/category/、/shop/ 的当列表页。这是所有爬虫、所有审计工具、所有做站内分析的人都在用的办法。 70组里错了4组: - bellroy的 /products/category/outlet,路径里有products,实际是折扣列表页; - babybjorn的 /products/baby-carriers/,同样是列表页; - lookfantastic的 /c/info/delivery/,路径里有 /c/,实际是配送说明页; - madewell的 /c/inspo/,是内容专题页。 错误率5.7%。听着不高,但请注意,这是一个人拿着70条网址逐条看过之后才发现的。如果没有这一步,产品页那一栏的数字会被两个类目页拉低,我会得出一个偏低的结论,而且完全不知道自己错在哪。 顺带一提,那8个礼品卡也是这么发现的——脚本挑中的“产品页”是礼品卡,8个里只有7个有Product声明,比正常商品页低。这个数太小不足以下结论,但足以说明分层的必要。 这件事本身就是本文的论据。连人带脚本,靠网址判断页面类型都会错;AI爬虫扫过来的时候,它凭什么判对? 做审计时按页面模板抽样是对的,几万行网址落到代码上其实只有几十个模板 (https://zhangwenbao.com/ecommerce-seo-audit-template-level-sampling.html)。但模板的边界在哪,得由页面自己说,不能靠网址猜。 ## 除了结构化数据,还有别的线索能用吗? 结构化数据不是唯一一条线索。页面上还有两样东西经常被当成页面类型的依据:社交分享标签里的类型字段,和H1。这两样都便宜,都好写,问题是它们靠不靠得住。 ## 社交分享那一层,能不能顺便把身份补上? og:type这个字段,本来就是干这个的:网页类型。它比结构化数据简单得多,一行搞定,Open Graph协议原文 (https://ogp.me/)里给的标准取值也就那么几个。 66个站的实际填法: - 首页:website 49个,没写20个; - 类目页:website 38个,product.group 13个,没写18个; - 产品页:product 46个,website 8个,没写16个。 有意思的是最后那一列:三种页面的og:type完全一样的站有22个,占31.4%——首页写website,类目页写website,产品页还是website。这个字段等于没填。 类目页那13个product.group值得注意,它不是Open Graph的标准取值,是电商站自己扩的。这至少说明有人认真想过“这一页是什么”这件事。 不过话说回来,og:type的读者主要是社交平台的抓取器,搜索引擎和AI爬虫基本不拿它当页面类型的依据。它可以顺手写对,但指望它承担身份声明,不现实。真正管用的还是结构化数据。这两层怎么分工,首页那六个自我介绍字段各归各的读者 (https://zhangwenbao.com/self-description-copies-title-og-h1-schema-audit.html)那篇已经拆过一遍。 ## 三种页面的H1,是不是也各是各的? H1是另一条常被当成页面身份的线索。理论上它该回答“这一页讲什么”,跟页面类型天然相关。 66个站的渲染后DOM,按三种页面数H1个数: - 三种页面都恰好一个H1的,20个站,30.3%; - 首页一个H1都没有的,15个站; - 至少有一页H1超过一个的,30个站; - 最夸张的是beistravel的类目页,25个H1——每张商品卡片的标题都用了H1。 三种页面H1个数完全一样的只有21个站。也就是说,同一个站的三种页面,H1的用法本来就不统一,拿它当页面类型的判据是靠不住的。 这跟之前量过的另一件事是配套的:屏幕上最大那行字,四成多的电商首页里根本不是H1 (https://zhangwenbao.com/visual-hierarchy-vs-heading-tags-audit.html)。标题标签在实际站点上早就不承担“这一页是什么”的职责了,它更多是个排版遗留。指望机器从H1推断页面类型,跟指望它从网址推断,性质是一样的。 ## 换个建站平台,这件事会自动解决吗? 把66个站按建站平台分组,能看出默认值起了多大作用。平台判定是单独跑的一轮:抓首页源码,找cdn.shopify.com、myshopify.com、Shopify.theme、shopify-section、window.Shopify这几个确凿特征,命中才算。 三种页面齐全的样本里,Shopify站50个,非Shopify站11个,还有几个因为限流没判出来。11这个数太小,下面的对比只能当方向,不能当结论。 项目 | Shopify(50) | 非Shopify(11) | 首页有WebSite或Organization | 84.0% | 72.7% | 类目页有列表类型 | 40.0% | 18.2% | 产品页有Product | 96.0% | 72.7% | 产品页有offers | 98.0% | 72.7% | 方向很清楚:站在一个成熟平台的默认值上,产品页这块基本白送。96%这个数不是50个商家各自努力的结果,是主题模板里本来就写好的。 但类目页那一栏,Shopify也只有40%。默认模板把有回报的那件事做了,没回报的那件事同样没做。 这就是默认值这件事一直以来的形状:它替你做的那部分,做得比你自己做还好;它没替你做的那部分,你多半也不知道它没做。上一轮量AI代理能不能用你的站时,也撞上过同一堵墙——四个动作83个站只有1个全通 (https://zhangwenbao.com/agent-actionability-html-audit.html),通得最多的两项恰好是平台自己实现的搜索和加购。 ## 这件事对AI购物代理意味着什么? 放在几年前,类目页没有ItemList,代价基本为零。搜索引擎有的是办法认出一个列表页——链接密度、卡片重复结构、分页参数,随便哪一条都够用。 现在多了一类读者。AI代理替用户逛店,第一步要判断的就是“我现在在哪一层”:这是个可以往下钻的列表,还是一个可以下单的详情?判断错了,后面全错。 而它的输入条件比搜索引擎苛刻得多。搜索引擎可以对一个域名抓几十万页慢慢学结构,代理往往只有当前这一页,甚至只有这一页的一部分。机器优先的架构要解决的就是这类问题 (https://zhangwenbao.com/machine-first-architecture-ai-agent-website.html)——把人靠眼睛得到的信息,明确写进字节里。 这类判断做不对,后果不止是少一次曝光。给独立站打一份智能体就绪度分 (https://zhangwenbao.com/agent-readiness-scorecard-dtc-ai-shopping-agent.html)的时候会发现,页面类型识别是那张表最靠前的一行,因为它错了后面每一项都白测;代理替用户逛店时品牌是没被看见还是被淘汰 (https://zhangwenbao.com/agentic-commerce-brand-visibility-blindspot.html),很多时候就卡在这一步。 更现实的一点:类目页恰恰是电商站最有价值的那类页面。它对应的是“男士跑鞋”“无线充电器”这种有搜索量、有商业意图的词。集合页在AI购物场景里才是主战场 (https://zhangwenbao.com/shopify-collection-page-geo-ai-shopping.html)这个判断,跟这一轮的数据是对得上的:主战场上有三分之二的页面没有向机器报过身份。 ## 但也别把ItemList想成灵丹妙药 得说句公道话。没有ItemList,页面不会被降权,也不会不被收录。搜索引擎照样能理解你的类目页,这一点Google的文档里说得很清楚:结构化数据是让你有资格获得某些展示形式,不是排名因素。 它的价值在于确定性。有声明,机器不用猜;没声明,机器靠推断,推断就有概率错。三分之二的类目页现在把这件事交给了概率。当读者只有搜索引擎时,这个概率足够高;当读者变成一个只看一页就要做决定的代理时,就不一定了。 ## 类目页的列表声明,怎么写才算数? 先说最容易踩的一个坑:ItemList里的每一项,得给出商品自己的网址。 Google关于轮播富媒体结果的文档 (https://developers.google.com/search/docs/appearance/structured-data/carousel)对这一点有明确要求——列表里的每个ListItem要用url指向对应的详情页,而不是把商品的全部信息塞在列表页里。写成后者,通常拿不到轮播展示,白写。 一个能用的最小结构长这样: { "@context": "https://schema.org", "@type": "CollectionPage", "name": "男士跑鞋", "url": "https://example.com/collections/mens-running", "mainEntity": { "@type": "ItemList", "numberOfItems": 24, "itemListElement": [ { "@type": "ListItem", "position": 1, "url": "https://example.com/products/cloud-6" }, { "@type": "ListItem", "position": 2, "url": "https://example.com/products/cloudrunner-2" } ] } } 几个实操上的注意点: - position要跟页面上的实际顺序一致。翻到第二页时position应该从25开始,不是从1重新数。这条最常被忽略,因为分页模板往往是另一个人写的。 - numberOfItems填当前页的商品数还是整个类目的总数,两种写法都有人用。填当前页更保险,跟页面内容对得上。 - 筛选之后的页面要不要发列表声明,看你的规范网址怎么定。用户连点五个筛选之后自己都忘了选过什么 (https://zhangwenbao.com/shopify-collection-applied-filters-overview-ux.html),机器更是如此。如果筛选页指向未筛选的类目页,那就别在筛选页上另发一份列表,会自相矛盾。电商重复内容的成因地图 (https://zhangwenbao.com/ecommerce-duplicate-content-causes-diagnosis-canonical-strategy.html)里这一类占了不小比重。 - 别和面包屑混为一谈。面包屑那份文档 (https://developers.google.com/search/docs/appearance/structured-data/breadcrumb)说得很清楚,BreadcrumbList描述的是层级位置;商品列表用ItemList,两个都发,各管各的。 - 手写容易漏字段,可以先用结构化数据生成器把13种常见类型的骨架拉出来 (https://zhangwenbao.com/schema-generator-jsonld-13-types-guide.html)再改。 - 发之前过一遍语法。一个尾逗号就能让整页结构化数据失效 (https://zhangwenbao.com/json-ld-validator-syntax-debug-guide.html),这种错误肉眼很难看出来。 ## 怎么查自己站上这三层身份? 不用买工具,三步能查完,比泡一杯咖啡的时间长不了多少。 第一步,选样本。每种页面模板挑一个代表页就够了:首页、一个主类目页、一个筛选后的类目页、一个普通商品页、一个变体商品页、一个礼品卡或虚拟商品页。六个网址,覆盖大部分情况。 第二步,看服务端给的那份。在页面上右键查看源代码(注意不是开发者工具里的Elements面板,那是渲染后的),搜application/ld+json,把每一段的@type记下来。这一步能分清哪些声明是服务端就有的,哪些要等脚本跑完才出现——对AI爬虫来说这个区别很关键,渲染这件事上真正会丢东西的地方跟大家担心的不太一样 (https://zhangwenbao.com/js-rendering-loss-three-myths-audit.html)。 第三步,填一张表。六行,每行三列:这一页是什么类型、它声明了什么类型、两者对不对得上。 页面 | 该声明 | 实际声明 | 结论 | 首页 | WebSite或Organization |   |   | 主类目页 | CollectionPage + ItemList |   |   | 筛选后类目页 | 看规范网址策略 |   |   | 普通商品页 | Product + Offer |   |   | 变体商品页 | ProductGroup或Product |   |   | 礼品卡页 | Product(属性可以少) |   |   | 填完之后,大概率会出现本文那个形状:产品页那行是满的,类目页那行是空的。 保哥给客户做这一步的时候有个习惯,先不看代码,先问一句“你们类目页是谁做的”。答案通常是“主题自带的”。那基本就能猜到结果了——主题自带的那部分做得挺好,主题没带的那部分一片空白。 补起来其实不难。类目页模板里加一段JSON-LD,商品循环里顺手把url收集进itemListElement,多数主题不到二十行代码。难的是先知道它缺着。 如果你用的是Shopify,这件事还要看你手上有什么工具。平台内置、通用工具与专属应用是三层 (https://zhangwenbao.com/shopify-seo-tools-three-layer-selection.html),能改模板的和只能改字段的,处理这件事的成本差好几倍。商品标识符那一层也顺手对一下,GTIN这类字段在几大平台上的写法各不相同 (https://zhangwenbao.com/product-gtin-seo.html)。 ## 回报的账,该重算了 你的三种页面,给人看的那部分各说各的,分辨率很高;给机器看的那部分,只有产品页说清了自己是什么。 不是因为没人在乎类目页,是因为过去很多年里,把类目页说清楚这件事没有回报。现在多了一类只看一页就要做决定的读者,回报的账要重新算了。 ## 常见问题解答 ## 类目页加了ItemList,排名会变好吗 不会直接变好,别指望改完下周看排名。结构化数据决定的是展示资格,比如能不能进商品轮播,不是排名信号。它真正省掉的是机器的推断成本:有声明,这一页是什么当场就定了;没声明,机器靠链接密度和卡片重复度去推,推得对不对看运气。要看效果,盯的应该是Search Console里富媒体结果那几张报表有没有新条目冒出来,而不是盯关键词排名。生效周期通常按周算,取决于重新抓取的频率。 ## 我的类目页有面包屑结构化数据,算不算已经声明了页面类型 不算。面包屑说的是这一页在网站层级里的位置,不是这一页的内容是什么。实测里16个站的类目页正好卡在这个状态——有BreadcrumbList,没有ItemList,占24.2%。两者是互补的:面包屑帮机器理解站点结构,列表声明帮机器理解当前页内容,都发一份才完整,各占各的位置,不冲突。 ## 用JavaScript渲染出来的结构化数据,搜索引擎和AI爬虫认吗 搜索引擎认,因为它会执行脚本再解析;很多AI爬虫不认,因为它们大多只取服务端返回的那份HTML。这一轮的统计取的是两份的并集,所以数字对渲染型的站是宽容的。如果你的读者里有AI爬虫,建议把身份声明这类关键信息放进服务端输出,不要等脚本跑完才注入。查法很简单:右键查看源代码,能搜到就在服务端,搜不到就不在。 ## 产品变体很多的商品页,该发Product还是ProductGroup 有多个变体、每个变体有独立价格或独立网址的,用ProductGroup包住,把各变体作为hasVariant里的Product,字段清单见Google的商品结构化数据文档 (https://developers.google.com/search/docs/appearance/structured-data/product)。实测样本里产品页出现ProductGroup的有33个站,跟Product几乎是并行使用的关系。只有一个规格的普通商品,直接发Product就行,不必强行套ProductGroup。 变体到底该合成一页还是拆成多页,同一商品几十个网址是合还是拆 (https://zhangwenbao.com/product-variant-seo-url-canonical-indexation-strategy.html)那篇给过一套判断顺序:先定网址再定结构化数据,顺序反了会反复返工。关键是别让变体各自发一份互相冲突的声明。 ## 礼品卡、服务类商品这种页面要不要发Product 要发,但属性可以少。实测里8个礼品卡页面有7个发了Product,只是没有尺寸重量这些字段。对机器来说,重要的是“这一页是一个可购买的东西”这个判断,属性齐不齐是第二位的。反过来,如果礼品卡页面什么都不发,代理很可能把它当成一个普通内容页,直接跳过。 ## 类目页翻到第二页第三页,列表声明要不要跟着改 要。ListItem的position应该反映真实位置,第二页从25开始就写25,不要每页都从1数起。另外每一页的列表成员当然也不同,得跟着分页一起生成。分页模板和类目模板经常不是同一个人维护,这是这条最容易掉链子的地方。改完之后随便翻两页对一下position,一分钟能验完。 ## 只有一个类目页没有列表声明,值不值得为它改模板 改模板的收益从来不在一个页面。类目页是模板产物,一个站几十上百个类目页共用同一份模板,改一次全站生效。实测里22个有列表声明的站,几乎都是模板层统一发的,不是一页一页手工加的。所以问题不该是“这一页值不值得”,而是“这个模板值不值得”,后者的答案通常是值得。 ## 权威参考资料 ## 网站页脚署的公司名,116个站里只有11个能查到编号 - URL:https://zhangwenbao.com/footer-legal-entity-name-verifiable-audit.html - 分类:电商SEO - 发布:2026-08-29 | 更新:2026-08-30 - 摘要:Anker官网页脚署的是Fantasia Trading,Rab署的是Equip Outdoor Technologies。机器要判断这个站属于谁,拿到的是一串它对不上号的名字。 - 关键词:电商SEO,页脚公司信息,版权署名,实体识别 > **TLDR**:摘要:116个海外品牌站的首页页脚,79.3%在版权行里署了一个名字。这个名字对得上品牌的占91.3%,剩下8个署的是外人根本认不出的公司——Anker署Fantasia Trading LLC,Rab署Equip Outdoor Technologies UK Ltd,Stanley署PMI WW Brands, LLC。真正的缺口不在这儿:能拿去工商系统查证的编号,116个站里只有11个给了,其中9个是被中国的备案制度硬性要求的。法律不强制的地方,主动写编号的只剩2个。一个名字不是身份,能被查到的那串号码才是。 > 摘要:116个海外品牌站的首页页脚,79.3%在版权行里署了一个名字。这个名字对得上品牌的占91.3%,剩下8个署的是外人根本认不出的公司——Anker署Fantasia Trading LLC,Rab署Equip Outdoor Technologies UK Ltd,Stanley署PMI WW Brands, LLC。真正的缺口不在这儿:能拿去工商系统查证的编号,116个站里只有11个给了,其中9个是被中国的备案制度硬性要求的。法律不强制的地方,主动写编号的只剩2个。一个名字不是身份,能被查到的那串号码才是。 打开anker.com,滑到底,页脚的版权行写着: © Fantasia Trading LLC 2025 品牌叫Anker,域名叫anker.com,商品叫Anker SOLIX、Anker Prime,而这个站在它唯一一处正式署名的位置,写了一个大部分访问者从没听过的名字。 这不是笔误,也不是什么见不得人的事。版权声明本来就该写持有版权的法律实体,这么写完全合规。有意思的是另一面:一个要判断“这个网站属于谁”的程序,在这一行里拿到的是一个它无法与品牌关联起来的字符串。 顺着这个念头,116个站的页脚版权行被逐行读了一遍。 ## 页脚那个名字,到底是谁在署名? 版权声明的标准格式是三段:版权符号、年份、版权所有人的名字。美国版权局的版权声明通函 (https://www.copyright.gov/circs/circ03.pdf)把第三段写作“版权所有人的名字”,可以是个人,可以是公司,也可以是能被普遍识别的简称或别名。 注意它说的是版权所有人,不是品牌。这两者经常不是一回事: - 品牌是拿来卖东西的,越好记越好 - 法律实体是拿来签合同、开发票、承担责任的,通常是一串没人念得出的全称 一家公司完全可以同时拥有十几个品牌,也可以在不同国家用不同的子公司持有同一个品牌。页脚这行字要求填的是后者,而访问者认识的是前者。矛盾从这里开始。 schema.org给这件事准备过解法。Organization类型 (https://schema.org/Organization)里有两个并列的字段:name 放通用名称,legalName 放官方注册的法律名称。设计者早就想到了这两个会不一样,所以给了两个格子。问题是这两个格子有没有人填,以及填的东西跟页脚上那行字对不对得上。 ## 116个站里,有多少在页脚给出了一个名字? 样本沿用这一系列的那批海外品牌与电商独立站,保哥把131个站的首页又走了一遍,116个正常打开,和JS渲染那一轮 (https://zhangwenbao.com/js-rendering-loss-three-myths-audit.html)用的是同一份名单。做法是用真实浏览器打开首页、滚到底触发页脚,抓渲染后的正文文本,找到版权标记之后把紧跟着的那段名字切出来。 切分这一步比想象中麻烦。名字有的在年份前,有的在年份后;有的紧跟版权符号,有的隔着一整句话;有的干脆用 @ 代替 ©。所以自动切完之后又人工过了一遍,改掉了9处切错和归一化误差。比如babybjorn.com的句式是“is the property of BabyBjörn AB”,机器把前半句也当成名字的一部分带了进来;wusthof.com署的WÜSTHOF因为变音符号在归一化时被抹掉,一度被判成对不上。 这种“机器切完人再过一遍”的做法,在这一系列里已经是标配,爬虫名单那一轮 (https://zhangwenbao.com/crawler-ua-list-named-vs-real-visits-audit.html)就是靠人工复核才没把纸面上的令牌当成真流量。最后的分布是这样: 页脚版权行的状态 | 站数 | 占比 | 给出了一个名字 | 92 | 79.3% | 只有年份,没有名字 | 7 | 6.0% | 一行版权声明都没有 | 17 | 14.7% | 中间那7个值得单独看一眼,因为它们是主动写了一行、又什么都没说的。everlane.com写的是 © 2026 ALL RIGHTS RESERVED,hellotushy.com写的是 © 2026 All Rights Reserved,functionofbeauty.com、bollandbranch.com、tentree.com也是同一句。保留一切权利——谁保留?没说。 剩下那17个连版权行都没有的站,页脚被政策链接、社媒图标、支付图标和订阅框塞得满满当当。页脚本该是信任收口的最后一关 (https://zhangwenbao.com/ecommerce-footer-design-trust-conversion.html),实际却常常是最先被挤掉署名的那块地方。把这7个和不写的17个加起来,116个站里有24个(20.7%)在整个首页页脚上没有交出任何一个可以当作署名的名字。 ## 给出的那个名字,认得出这个品牌吗? 92个给了名字的站,把署名和域名主体做归一化之后比对:去掉Inc、LLC、Ltd、GmbH、B.V. 这类法律后缀,去掉标点和空格,转小写,然后看是不是相等或者互相包含。 84个对得上,占91.3%;8个对不上,占8.7%。 站 | 页脚署名 | allbirds.com | AB DNAM LLC | anker.com | Fantasia Trading LLC | ice-watch.com | BEWATCH srl | rab.equipment | Equip Outdoor Technologies UK Ltd | segway.com | 纳恩博(北京)科技有限公司 | stanley1913.com | PMI WW Brands, LLC | sulwhasoo.com | AMOREPACIFIC CORPORATION | theordinary.com | DECIEM Beauty Group Inc | 这八个名字有个共同点:都带着LLC、Ltd、srl、有限公司这类法律后缀,也就是说它们是注册实体的全称,不是对外传播的那个牌子。 它们在页面上露不露面,另做了一次抽查:把这几个站重新打开,数署名里的关键词在整页可见文本里出现几次。结果是从1次到5次不等:allbirds.com的DNAM、rab.equipment的Equip Outdoor、sulwhasoo.com的AMOREPACIFIC都只出现1次,也就是只在版权行那一处;ice-watch.com的BEWATCH和theordinary.com的DECIEM各出现5次,页面别处也提到了。所以“署名认不出品牌”并不等于“这个名字被藏起来了”——有的站确实说了,只是说在了没人会去读的地方。 这次抽查还撞上一件事:segway.com这一回返回的是英文站,页脚署名换成了另一套,中文实体名一次都没出现。同一个域名在不同的访问条件下给出不同的署名,这本身就说明这行字是跟着站点版本走的模板变量,不是一处被认真维护的声明。 8.7%听上去不大,但这个比例的分母只包含“写了名字”的那92个站,而且是在最规范的一批大牌里量出来的。真正值得留意的是错位的方向:八个全都朝同一边偏——署名给的是持股和承担责任的那个实体,不是用户认得的那块牌子。 ## 为什么会在自己的官网上写一个外人不认识的名字? 这不是谁犯了错,是几股力量各自正确地作用之后的结果。 法务那边的诉求很清楚:版权行要写真正持有版权的那个法律实体,写品牌名在权利主张上是有瑕疵的。集团旗下十几个品牌共用一套页脚模板时,最省事也最安全的做法就是全部署母公司。品牌方那边不会反对,因为这行字在设计评审里排不上号。它字号最小、位置最低、点击率接近零。 于是就出现了这么个局面:全站唯一一处需要法律严谨性的文案,落在了全站最没人看的位置上,由一个跟品牌传播完全脱节的部门决定内容。 再叠上一层:这行字通常写在全局模板里,一次配置管所有页面、所有语言、所有地区站点。一个品牌被集团收购之后,改的是营业执照,不是模板;模板要等到下一次改版才可能被顺手更新,而改版的需求清单里从来没有“页脚版权行的公司名”这一项。 把这8个署名摆在一起看,错位的来源大致分三种,对应的处理办法完全不同: - 控股方署名。品牌被更大的集团持有,页脚直接署集团。这种最常见也最好办,页脚补一句“某某品牌隶属于某某集团”,关系就说清了。 - 属地实体署名。跨国品牌在某个市场设了独立公司,本地站的页脚署的是这家本地公司。麻烦在于同一个品牌在不同国家会署不同的名字,机器如果不做归并,读到的就是几个互不相干的组织。 - 注册名与商用名从一开始就不一样。中间没有收购也没有重组,纯粹是当年注册公司时用的名称和后来打出去的牌子不是一个。这种最容易被忽略,因为公司内部所有人都知道这两个名字指同一家,只有外面的人不知道。 第二种在这一轮里撞上过一次:同一个域名在不同的访问条件下返回不同的地区站,页脚署名跟着换。对一个按域名归并实体的系统来说,它先后读到两个不同的公司名,而页面上没有任何字段告诉它这两个是一回事。 顺带一提,这行字上另一个数字也有同样的毛病。同一批站的页脚年份实测 (https://zhangwenbao.com/footer-copyright-year-client-clock-audit.html)里,19%的站直接用浏览器时钟现算年份——把系统时间调到2031年,那行字当场变成 © 2031。名字和年份,版权声明的三要素里有两个都在自动漂移。 ## 一个名字,够不够让机器把你认出来? 不够,原因很实在:名字不唯一。 “Apple Inc.”这种级别的名字可以直接定位,但绝大多数公司名不行。各国的商业登记系统各管各的,重名在跨境范围内既常见又完全合法,系统之间也没有任何自动的消歧机制。搜索引擎构建实体图谱时,把一个字符串绑定到一个真实组织上,靠的从来不是名字本身,而是围绕这个名字的一圈交叉证据:官网、社交账号、维基条目、新闻提及、注册信息,彼此指认。实体消歧那套机制 (https://zhangwenbao.com/entity-disambiguation-mechanism-seo-signal-control.html)处理的就是这件事。 这里有个容易被忽略的连锁反应。前面抽查里那三个只在版权行出现过一次的名字,处境最尴尬:它不仅没帮上忙,还多给出一个悬空的字符串——机器得判断这是不是一个跟本站有关的实体,而整页上再没有第二处线索可以佐证。本地SEO里判断一家商户是不是同一个实体 (https://zhangwenbao.com/local-seo-google-entity-business-category.html),卡住的往往也是这一步。 schema.org的解法前面提过:name 填品牌,legalName 填法律实体,两个字段并列摆在同一个Organization里,等于明说“这两个名字指的是同一个组织”。用 @graph把站点的几个实体串起来 (https://zhangwenbao.com/schema-org-advanced-graph-entity-knowledge-panel-mechanism.html)是常见的做法,Google的组织结构化数据文档 (https://developers.google.com/search/docs/appearance/structured-data/organization)里也有一份可填字段清单,除了名称之外还有地址、联系方式、法律名称、注册号,以及 sameAs 那一组指向官方社交账号和百科条目的链接。 把页脚上那个法律实体名填进 legalName,成本大概是十分钟,收益是让那行小字从一个悬空字符串变成一条被认领的证据。这一轮没有逐站去核对结构化数据里的legalName填了没有。那是另一次实测的活儿。但从商家名称写法 (https://zhangwenbao.com/business-name-single-form-structured-data-audit.html)和首页几处自我描述互相打架 (https://zhangwenbao.com/self-description-copies-title-og-h1-schema-audit.html)这两轮的结果推断,这个字段的填写率大概率不高。 ## 能拿去核验的编号,有几个站给了? 这是整轮数据里落差最大的一格。 名字之外还有一样东西能定位一个法律实体:注册号。营业执照号、商业登记号、增值税号、备案号,各国叫法不同,作用一样:在某个官方登记系统里唯一地指向一个组织。有了它,任何人都能去英国公司注册处这类公开查询入口 (https://www.gov.uk/get-information-about-a-company)把这家公司调出来看。 116个站的页脚里,给出了这类编号的只有11个,占9.5%。 把这11个拆开看,落差就出来了: 编号类型 | 站数 | 站 | 中国ICP备案号 | 9 | casetify.com、dji.com、ecoflow.com、insta360.com、narwal.com、philips.com、segway.com、swarovski.com、uniqlo.com | 丹麦CVR登记号 | 1 | jysk.com | 英国VAT税号 | 1 | rab.equipment | 需要说清楚口径:这一轮的抓取从中国大陆的网络环境发起,上面那9个站返回的是它们的中国站页面,而在中国大陆运营的网站按规定要在页面底部展示ICP备案号。换句话说,这9个编号不是这些公司想写,是必须写。 把被强制的那9个拿掉,剩下的107个站里,主动在页脚给出可核验编号的只有2个。 而这并不是因为别处没有要求。欧盟的电子商务指令第5条 (https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32000L0031)列了一份清单,要求在线服务提供者把这些信息做到“容易、直接、永久可访问”:名称、设立地的地理地址、包括电子邮箱在内的联系方式、商业登记处的登记号、以及从事应税业务时的增值税号。这份清单跟版权声明的三要素几乎不重叠——它要的不是版权归属,是身份可核验。 这份要求在页脚上的落实程度,跟ICP那9个形成了很干净的对照:有硬性检查的地方就有编号,没有硬性检查的地方就只剩一个名字。做技术SEO久了会发现这个规律到处适用——真正被普遍执行的规范,背后一般都站着一个会来查的人。 ## 那机器把一个站认成实体时,到底读的是哪几个字段? 把这一系列量过的东西摞起来,一个站能交给机器的身份证据大致分四层: - 结构化数据层。Organization里的name、legalName、address、identifier、sameAs。这一层是唯一有明确字段语义的,机器不用猜。前提是同一个字段别写好几份互相打架 (https://zhangwenbao.com/duplicate-meta-tag-first-declaration-wins-audit.html)。 - 页面文案层。页脚版权行、关于我们、联系方式、法律声明页。语义要靠推断,写法五花八门,就是这一轮量的这一层;要是首页干脆是个连正文都读不到的空壳 (https://zhangwenbao.com/html-shell-page-readable-text-audit.html),这一层等于不存在。 - 站外指认层。官方社交账号、百科条目、行业目录、新闻报道里的公司名。E-E-A-T那组信号 (https://zhangwenbao.com/strengthen-authority-eeat-signals-ai-citations-2026.html)里权重最高的部分在这儿。 - 注册系统层。工商登记、商标、域名注册信息。最权威,但需要主动把编号交出来,机器才能顺着查过去。 这四层里,第二层是唯一一个绝大多数站都做了的,也是唯一一个没有统一格式的。第一层和第四层最好用,恰恰做的人最少。 这个错位跟配送和退货承诺那一轮 (https://zhangwenbao.com/shipping-return-promise-human-vs-machine-readable.html)的形状一模一样:话在页面上说得清清楚楚,换到机器读的通道里就只剩零星几个。区别在于,配送政策说错了顶多影响一次转化,而身份说不清楚,是所有信任信号的地基出了问题。独立站的信任是分层搭起来的 (https://zhangwenbao.com/dtc-ecommerce-trust-7tier-eeat-mechanism.html),最底下那层就是“你到底是谁”。 ## 页脚这行署名,具体该怎么改? 按投入产出排一下,从最省事的开始。 第一件,把品牌名和法律实体名同时写出来。版权行写成“© 2019-2026品牌名,由某某有限公司运营”这种形式,法务要的严谨性在,用户和机器要的可识别性也在。这一步不需要动代码,改的是模板里的一个字符串。 第二件,把legalName填进结构化数据。首页的Organization里,name 填品牌,legalName 填页脚上那个法律实体名,两者并列。这等于用机器能读懂的方式说明“这两个名字是同一个组织”,是这一整篇里性价比最高的一个动作。写出来就这么几行: { "@context": "https://schema.org", "@type": "Organization", "@id": "https://example.com/#organization", "name": "Rab", "legalName": "Equip Outdoor Technologies UK Ltd", "url": "https://example.com/", "identifier": { "@type": "PropertyValue", "propertyID": "VAT", "value": "GB115143946" }, "sameAs": [ "https://www.instagram.com/xxx", "https://en.wikipedia.org/wiki/xxx" ] } 几个字段各管一件事:name 是别人称呼你的那个词,legalName 是登记系统里的那个词,identifier 把编号挂上去,sameAs 提供站外的交叉指认。@id 给这个组织一个稳定的标识,站内其他结构化数据引用它的时候指向同一个地址,而不是每处各写一份互不相干的Organization。 要提醒一句:这几个字段填的内容必须和页面上写的一致。页脚署A、结构化数据写B,比只写一个还糟——机器拿到两个互相矛盾的声明,只会两个都不信。 第三件,如果你在有强制披露要求的市场经营,把编号放到页脚。欧盟站要登记号和增值税号,中国站要ICP备案号,英国公司要在网站上写明注册号和注册地。这既是合规动作,也顺带把身份的可核验性补上了。要注意别把这些信息藏进折叠区 (https://zhangwenbao.com/hidden-content-machine-readability-verdict-audit.html)——指令里“容易、直接、永久可访问”这几个词是有分量的。 第四件,检查一下这个名字在站内还出现在哪儿。这件事和核对sitemap里的地址页面认不认账 (https://zhangwenbao.com/sitemap-url-three-layer-identity-audit.html)是同一种活儿:把同一个东西在几处的写法摆到一起看。关于我们、联系方式、隐私政策、服务条款,理想状态是它们和页脚署的是同一个实体名。如果关于我们页写着品牌故事、隐私政策里是另一家公司、页脚又是第三个名字,那这个站在机器眼里就是三个模糊的实体。关于我们那一页 (https://zhangwenbao.com/about-us-page-entity-eeat-ai-search-guide.html)本来就该承担把这几个名字串起来的活儿。 第五件,别指望靠删掉解决。这一轮有24个站在页脚没给出任何名字,它们没有因此变得更清白。只是把这个问题推到了别的页面上,而那些页面的机器可读性通常更差。商品规格里字段和值配不上对 (https://zhangwenbao.com/product-spec-field-value-pairing-audit.html)是同一个毛病的另一种长相:信息在,但没被放进机器认得的格子里。 最后回到开头那行字。页脚署名是一个网站唯一一处被迫说真话的地方:其他文案都可以写得漂亮,这一行必须写法律上成立的那个名字。可正因为它必须说真话,它说出来的往往是用户和机器都听不懂的那句真话。让它同时被听懂,才是这一行该有的样子。 ## 常见问题解答 ## 页脚署名和品牌名不一致,会影响搜索排名吗 没有直接的排名影响。它影响的是实体识别的确定性——搜索引擎和大模型把这个站关联到某个组织时,页脚这行是可用的证据之一,写一个站内其他地方从未出现的名字,等于给出一条断掉的线索。要修,成本最低的做法是在结构化数据里用legalName把法律实体名认领下来。 ## 版权行里到底该写品牌名还是公司全称 两个都写最稳妥。版权声明要求的是版权所有人,写公司全称在法律上更严谨;但从可识别性出发,品牌名不能缺。写成“© 2019-2026品牌名,某某有限公司”这类形式,两边的需求都能满足,也没有任何规则禁止这么写。 ## 页脚不写公司名只写All Rights Reserved,有什么问题 法律上不构成问题,1989年3月1日之后发表的作品,版权声明本身就不是取得权利的前提。实际问题是这行字变成了纯装饰:它占了一个位置,却没有回答任何人的任何问题。这一轮有7个站是这么写的。 ## ICP备案号、增值税号这类编号放在页脚,会不会有安全风险 这些编号本来就是公开信息,公司注册号、增值税号在各国的登记系统里都能查到,属于设计上就要公开的标识。真正需要谨慎的是个人信息。法人代表的身份证件号、私人手机号这类不该出现在页脚。 ## 集团旗下多个品牌共用页脚模板,署名怎么处理 按品牌站分别配置,而不是全部署母公司。技术上通常只是模板里加一个变量的事。如果确实无法拆分,退一步的做法是写成“品牌名is a brand of母公司名”这种形式,把两者的关系明确写出来,而不是只留母公司一个名字让人去猜。 ## 这一轮的结论能推广到中小独立站吗 方向能,比例不能。样本是131个有品牌的中大型电商站,实际用上116个,本身就是相对规范的一批。中小站和自建站的页脚署名只会更随意,可核验编号的比例只会更低。另外这一轮只量了首页页脚,同一个站的关于我们、隐私政策页可能有更完整的实体信息,这一轮没有去逐页核对。 ## 权威参考资料 ## 结构化数据里价格64个站全写了,规格只有7个 - URL:https://zhangwenbao.com/product-spec-field-value-pairing-audit.html - 分类:电商SEO - 发布:2026-08-28 | 更新:2026-08-30 - 摘要:产品页的规格表看着横平竖直,把样式一关就塌成一根字符串。字段名和值能不能对上,靠的往往只是模板里谁先写谁后写——改版挪一次促销条、加一层标签页,某批参数就悄悄配错了,而页面上一点变化都看不出来。你的产品页现在处在哪一档,怎么用记事本一分钟自查一遍。 - 关键词:结构化数据,语义化HTML,产品页SEO,实测数据,电商独立站 > **TLDR**:摘要:80个电商独立站的产品页,63个页面上找得到规格字段名,一共187处。把这些字段名放回机器实际拿到的那条文本流里逐条人工核对,字段名后面紧跟的内容只有51.9%真是它的值;15.0%是另一个字段名或分组标题,33.2%是评价区、促销条、标签页名这类不相干的东西。站一级的中位配对成功率正好50.0%,20个站一条都没对上。而能让机器不必靠猜的三条通道,使用率分别是8.8%、7.5%、8.8%。 > 摘要:80个电商独立站的产品页,63个页面上找得到规格字段名,一共187处。把这些字段名放回机器实际拿到的那条文本流里逐条人工核对,字段名后面紧跟的内容只有51.9%真是它的值;15.0%是另一个字段名或分组标题,33.2%是评价区、促销条、标签页名这类不相干的东西。站一级的中位配对成功率正好50.0%,20个站一条都没对上。而能让机器不必靠猜的三条通道,使用率分别是8.8%、7.5%、8.8%。 产品页上那张规格表,你大概很久没认真看过了。它长得规规矩矩:左边一列字段名,右边一列值,行距均匀,字号统一,扫一眼就知道净重多少、尺寸多大、什么材质。 现在把浏览器的样式关掉。设置里有“禁用样式”,或者干脆开阅读模式。那张表会塌成一根竖着的字符串: Specifications Input 9.0V⎓3A / 12V⎓3A / 15V⎓3A Output Phone: 25W Max Dimensions 3.74 × 2.38 × 1.22 in Weight 8.11 oz 这是anker一个充电站产品页塌下来的样子。读起来还行,字段名和值一上一下交替出现,谁都能还原出那张表。 问题在于,这个“还行”背后没有任何东西在保证它。它成立,仅仅因为写模板的人恰好把字段名的div写在了值的div前面。哪天设计改成两列、字段名全进左边那个容器、值全进右边那个,塌下来就成了“Input Output Dimensions Weight 9.0V 25W 3.74in 8.11oz”。人看着还是那张表,机器拿到的已经是两堆互不认识的词。 所以这一轮想量的不是“机器读不读得到”,而是机器读对的时候,究竟是有人保证它对,还是顺序碰巧对。 ## 把CSS关掉之后,你的规格表还剩什么? 先说清楚这件事为什么值得单独量一次。 前面几轮量过内容整段掉出通道的情形。图上的字62%在文本层里一个都找不到 (https://zhangwenbao.com/image-text-not-in-text-layer-ocr-audit.html)是一种,屏幕上最大那行字44.6%不是标题标签 (https://zhangwenbao.com/visual-hierarchy-vs-heading-tags-audit.html)是另一种。这两种的共同点是信息真的没了:机器那边整段消失,而且不报错。 规格不一样。规格的字全都在文本里,一个字符都没少。少掉的是字段和值之间的那根线。人靠对齐看出这根线——这一行左边是名、右边是值,因为它们横着排在一起。机器没有“横着排在一起”这个概念,它只有一串按DOM顺序展开的字符。 这根线在HTML里本来有专门的表达方式。表格里,th和同一行的td是一对;定义列表里,dt和紧跟的dd是一对;结构化数据里,additionalProperty下面每个PropertyValue自带name和value两个字段。这三种写法都不依赖顺序碰巧对,它们把配对关系直接写进了标签。 可要是用两个div拼出同样的视觉效果,这根线就只存在于CSS里。CSS不进索引。 ## 51.9%——这是63个站给出的配对成功率 口径先摆出来,每一层的站数都不一样,混着说会得出很难看的错误结论。 - 起手131个英文电商与消费品牌站; - 首页采集成功130个(getquip.com导航超时); - 从首页找到并打开产品页的80个,这是本文所有产品页统计的分母; - 产品页上匹配到规格字段名的63个站,字段名共出现187处。 “字段名”的判定用了一份写死的词表:material、weight、dimensions、capacity、warranty、country of origin、tech specs这一类,六十多个词,并且要求这个元素显示出来的全部文字就是这个词本身——不然正文里那句“materials and features…”也会被当成字段名。 然后取document.body.innerText。这大致就是把样式关掉之后剩下的东西,也接近爬虫和大模型切段时拿到的形态。按行切开,找到每个字段名所在的行,看它下一行是什么。 187条全部人工过了一遍,分成三类: 下一行是什么 | 条数 | 占比 | 确实是这个字段的值 | 97 | 51.9% | 另一个字段名,或一个分组标题 | 28 | 15.0% | 跟这个字段无关的模块 | 62 | 33.2% | 同一个站同一个字段去重之后(评价区经常把“Fit”重复五六遍),156条的分布是51.9%、14.1%、34.0%。去重前后第一档一模一样,说明51.9%不是被重复项撑出来的。 换成站的口径:63个站的配对成功率中位数正好50.0%;20个站一条都没对上,占31.7%;13个站全对,占20.6%。 也就是说,你的产品页上的规格,机器大概能拿对一半。至于是哪一半,它自己也不知道。 ## 配错的那一半,都错在哪里? 两类错法性质完全不同,得分开讲。 ## 第一类:值和名分了家 28条属于这类,特征是字段名的下一行还是个字段名。 - anker的“Specifications”,下一行是“Input”; - decathlon的“Specifications”,下一行是“Materials”; - menuspace的“Dimensions”,下一行是“Specifications”; - nomadgoods的“Tech Specs”,下一行是“Materials”; - beistravel更彻底,“Fabric”“color”“fits”“style”四个词连着落下来,中间一个值都没夹。 规律其实很清楚:分组标题和字段名,在文本流里长得一模一样。“Specifications”是这一整块的名字,“Input”是这一块里的一条,可它们都是独立成行的短词,字面上没有任何区别。人靠字号和缩进一眼分清层级,机器要么两个都当字段名、于是把“Input”当成“Specifications”的值,要么两个都当标题、于是这一块一条也抽不出来。 untuckit那条最有喜剧效果:“Fit”的下一行还是“Fit”。一个是筛选器的分组名,一个是规格里的字段名,同一个单词连着出现两次,中间什么都没有。机器读到这儿,多半会以为自己卡带了。 everlane的“Materials & Care”下一行是“Materials:”,同一个毛病——外层是合并的分组名,内层才是真字段,两层用了同一个词根。 ## 第二类:下一行压根是别的模块 62条,占三分之一,这类才是真会让人一惊的。 - burrow的“Dimensions”下一行是“Up To 35% OFF”,一条促销带插在了规格和它的值中间; - govee的“Specifications”下一行是“Reviews”,soundcore、nomadgoods、jackery的“Tech Specs”下一行都是“FAQ”——这是标签页的名字,规格藏在没被激活的那个面板里; - rapha的“Materials & Care”下一行是“YOU MAY ALSO LIKE”,推荐位直接顶上来了; - tentree的“Size & Fit”下一行是“$25”; - vuoriclothing的“Height”下一行是“Showing 60 results”; - menuspace的“Care Instructions”下一行是“Privacy Policy”,页脚都挤进来了; - hellotushy的“Specifications”下一行是“Download PDF”。规格是有的,在一个PDF里。 这类的成因大多是字段名本身就是标签页或折叠块的把手,内容在另一个还没展开的容器里。采集时已经把所有原生details展开过一次,但用div加JavaScript自己实现的手风琴展不开——这恰恰就是机器面对的真实情况。隐藏内容到底算不算数那一轮 (https://zhangwenbao.com/hidden-content-machine-readability-verdict-audit.html)拆过十六种藏法各自的裁决,这里是它落在规格上的具体后果:不是内容被降权,是字段和值被彻底切断。 说个题外的观察。规格书在屏幕上好好的、机器复制走的却是另一串字符 (https://zhangwenbao.com/minor-language-pdf-text-layer-extraction-failure.html)那件事,跟hellotushy这个“Download PDF”是同一个逻辑的两端:一个是把规格搬进了PDF的图层,一个是把规格搬进了PDF这个文件。人点开就能看,机器要多走一道,而多走的那道往往没人走。 ## 为什么“机器读对了”和“机器有把握”是两回事? 这是本文真正想说的一句话,值得单独展开。 51.9%第一眼看着不算灾难:一半能对上,剩下一半改改就是了。但换个角度问——那对上的51.9%,靠的是什么机制? 答案是DOM书写顺序。字段名的元素恰好写在值的元素前面,中间恰好没插别的东西,塌下来就是对的。这里没有任何一层在做校验,没有任何一层在声明“这两个是一对”。它对,是因为写模板的那个人当时顺手就那么写了。 顺手写对的东西,会被顺手改错。改版把规格区从一列改成两列,把促销带挪到规格上面,给规格加一层标签页容器——任何一次都能让某一批字段从对的那半掉进错的那半,而页面上看不出一点变化。对齐是CSS在管,CSS没坏。 这就是它和“信息整段消失”的关键区别。信息消失至少还有明确的失败信号:打开阅读模式,那句话不在,一眼就看见了。配对关系断掉这件事没有信号,塌下来的文本流照样通顺,你甚至会觉得它读着挺好。 做SEO的人对这种事其实不陌生。一个尾逗号就能让整页结构化数据失效 (https://zhangwenbao.com/json-ld-validator-syntax-debug-guide.html)是同一类:肉眼看页面完全正常,机器那侧已经全丢。区别只是JSON-LD好歹有校验器会红着脸告诉你,而“字段和值靠顺序凑在一起”这件事,没有任何工具会报警。 ## 能给出把握的三条通道,现在各有多少人在用? HTML和schema.org一共提供了三种把配对关系写死的办法。80个产品页上的实际使用情况: 通道 | 用了的站 | 占80个产品页 | 可见的 | 7 | 8.8% | 可见的
| 6 | 7.5% | JSON-LD里的additionalProperty | 7 | 8.8% | 再从字段那一侧看:171个独立成块的字段名里,真正靠th与td、或dt与dd建立起配对关系的只有13个,7.6%。剩下92.4%全靠相邻。 字段名用的标签排下来是这样:span 39次、div 35次、button 18次、p 16次、h2 13次、h3 11次、dt 7次、h5 7次、h4 6次、strong 5次、b 4次、th 3次。前两名加起来43%,都是完全没有语义的容器。 这个分布跟全网大盘一致。Web Almanac 2024的标记章节 (https://almanac.httparchive.org/en/2024/markup)统计出div占了全部HTML元素的29%,那一节里的原话是“divitis依然存在,而且看不出未来几年会改变”。产品页的规格区,只是这个大趋势里最不该出现div的一块地方。 还有一个可以当旁证的数字:页面上有93个容器在视觉上排成了两列以上、两行以上的网格,也就是“看起来就是张表”,其中落在table或dl里的只有3个。35个站的产品页上网格有好几处,表格和定义列表一个都没有。八类语义标签对SEO的真实影响 (https://zhangwenbao.com/semantic-html-tags-seo.html)那篇里排过这些标签的实际分量,表格和定义列表恰好属于少数几个“语义确实带来功能差异”的标签,不是可有可无的洁癖。 ## 用了表格的那7个站,表格本身合格吗? 不完全合格。7个站一共9个可见表格,逐个拆开: 站点 | 规模 | th | scope | caption | taylorstitch.com | 7行7列 | 7 | 7 | 0 | drinkolipop.com | 10行2列 | 11 | 11 | 1 | babybjorn.com | 9行2列 | 9 | 0 | 0 | wusthof.com | 7行3列 | 2 | 0 | 0 | burrow.com | 6行2列 | 0 | 0 | 0 | kotn.com | 6行3列 / 8行3列 | 0 | 0 | 0 | ugreen.com | 5行2列 | 0 | 0 | 0 | 9个表格里4个一个th都没有,全是td。这种表格在渲染上和有表头的完全一样(表头那行加粗是CSS加的),但对机器来说它退化成了一个纯网格:知道有几行几列,不知道哪一列是名、哪一列是值。 MDN关于th元素的说明 (https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/th)把这件事讲得很直白:scope的作用是明确这个表头管的是它那一行还是那一列,两列以上的表格没有scope就得靠算法猜。9个表格里带scope的只有两个站,taylorstitch和drinkolipop。 drinkolipop还是唯一写了caption的,而且写了两次。一个卖气泡水的站,把营养成分表写得比多数工具站还规范,多少有点意外。 ## 有dd没有dt的定义列表,是怎么长出来的? 定义列表这条通道的情况更奇怪。6个站一共30个可见的dl,其中13个的dt与dd数量对不上。 具体看两个:aboutyou有4个dl,每个都是0个dt加1个dd;dollarshaveclub有8个,同样每个0个dt加1个dd。 一个定义列表,里面只有定义,没有被定义的那个词。 HTML规范的分组内容那一章 (https://html.spec.whatwg.org/multipage/grouping-content.html)把dl定义成“名称—值组的列表”,MDN的dl元素文档 (https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/dl)也强调每一组必须由一个或多个dt加一个或多个dd构成。只有dd的dl在规范上不成立,机器读到它只能理解成“这里有一个值,它是什么的值不知道”。 这大概率不是谁故意写成这样,而是组件库的产物:某个UI库把dl当成通用的“信息条”容器,名字那部分用span或者干脆用::before渲染,值那部分用dd。视觉上一模一样,语义上把最关键的那一半删掉了。 做对的是ritual(3个dl,每个4对dt/dd整整齐齐)和baseus(6个dl,全是1对1)。 ## 价格都写进去了,规格为什么没有? 结构化数据这一侧的数字,是这一轮最值得盯着看的一组。 80个产品页里,64个带Product结构化数据,占80.0%。渗透率比很多人以为的高。作为对照,Web Almanac 2024的结构化数据章节 (https://almanac.httparchive.org/en/2024/structured-data)给出的全网数字是Product schema只出现在0.77%的页面上。两个数并不矛盾,分母完全不同——全网绝大多数页面根本不是产品页。但它至少说明,在真正的产品页上这件事已经是标配了。 然后是关键的一步。这64个页面里: - 写了offers(价格、货币、库存状态)的:64个,一个不落; - 写了additionalProperty(规格参数)的:7个。 同一段JSON-LD,同一个开发,同一次部署,价格写全了100%,规格写了10.9%。 原因不难猜,而且不能全怪做的人。价格是富媒体结果的硬门槛,不写就拿不到那个带价格和星级的搜索结果,收益立刻能看见;additionalProperty不参与任何一种富媒体展示,写了在搜索结果里看不出半点变化。整个行业是被富媒体结果牵着走的,牵到哪儿写到哪儿,没牵到的地方就是空的。 问题是这套激励在AI那一侧不成立了。AI答案要回答“这个杯子多重”“这件衣服什么面料”“这个充电器支持多少瓦”,靠的不是价格,正是那些从来没人写的字段。结构化数据对AI搜索到底有没有用 (https://zhangwenbao.com/schema-markup-ai-search-truth.html)那篇拆过官方说法和实测的差距,这里可以补一句更具体的:你已经写了的那部分结构化数据,喂的是十年前的富媒体结果;AI要的那部分,绝大多数人还一个字没写。面向AI推荐优化产品页 (https://zhangwenbao.com/ai-ready-product-page-optimization.html)的那套动作里,规格结构化排在第一位,实测下来它也确实是缺口最大的一项。 写了additionalProperty的那7个是buckmason、burrow、fahertybrand、flyingtiger、fromourplace、gymshark、lookfantastic。凑巧的是burrow同时也是有表格的那7个之一,而它的表格一个th都没有。这倒说明一件事:两条通道彼此独立,做了一条不等于另一条也做了,别指望互相兜底。 ## 我这把尺子差点也骗了我自己 这一段是方法论,但它比上面任何一个结论都更该被记住。 最开始判断“下一行是不是值”,用的是一条自动规则:下一行非空,并且不在字段词表里,就算它是值。跑出来的数字是93.6%。看到这个数的第一反应是这选题废了——九成多都对,哪来的问题。 然后按惯例抽了24条人工核对。核到第五条就发现不对劲:avocadogreenmattress的“Warranty”下一行是“FINANCING”,被判成了值;burrow的“Dimensions”下一行是“Up To 35% OFF”,也被判成了值。这条自动规则唯一排除的是“下一行是词表里的另一个字段名”,可绝大多数干扰项根本不在词表里——它们是标签页名、促销语、按钮文字、评论片段。 全部187条人工标完之后: 判据 | 说“下一行是值” | 占比 | 脚本自动规则 | 175 | 93.6% | 人工逐条核对 | 97 | 51.9% | 自动规则把79条不是值的东西算成了值,同时漏判了1条真正的值,净差78条,整体虚高1.80倍。误判拆开看,17条是把分组标题或另一个字段名当成了值,62条是把完全不相干的模块当成了值。后者才是大头,也正是那条自动规则完全没设防的方向。 所以结论要写清楚:这一轮51.9%这个数,是人一条条看出来的,不是脚本算出来的。脚本那个93.6%如果直接发出去,就是一篇结论完全相反的文章,而且没有任何读者能从数字上看出它错了。 这个坑的形状值得单独记一笔:当你的自动判据是“排除已知的坏情况”而不是“确认它符合好情况”,你量到的永远是上界。排除法只挡得住你想得到的那些,想不到的全部按“好”计入。改成确认法——要求下一行必须包含数字加单位、或者匹配值的形态——数字会偏低,但至少偏在安全的一侧。这跟做SEO时用工具跑审计是一个道理,调试JSON-LD那类工具 (https://zhangwenbao.com/json-formatter-jsonld-structured-data-debug-guide.html)亮绿灯只代表它检查的那几项没问题,不代表它没检查的那些也没问题。 ## 做对的那几个站,做法有什么共同点? 13个全对的站里,挑三个看得最清楚的。 snowpeak:sku对上SDE-001-IV-US,weight对上19.6 LB(8.9kg),capacity对上4 Person,materials对上75D Polyester、PU Coating 1,800mm、Teflon Water Repellent。四条全中。它的规格区是一个独立区块,字段名和值一上一下紧挨着,中间没有任何按钮、促销条或标签页容器。 on.com:materials对上“Main Fabric: Polyamide (recycled) 100%. Lower Part: Polyamide…”,country of origin对上Vietnam,care instructions对上Do not bleach,size & fit对上True to size。它的做法更省事——把字段名和值写进同一行,“Main Fabric:”这个前缀直接跟在值前面。这样即使塌成文本流,冒号本身就是那根线。 wusthof:9条里7条对上,country of origin对上Germany,length对上3.7 in,sku对上1040336812。它同时是唯一一个既有表格、又有4个规范dl的站。 三个站的做法各不相同,共同点只有一条:字段名和它的值之间,没有第三样东西。要么紧挨着,要么写在同一行,要么用标签绑在一起。而错的那些,中间总是插着点什么——一个促销带、一个标签页把手、一个推荐位、一个折叠容器。 这就给出了一条不需要任何工具的自查方法:把产品页复制到记事本里,找到那几个字段名,看它下面那行是不是它的值。不用装插件,不用跑脚本,一分钟能查完一个页面。内容可提取性那套结构原则 (https://zhangwenbao.com/semantic-html-content-extractability-engineering.html)讲的是同一件事的通用版本,规格区只是它最容易验证、也最容易翻车的那一块。产品详情页SEO那套做法 (https://zhangwenbao.com/product-detail-page-onpage-seo-unique-content-engineering.html)里反复强调的“摆脱供应商文案”是内容层的事,这一条是结构层的事,两件事不冲突,但只做前者不会让后者自动变好。 ## 想让规格从“碰巧对”变成“保证对”,先动哪三处? 按投入产出排,从小到大。 ## 第一处:把冒号加回去 成本最低的一步,改模板里一个字符串。字段名后面带上冒号、和值写在同一个文本节点里,塌下来就是“Material: 100% Organic Cotton”,无论DOM怎么变、中间插什么,这一对都拆不散。on.com和kotn走的就是这条路。 这一招不解决语义问题——机器仍然要靠冒号猜配对——但它把“靠顺序”换成了“靠字符”,抗改版能力强了一个量级。当天就能上线。 ## 第二处:把规格区换成表格或定义列表 如果规格是标准的两列,就用table,第一列写th并加scope="row";如果是“一个名对一段描述”的形态,就用dl,一个dt配一个dd。这两种写法在CSS里都能排成任何你想要的样子,用display: grid覆盖表格的默认渲染是常规操作,视觉上和现在的div方案没有区别。 顺带一提,这一步同时是无障碍的必修项。屏幕阅读器在表格里能按行按列朗读“材质:有机棉”,在两个div里只能读出两句互不相干的话。 ## 第三处:把规格补进additionalProperty 这是唯一一条完全不依赖页面结构的通道。JSON-LD里加一段: "additionalProperty": [ {"@type": "PropertyValue", "name": "Material", "value": "100% Organic Cotton"}, {"@type": "PropertyValue", "name": "Weight", "value": "8.11 oz"} ] 它不会带来任何富媒体结果,搜索结果里看不出一点变化,这也是它被跳过这么多年的原因。但它是三条通道里唯一一条把“名”和“值”明确写成两个独立字段的,不需要任何推断。如果你的商品数据本来就在数据库里按字段存着,这一段是模板循环里加三行的事,成本可能比改前端结构还低。结构化数据落地那套流程 (https://zhangwenbao.com/seo-schema-guide.html)里的字段优先级可以直接拿来排期,GTIN那类商品标识字段 (https://zhangwenbao.com/product-gtin-seo.html)和additionalProperty往往在同一次改动里一起补,别分两回做。 顺序上,保哥的建议是先做第三处再做第二处。第三处不动前端、不影响视觉、不需要设计参与,改完就有;第二处要动组件,要过设计和测试,排期常常两周起。Schema生成器那类工具 (https://zhangwenbao.com/schema-generator-jsonld-13-types-guide.html)可以先拿一个页面手动生成一版对照着改,别一上来就动模板。做Shopify的话,给Shopify页面加结构化数据 (https://zhangwenbao.com/shopify-schema-seo-guide.html)要注意主题自带的那一份和你新加的那份会同时出现,先确认合并策略再动手。 ## 顺手能做的第四件事 把规格区从标签页里搬出来。这一轮62条“下一行是别的模块”里,很大一部分病根就是规格被放进了默认不激活的标签页。JS渲染那一轮实测 (https://zhangwenbao.com/js-rendering-loss-three-myths-audit.html)的结论是渲染本身没大家担心的那么可怕,但那说的是内容能不能被渲染出来。能渲染出来和默认展开是两件事:标签页里的东西即使渲染了,在文本流里也照样和它的字段名隔着一整个面板的距离。 做完这四件,再回头把电商内容SEO那套六层矩阵 (https://zhangwenbao.com/ec-seo-content.html)里产品页那一层重新过一遍,你会发现原先写在文案里的很多卖点,其实本来就该以字段的形式存在。几种被AI引用得更多的结构化内容格式 (https://zhangwenbao.com/optimize-content-structure-ai-citations-2026.html)里,参数表一直排在前列,原因不是它信息量大,而是它歧义最小。 ## 常见问题解答 ## 规格没写进结构化数据,会影响Google的自然排名吗? 直接影响排名的证据没有,Google官方也从来没把additionalProperty列为排名因素。它影响的是另外两件事:一是AI答案在回答具体参数问题时能不能确定地取到你的值,二是购物类结果里商品属性的完整度。把它当排名手段做会失望,把它当“让机器不必猜”的手段做才对得上。 ## 用div加CSS grid排出来的规格表,Google真的看不懂吗? “看不懂”说得太绝对。Google会渲染页面,能拿到布局信息,也有能力从相邻关系里推断配对。问题不在能不能,在有没有保证。推断出来的结果没有确定性,改版之后可能悄悄变化,而且不同的抓取方——Googlebot、各家AI爬虫、比价工具、你自己的数据管道——推断能力差得很远。用table或additionalProperty,等于把这件事从“可能推对”变成“不需要推”。 ## 这一轮为什么只看首屏能找到的产品页,不做全站抽样? 因为要控制一个变量:这些页面都是从首页两跳之内能到的,属于每个站最主要的商品模板。全站抽样会混进大量旧模板、活动页和第三方托管页,样本更大,但对不上“这个站现在的产品页长什么样”这个问题。代价是每个站只有一个页面,站内的模板差异看不到。 ## 字段词表是英文的,中文站的规格是不是查不出来? 是。这一轮样本全是英文站,词表也只写了英文字段名,中文站的“材质”“净含量”“适用机型”一个都不在里面。方法本身通用——把词表换成中文,其余流程一字不改就能跑。但本文的所有比例只代表这批英文电商站,不要直接搬去描述中文站。 ## 51.9%这个数,换个人标注会不会差很多? 会有出入,但不至于翻盘。争议集中在两类边界情况:一是评价区那些“True to size”,它确实回答了Fit这个字段,但来源是用户评分不是官方规格,本文按值计入了;二是像jackery的“Capacity”下面跟着“7200W”这种,字段和值不完全对应但确实是参数。把这两类全部改判成不算,51.9%会掉到四十几个百分点,结论方向不变。真正稳的是另外两个数:7.6%的语义配对率和8.8%的additionalProperty使用率,这两个是标签层面的事实,不涉及判断。 ## 那20个一条都没对上的站,是不是页面做得特别差? 恰恰相反,里面有不少是这批样本里做得最精致的。它们的共同特征是重视觉、重交互:规格塞进标签页,参数做成可展开的手风琴,字段名当成筛选器的分组名复用。交互做得越精细,文本流塌下来越碎。这也是这个问题最难被发现的原因——它跟“页面做得糙”没关系,反而跟“做得讲究”正相关。 ## 权威参考资料 ## 图片SEO别只盯alt:大图上62%的字页面里找不到 - URL:https://zhangwenbao.com/image-text-not-in-text-layer-ocr-audit.html - 分类:电商SEO - 发布:2026-08-26 | 更新:2026-08-30 - 摘要:首页上最大最醒目的那句话,往往是一张图。它在屏幕上很显眼,在文本里却根本不存在——爬虫读不到,AI切段时也用不上。你的站上到底有多少句话掉进了这个夹缝,价格、奖项、媒体引用、数据来源这几类最要紧的内容有没有中招,怎么十分钟自查一遍。 - 关键词:图片SEO,AI可见度,实测数据,alt文本,电商独立站 > **TLDR**:摘要:131个电商独立站首页,其中114个取到了可分析的大图,共815张,OCR一共从上面读出1460行文字。把这些字拿回页面里逐字对照,62.4%的字符在整个文本层里一个都找不到——不在正文,不在alt,不在meta,也不在结构化数据。alt本该是那道后备通道,可在有字的图上,它对图上文字的覆盖率中位数是0%。漏得最狠的不是标语,是价格:识别到的54个价格词里45个只活在像素里。 > 摘要:131个电商独立站首页,其中114个取到了可分析的大图,共815张,OCR一共从上面读出1460行文字。把这些字拿回页面里逐字对照,62.4%的字符在整个文本层里一个都找不到——不在正文,不在alt,不在meta,也不在结构化数据。alt本该是那道后备通道,可在有字的图上,它对图上文字的覆盖率中位数是0%。漏得最狠的不是标语,是价格:识别到的54个价格词里45个只活在像素里。 随手打开一个做得漂亮的独立站首页,把浏览器的阅读模式打开,或者干脆按Ctrl+A全选复制到记事本里。你会发现一件有点扫兴的事:刚才屏幕上那句最大、最有劲、你花了两周和设计师来回改稿的话,粘出来是空的。 它不在文本里。它在一张图里。 这件事本身谁都知道。真正没人量过的是:到底漏了多少,漏的都是哪几句。所以保哥把131个电商独立站的首页挨个打开,把渲染面积最大的那几张图按原始地址下载下来,用OCR读一遍,再把读出来的每一行字拿回那个页面的文本层里逐字比对。下面是这一轮的全部结果,包括尺子本身准不准。 ## 为什么最想让人看见的那句话,最后总会变成一张图? 这不是谁偷懒。它是一连串合理决定叠出来的结果。 设计稿里那句主标语要压在模特照片上,字要描边、要有渐变、要跟着背景的明暗走。用HTML加CSS也能做,但要处理断行、要处理不同语言长度不一、要处理小屏幕下压到人脸上。把整块交给设计导出一张图,一次搞定,所有屏幕表现一致,谁都不用再吵。 产品图上的净含量、成分比例、认证标志,本来就印在包装上,拍照就带进来了,没人会想到再抄一遍到页面上。奖项徽章是主办方给的图,媒体评价是设计师排版排出来的一整块,脚注里的数据来源要用小字压在角落——这些都是图。 于是形成一个很别扭的规律:一句话在页面上越重要,越倾向于被做得醒目;越要做得醒目,越容易被交给设计;越是交给设计,越可能以像素而不是字符的形式落地。醒目和可读,在实操里是反着走的。 而这件事不会报错。页面照样加载,Lighthouse照样跑绿,SEO插件照样打勾。此前实测132个独立站首页有28个是空壳 (https://zhangwenbao.com/html-shell-page-readable-text-audit.html),那种漏是整页的,一眼能看出来;这一次的漏是零碎的,藏在最漂亮的地方。 ## 这次到底量了什么,怎么量的? 样本是131个电商与消费品牌的独立站首页。127个跑完了采集(其余4个卡在超时或反爬),这127个里又有13个没能取到任何符合尺寸门槛的图片——要么首页全是视频和纯色块,要么图被CDN挡住下不来。最终进入统计的是114个站、815张图。每个站的流程是这样的: - 用真实浏览器打开首页,等页面稳定,再往下滚三屏、回到顶部,把懒加载的图都逼出来。 - 收齐机器能拿到的全部文本:可见正文、DOM里的全部文字节点(包括当前不可见的)、所有alt/title/aria-label/placeholder属性、全部meta标签内容、全部JSON-LD结构化数据。这一整份合起来叫“文本池”。 - 挑出渲染面积最大的8张图(面积下限约200×90),按原始地址把图片文件本身下载下来,而不是截屏。这一步很关键:截屏会把压在图上面的HTML文字一起拍进去,那些字本来就在文本层里,会把结果算漂亮。 - 对每张图跑OCR,逐行拿到文字和置信度。 - 把每一行字拿回文本池里找。找得到,算这句话有文本备份;找不到,算它只活在像素里。 比对时有两个必须钉死的细节。第一,两侧必须用同一个归一化函数:OCR那边本来就丢标点,如果文本池这边保留标点,就成了两把尺子。第一版就栽在这儿——boohoo的alt里写着“Serving Looks, Ignoring Emails”,OCR读出的是“serving looks ignoring”,中间那个逗号让整行匹配失败,被误判成“只在像素里”。把两侧的标点全抹平之后才对上。 第二,OCR经常把词之间的空格吃掉,rothys的按钮读出来是“SHOPTHESEASON”。所以除了原样匹配,还要拿去掉全部空格的版本再匹配一次,两边都对不上才算漏。 ## 先考尺子:OCR在这类图上到底靠不靠谱? 这一步没法省。如果OCR把布料纹理认成字母,那“只在像素里”的数字就全是假的;如果它读不出白字压深色照片,那漏掉的又全是最典型的那一类。所以在跑正式数据之前,先用两种办法考了它两轮。 第一轮是自己画图当标准答案:用已知文案生成12张图,覆盖大标题、中号徽章、小字条款、极小号有效期、低对比度、白字压照片、参数表、细体字,再额外做四张“像真图一样难”的——强JPEG压缩、缩到实际展示尺寸再压缩、低对比度压在照片上。另外三张负例是纯噪点、渐变和纯色块,图里一个字都没有。 一开始用的是tesseract。结果是:大字全对,负例零误报,但强压缩的22px小字和缩到45%再压缩的小字,召回率是0%。这个失败方向本身是有意义的——它漏掉的正好是条款、有效期、成分这类小字,也就是最要紧的那一类。 第二轮是拿真图人工标注。从采集到的图里随机抽24张,逐张肉眼看过并分成三类:人写上去的营销文案、只有品牌logo或包装标签、完全没有文字。然后拿OCR的结果去对。这一轮把tesseract判了死刑: OCR引擎 | 图片级精确率 | 图片级召回率 | 营销文案那3张的召回 | tesseract(psm 3) | 100% | 10.0% | 33.3% | tesseract(psm 11) | 66.7% | 20.0% | 33.3% | RapidOCR | 87.5% | 70.0% | 100% | 具体到那三张营销图:rothys首屏上那行压在照片上的白色大字“THE FALL EDIT”,tesseract一个字没读出来;shein那张手写体的“Rust Ritual”,读不出来;lookfantastic角落那个圆形“25% OFF”角标,也读不出来。换成RapidOCR之后,三张全部读到,rothys那张连底下那行小字“Your style shift starts here with rich ReVelvet Penny Loafers.”都完整读了出来。 RapidOCR那唯一一个假阳性还有个小插曲。stanley1913首页那张图被我标成了“完全没有文字”,OCR却读出了STANLEY和FARMRO。把那块像素放大一看,画面里女孩抱着的保温杯上印着STANLEY的商标和联名款的FARM RIO字样——是标注的人漏看了,不是机器读错了。把这张改判之后,精确率其实是100%。剩下3个漏读都是B类,全是照片深处几毫米大的品牌小标,漏了不影响这篇的结论。 所以正式跑的是RapidOCR。这里有个必须说清楚的方法论后果:换一把更强的尺子,被读出来的字变多了,而“文本层里有没有”这件事不变,所以结论只会更稳、不会被放大。用弱尺子反而会让漏掉的字看起来更少。 还做了一次敏感性检查:把置信度门槛从0.6提到0.8,样本从1648行缩到1460行,“只在像素里”的字符占比从64.6%变成62.4%。把及格线抬高整整三分之一,结论只动了2.2个百分点,说明这个数字不是靠低置信度的噪声撑起来的。下文所有数字都用更严的0.8。 ## 815张首页大图上,有多少张真的写着字? 815张大图里,OCR读出文字的有319张,占39.1%。也就是说每五张首页大图里,有两张不只是照片,它同时还是一块版面。 按站看,中位数是每站2张图带字,四分之一的站有5张以上,最多的站8张全带字。这个分布本身说明了两种做法并存:一部分品牌严格把文字留在HTML里,图只放照片;另一部分把整个首屏当画布用。 ## 图上的那些字,页面里找得到吗? 这是整篇的核心。1460行、12292个字符拿回文本池里逐行对,结果是: 口径 | 算法 | 文本层里找不到的比例 | 词级(最宽松) | 这个词在页面任何角落出现过就算有 | 47.3% | 整行级 | 整行原样出现在文本池里才算有 | 53.8% | 字符级 | 按只在像素里的行折算成字符数 | 62.4% | 三个口径要一起看。词级是刻意放宽的下限——只要“free”这个词在页面某个角落出现过,哪怕是页脚的免运费提示,图上那个“free”也算有备份。就这么宽松,仍然有近一半的词哪儿都找不到。整行级更接近人真正读到的那句话,53.8%的行整句失踪。字符级最能说明信息量:图上每读出10个字符,有6个多在整个文档里没有第二份。 另一个角度:只有25.4%的站做到了一行都不漏。剩下四分之三的站,多多少少都有句子只存在于像素里。中位数是每站漏2行,四分之一的站漏8行以上,最狠的一个站漏了56行。 ## alt这道后备通道接住了多少? 规范其实说得很清楚。W3C的图片教程在“文字图片”这一节 (https://www.w3.org/WAI/tutorials/images/textual/)里写的是:在那些不得不用文字图片的少数场合,替代文本必须包含图中呈现的同样文字。这是“必须”,不是“建议”。 实测下来,这道通道基本是空的: - 有字的图里,alt对图上文字的覆盖率中位数是0%,平均17.8%。 - 70.9%的有字图,alt一个字都没覆盖到图上的内容。 - 覆盖过半的只有18.9%。 更细一层,把815张大图按alt的形态分开看,能看出问题出在哪: alt的形态 | 全部大图 | 其中有字的图 | 写了一句人话 | 56.0% | 55.5% | alt写成空字符串,明确声明为装饰 | 32.5% | 35.7% | 连alt属性都没有 | 4.0% | 3.1% | alt像文件名或随机串 | 1.3% | 1.3% | CSS背景图,连alt这个位置都没有 | 6.1% | 4.4% | 注意那个35.7%:图上明明写着字,alt却是空字符串,等于主动告诉所有读取器“这里没内容,跳过”。这不是忘了写,空的alt是有人特意敲上去的,它在W3C关于装饰性图片的说明 (https://www.w3.org/WAI/tutorials/images/decorative/)里是一个正当且常用的写法——前提是那张图真的只是装饰。问题在于,判断一张图是不是装饰的人,看的是它在版面里的角色,不是它上面有没有印字。 剩下55.5%写了人话的,问题换了一种:写的是画面,不是文字。getquip首屏那张banner上印着四条产品卖点——可更换刷头、牙医建议每3个月换一次、更少细菌、对地球更友好——alt写的是“Promotional banner”。drinkolipop的产品图上印着“Supports Digestive Health”和“12 fl oz (355 mL)”,alt写的是口味名“Blackberry Vanilla”。都写了,都没写到点上。 这跟WebAIM每年那份百万首页体检的口径不一样,得对齐着看。WebAIM Million在2026年2月扫了100万个首页 (https://webaim.org/projects/million/),结论是16.2%的图片缺alt、10.8%的alt内容可疑(比如写成image、graphic或文件名)。它量的是alt有没有、写没写得像样;这次量的是alt就算写了,写的是不是图上那句话。两个口径都合格的图,在这次的标准下仍然可能整句漏掉。权威大样本和自己的小样本对不上时,先比口径再比数字。 ## 漏得最狠的是价格,不是标语 把识别出来的词按类型分开统计,结果和直觉不太一样: 类型 | 识别到 | 只在像素里 | 占比 | 价格与金额 | 54 | 45 | 83.3% | 紧迫感用词(now、ends、limited等) | 26 | 5 | 19.2% | 折扣与促销词(sale、off、free等) | 29 | 2 | 6.9% | 物流与售后词(shipping、returns等) | 2 | 0 | 0% | 折扣词和物流词漏得少,是因为“sale”“free shipping”这类词在页面别处几乎一定会再出现一次——导航里有促销入口,页脚有配送政策。它们被词级口径救了回来。 价格不一样。一个具体的金额是唯一的,页面别处不会碰巧再写一遍,所以它一旦只印在图上,就是彻底的孤本。boohoo那张banner上的“FROM 16”、dollarshaveclub产品图上的“30 mL | 1 US FL OZ”和“177 mL / 6 US FL OZ”、drinkolipop的“12 fl oz (355 mL)”——净含量、规格、起售价,全在像素里。 这类信息恰好是结构化数据审计里最该核对的那几个字段 (https://zhangwenbao.com/schema-extractor-structured-data-audit-guide.html),也是AI回答比价和选购问题时最需要抓的东西。 ## 有几个站把整段举证材料画进了图里 把“只在像素里”的行按站翻一遍,会发现漏掉的不是随机的字,它们高度集中在四类上,而且四类都是最需要被机器看见的那种。 第一类是举证材料。govee首页上有一张1288×247的窄图,OCR从上面读出了完整的数据来源脚注:来自Euromonitor International的销售额口径、统计范围是2025年美国零售渠道的家用户外常亮照明、调研完成于2026年6月。 这段话是用来支撑它那个“全美第一”宣称的全部依据,而它的alt是空字符串。同一张图上那句“IN THE USA”也只在像素里。baseus那张榜单图同理,标题写进了alt,但“Source: Omdia Smart personal audio estimate (sell-in) H1 2026”这行来源没有。 第二类是第三方背书。eufy首页有一整块奖项与媒体评价:T3、CNET、WIRED、IFA的奖章排成一行,下面三个气泡框里是TechRadar和tom's guide的原话引用。整块是一张图,alt是空字符串。这是标准的经验、专业、权威、可信材料,人一眼能看到,机器读到的是零。 第三类是产品的硬参数与承诺。avocadogreenmattress那张720×700的图上写着“Made with ≥95%”,后面接的是什么材料比例,OCR只读到这里,页面文本里也没有下文,而那张图连alt属性都没有。 第四类是法律与合规声明。casetify的联名banner上印着“2026 Mars or Affiliates. M&M'S Brand used under license.”,alt写的是“M&M'S | CASETiFY”。flyingtiger的三张首页图上都印着“AI MODIFIED”——这是图片是否经过AI处理的披露标签,本身就是给人看的合规声明,结果它自己也只存在于像素里。 还有一类没法归进上面四类但很有意思:charleskeith的中文首页banner上是两行运营公告,“新进行时,官网升级中!”和“了解商品详情,欢迎扫码前往小程序商城选购”。这是整条业务通知,alt是空的。everlane更彻底,一张710×888的图里画着完整的品牌可持续性叙事,从“Everything we make has an impact.”开始一共七八行,连alt属性都没有。 把这四类摆在一起,规律就很清楚了:越是需要举证、越是要显得郑重、越是排版复杂的内容,越容易被整块交给设计,也就越容易掉出文本通道。而这恰好是做外贸B2B时最看重的那批视觉信任信号 (https://zhangwenbao.com/b2b-image-authenticity-trust-6-types-real-photos-eeat-visual-signal.html)。 ## 那四分之一做对的站,是怎么做对的? 114个站里有29个一行都没漏。这个数字第一眼像好消息,拆开看就不是了。 29个里有19个的做法是:首页大图上压根没有字。它们的图就是照片,所有文案都用HTML排在图的旁边或上面。这不算解决了问题,这算绕开了问题——虽然从结果上说,绕开也确实有效。 真正做到“图上有字、文本层里也有”的只有10个:awaytravel、brompton、cluse、fahertybrand、fromourplace、gymshark、ikea、ruggable、stokke、wusthof。而且它们图上的字都不多,最多的cluse也只有6行。 换句话说,在这个样本里,没有一个站是靠把大量图上文字逐句补进alt来过关的;过关的路径要么是不往图上写字,要么是图上只写一两句而且那一两句本来就在HTML里。这对落地方式是个提示:与其事后补alt,不如在设计评审那一步就把“这句话要不要进文本”定下来。 顺带把样本量的事说清楚。这次是114个站、815张图的小样本,HTTP Archive那边的Web Almanac无障碍章节 (https://almanac.httparchive.org/en/2024/accessibility)覆盖一千多万个站,两边测的东西不同——它测alt有没有、是不是空的,不测alt和图上文字对不对得上。但有一个数字正好能对上:那份全量报告里,有alt属性的图片中30%的alt值是空的,而且这个比例还在往上走(2022年是27%)。这次只取首页最显眼的几张大图,测出来是32.5%。 两个口径几乎一样,说明一件事:空alt不是小图和图标的专利,页面上最大最重要的那几张图,同样有三分之一被声明成了装饰。顺便一提,那份报告里通过Lighthouse替代文本检查的图片比例从2022年的59%涨到了2024年的69%,alt写没写这件事在变好,写没写对这件事没跟上。 ## AI搜索时代,这一层为什么更要命? 传统搜索里,图上的字漏掉,损失是有限的。搜索引擎还有一大堆别的信号可用:标题、正文、内链锚文本、外链、历史表现。它对图片本身也有自己的理解能力——Google在图片SEO最佳实践文档 (https://developers.google.com/search/docs/appearance/google-images)里的说法是,它会结合alt文本、计算机视觉算法和页面内容来理解一张图的主题。注意这句话的落点是“主题”,不是“把图上的字抄进索引当正文用”。 生成式检索的路子不一样。它先把页面切成段落级的可引用单元,再决定引用哪一段。被检索和被引用是两套不同的机制 (https://zhangwenbao.com/ai-citation-retrieval-content-strategy.html),而这两套都吃文本。一张图在这条流水线上贡献的是零个字符——它不参与切段,不参与向量化,也不会成为被引用的那一句。 后果是很具体的。当用户问“这个牌子在美国是第几”,govee首页那段Euromonitor来源就是最该被引用的举证,但它不在文本里。当用户问“这款牙刷刷头多久换一次”,quip首页banner上印着牙医建议每3个月换一次刷头,同样不在文本里。从1亿条引用数据看被引源分布 (https://zhangwenbao.com/most-cited-domains-ai-search-citation-sources.html)就能看出,能被引的前提永远是先能被读到。 更麻烦的是它对品类层面的主题归属 (https://zhangwenbao.com/ai-visibility-topic-ownership-category-level.html)有系统性影响:如果你把品类里最有分量的那几句话都画成了图,模型在总结这个品类时,用的就是别人家的句子。 这也是GEO技术端那三步——抓得到、读得懂、引得出 (https://zhangwenbao.com/geo-technical-optimization-crawl-render-extract-guide.html)里最容易被跳过的一环:大家都在盯抓取和渲染,很少有人回头检查渲染完之后那些字到底进没进文本。 ## 自己站上怎么查,三步就够 不用搭这套实验台,手工版十分钟能跑完,而且结论八九不离十。 第一步,用全选复制当粗筛。打开首页,Ctrl+A、Ctrl+C,粘到纯文本编辑器里。然后对着浏览器里的页面往下滚,把屏幕上看得见、粘贴稿里搜不到的句子记下来。这一步能抓出绝大多数问题,因为它模拟的就是纯文本提取器看到的东西。 第二步,重点盯四类内容。按上面那个分类挨个找:有没有奖项徽章、有没有媒体引用、有没有数据来源脚注、有没有净含量或成分比例、有没有价格或折扣数字、有没有授权或披露声明。这四类只要出现在图上,就必须在文本里再写一遍。 第三步,把alt逐条对着图重写。判据只有一条:如果这张图上印着字,alt里就必须出现那些字;如果这张图上没有字,alt才可以是描述画面,或者干脆留空。反过来说,看到一张带字的图配着一个空的alt,那就是一处确定的漏。批量体检alt与图片属性的做法 (https://zhangwenbao.com/image-alt-checker-batch-audit-cls-accessibility-guide.html)可以把这步自动化到只剩人工判断。 补一个更省事的做法:很多站的这类内容其实已经在CMS里存过一份了——产品的净含量在商品字段里,媒体引用在“媒体报道”那个模块里,奖项在关于我们页面上。问题只是首页那张图没有引用它们,而是重新排了一遍版。把已有的字段渲染成HTML再叠图,比让设计重新导出一张图省事得多,也不用改视觉。 ## 哪些字本来就该留在图里? 这篇不是在说“图上一个字都不能有”。有几类情况,字留在图上是对的,硬要搬进文本反而添乱。 产品包装上本来就印着的字——瓶身标签、成分表、条形码——那是拍摄对象的一部分,不是页面在说话。这类图的alt应该描述这是什么产品,而不是把标签逐字抄一遍。上面那些净含量之所以算漏,是因为它同时是页面在承诺的规格,而页面别处没写。判据是这句话是不是页面自己的主张,不是它出现在哪。 纯粹的装饰性文字,比如背景里虚化的招牌、模特衣服上的品牌字样、街景里的路牌,本来就不承载信息,把alt写成空字符串是正确写法,抄进去只会污染文本。 logo里的品牌名也不用重复抄。品牌名在title、导航、页脚、结构化数据里已经出现过很多遍,这次实测里logo文字基本都被词级口径判为“文本层有”,符合预期。 另外提醒一句反向的坑:不要为了补齐而把图上的字塞进alt再堆关键词。Google在同一份文档里明确说了,往alt里塞关键词会带来糟糕的用户体验,还可能被当成垃圾信号。alt本来就不是网页排名的杠杆 (https://zhangwenbao.com/image-alt-text-ranking-factor-myth.html),它的价值在可读性和图片搜索这两条线上,别指望它做别的。 顺带说,这一层的问题不止图片一种形态。规格书在屏幕上是好好的泰语、机器复制走却是另一串字符 (https://zhangwenbao.com/minor-language-pdf-text-layer-extraction-failure.html),PDF要被索引得先满足一堆条件 (https://zhangwenbao.com/pdf-seo-complete-guide-google-indexing-6-real-optimizations.html),视频里说出口的话也得有文字版才算数 (https://zhangwenbao.com/video-seo-2026-main-content-ai-citation.html),连OG图上的emoji都会在断行时裂成两个方块 (https://zhangwenbao.com/og-image-maker-linebreak-surrogate-square-crop-guide.html)。同一个道理:换了介质,字就掉出了通道,而且换的时候不会有人提醒你。 要判断自己站上还有多少这样的地方,可以从页面结构与语义标签的整体体检 (https://zhangwenbao.com/structure-analyzer-html-skeleton-6-dimension-audit-guide.html)入手,再配合把内容当结构化数据来生产的那套做法 (https://zhangwenbao.com/content-engineering-structured-content-ai-search.html),把“这句话存在哪个字段里”这个问题在生产环节就定死,而不是在首页改版时临时决定。AI可见性审计里最常漏的那一层 (https://zhangwenbao.com/integrity-graph-relationship-completeness-ai-visibility-audit.html)也是同一个毛病:能被读到的东西堆了很多,真正要紧的那几句反而没在里面。 最后一件事,改完要验。改alt、把图上文字搬进HTML这类动作,效果不会立刻反映在排名上,但用加上去再撤下来的对照方式测AI引用 (https://zhangwenbao.com/ai-citation-split-test-causation-proof.html)是能看出因果的。做之前先把当前状态存一份,后面才有得比。 ## 常见问题解答 ## 搜索引擎真的读不到图片里的文字吗? 准确的说法是:它有办法理解图片的内容,但不会把图上的文字当作页面正文来索引。Google的官方表述是结合alt文本、计算机视觉和页面内容来理解图片的主题。理解主题和抽取字符是两件事——它可能知道这是一张打折海报,但那个具体的折扣数字不会进入页面的文本索引,也不会成为可被引用的句子。生成式检索这边更直接,它切段和向量化用的是文本。 ## 把图上的文字全部抄进alt,是不是就解决了? 对“不得不用文字图片”的场合,这是规范要求的做法。但不要把它当成通用解法。alt是一句替代文本,长段落塞进去对屏幕阅读器是灾难,对搜索引擎也容易被判为堆砌。更好的顺序是:能用HTML加CSS做出同样视觉的,就用HTML;实在要用图,再让alt承载图上那句话;如果那句话很长,把它同时写进图片附近的正文里。 ## 用CSS背景图放文字,和用img有区别吗? 有,而且更糟。CSS背景图连alt这个位置都没有,没有任何标准通道可以给它挂替代文本。这次实测里6.1%的大图是背景图形式。如果背景图上印着字,只能靠在附近放一段可见文本或视觉隐藏文本来补,没有别的办法。 ## 为什么这次要下载原图,而不是直接截屏? 因为截屏会把叠在图上面的HTML文字一起拍进去。那些字本来就在文本层里,OCR读到之后一比对当然能找到,结果就是“文本层覆盖得很好”的假象。下载原始图片文件,读到的字才确定来自像素本身。这个选择让数字变得更保守也更可信。 ## OCR会不会把纹理认成字,把结果做高? 会,所以这次做了三道防线。一是负例测试,纯噪点、渐变、纯色三张图的误报都是0。二是词过滤,长度不足3个字符、不含元音又不是数字的词一律丢掉,布料缝线被认出的那些两字母碎片过不了这关。三是置信度敏感性检查,门槛从0.6提到0.8,核心结论只动了2.2个百分点。人工标注的24张真图也验证过一轮,用来定的正是换引擎这个决定。 ## 产品图上包装自带的文字,也算漏吗? 看那句话是不是页面自己的主张。瓶身上的品牌名、条码、装饰性文案属于拍摄对象,不算。但净含量、成分比例、功效声明这类东西,如果页面在别处没有写,那它事实上就是页面唯一一次说出这个规格,此时它算漏。判据不是这个字印在哪里,而是页面还有没有第二份。 ## 这次的样本能代表所有独立站吗? 不能,得说清楚边界。样本是131个有一定规模的电商与消费品牌站,实际进入统计的114个,只看首页,桌面端1440宽视口,每站最多取8张最大的图。小型站、B2B站、内页、移动端都没覆盖,OCR只跑了英文与中文。可以拿来判断这个问题普遍到什么程度,不适合当成行业基准值引用。 ## 权威参考资料 ## 运费写着发到加拿大,退货政策上只有美国这一个国家 - URL:https://zhangwenbao.com/product-offer-geographic-scope-audit.html - 分类:电商SEO - 发布:2026-08-23 | 更新:2026-09-04 - 摘要:一件商品标价49美元,这个价钱管到哪儿为止?页脚和配送页上写着答案,机器读的那份结构化数据里通常什么都没有。空着的那一栏,机器拿到的不是不适用,是不知道。 - 关键词:结构化数据,电商SEO,国际SEO > **TLDR**:摘要:70个能从产品页静态HTML里读到商品结构化数据的海外品牌站,价格和货币的填写率是100%,而写明这份报价管哪些国家的只有11个。更值得看的是这11个里面的分布:运费声明的国家数中位数是1,退货政策的适用国全是单一国家,10个写US、1个写SG,没有一个写了两个以上。与此同时,这批站里有人在hreflang里声明自己服务57个地区,有人声明200个。schema.org准备了eligibleRegion、ineligibleRegion、availableAtOrFrom三个专门用来划地域边界的字段,70个产品页的使用次数是0。 > 摘要:70个能从产品页静态HTML里读到商品结构化数据的海外品牌站,价格和货币的填写率是100%,而写明这份报价管哪些国家的只有11个。更值得看的是这11个里面的分布:运费声明的国家数中位数是1,退货政策的适用国全是单一国家,10个写US、1个写SG,没有一个写了两个以上。与此同时,这批站里有人在hreflang里声明自己服务57个地区,有人声明200个。schema.org准备了eligibleRegion、ineligibleRegion、availableAtOrFrom三个专门用来划地域边界的字段,70个产品页的使用次数是0。 一个商品页上的结构化数据,本质上是一份写给机器看的报价单。价格多少、什么货币、有没有货——这三样几乎人人都填。 但报价单还有一栏,很多人从没想过要填:这份报价对谁有效。 这一栏不是可有可无的修辞。一件商品标价49美元,含不含运费、发不发到你所在的国家、买回去能不能退,在不同的国家是完全不同的答案。人看页面的时候,这些信息散落在页脚、配送页、结账第三步;机器读结构化数据的时候,只认那几个专门的字段。字段空着,机器拿到的不是“不适用”,而是“不知道”。 这次要量的就是这一栏——一份报价的地域作用域到底写到哪儿,边界之外那些买家发生了什么。方法是从131个海外品牌站的sitemap里各挑一个商品页抓下来,把结构化数据整段拍平,逐个字段核。 ## 一份报价里,能写地域的字段其实不止一个 先把可用的工具摆出来。围绕商品报价这一层,schema.org提供的地域相关字段至少有六个,各管一段——运费声明这一类 (https://schema.org/OfferShippingDetails)和退货政策这一类 (https://schema.org/MerchantReturnPolicy)各自还带着一组子字段: 字段 | 挂在哪一层 | 它划的是什么边界 | shippingDetails的shippingDestination | Offer下的运费声明 | 这个运费方案发往哪些国家 | hasMerchantReturnPolicy的applicableCountry | Offer下的退货政策 | 这份退货政策适用于哪些国家的买家 | returnPolicyCountry | 同上 | 退货要寄到哪个国家(和上一条不是一回事) | eligibleRegion | Offer | 这份报价在哪些地区有效 | ineligibleRegion | Offer | 这份报价在哪些地区无效 | areaServed | Organization等 | 这个组织服务哪些地区 | 这六个字段不是同义词的堆砌,它们各自的主语不一样。前三个的主语是“这一份报价”,中间两个的主语也是报价但表达的是可用与不可用两个方向,最后一个的主语是“这家公司”。填错了层,说的就不是同一件事。 层次这件事在结构化数据里反复咬人。小语种页面的正文越本地化越好、结构化数据里却要反着写回国际格式 (https://zhangwenbao.com/minor-language-structured-data-inlanguage-locale-schema.html),讲的也是同一类分寸:给人看的那一层和给机器看的那一层,规矩是两套。 ## 70个产品页是怎么筛出来的? 分母这件事必须先摊开,因为这类审计最容易犯的错就是把“我没抓到”算进“它没有”。 131个站,先从robots.txt里找sitemap入口,再从sitemap索引里挑出商品那一份,取一条商品URL抓回来。走到最后能读到Product或ProductGroup声明的,是70个。 结果 | 站数 | 拿到了带商品声明的产品页(本文的分母) | 70 | 连一条商品URL都没找到(sitemap取不回或形态不匹配) | 38 | 页面取回来了,但没有商品类型的声明 | 12 | 页面取回来了,一段结构化数据都没有 | 9 | 找到URL但页面取不回(403等) | 2 | 那38个不是“没有结构化数据”,只是我这套取样方式够不着——有的站robots.txt对这个客户端关门,有的商品URL形态特殊。它们不进任何比例。中间那21个(12加9)倒是可以单独记一笔:页面确实拿回来了,商品声明却是空的。这类“页面在、内容读不到”的情形有好几种成因,页面体积那次46个电商站的实测 (https://zhangwenbao.com/html-byte-budget-crawl-truncation-audit.html)量过其中最物理的一种。 还要说明一件事:配送与退货承诺说给人听还是说给机器听 (https://zhangwenbao.com/shipping-return-promise-human-vs-machine-readable.html)这个问题,之前用136个站的首页量过一轮,答案是63对11。这次不重复那笔账。这次问的是下一个问题——那些确实写给了机器的,写清楚管谁了吗。 ## 那11份运费声明,管的是几个国家? 先看这70个产品页各层字段的填写情况: 字段 | 有的站数 | 占70 | priceCurrency(这钱是什么币) | 70 | 100% | price(多少钱) | 69 | 98.6% | availability(有没有货) | 68 | 97.1% | seller(谁在卖) | 24 | 34.3% | hasMerchantReturnPolicy(退货政策) | 13 | 18.6% | shippingDetails(运费方案) | 11 | 15.7% | applicableCountry(退货管哪国) | 11 | 15.7% | shippingDestination(发往哪国) | 10 | 14.3% | returnPolicyCountry(退到哪国) | 2 | 2.9% | areaServed(服务哪些地区) | 2 | 2.9% | 真正要看的是下面这张。写了shippingDestination的10个站,各自写了几个国家: 站点 | 写了几个国家 | 写的是 | outdoorvoices.com | 2 | US、CA | bollandbranch.com | 1 | US | brooklynbedding.com | 1 | US | graza.co | 1 | US | hellotushy.com | 1 | US | jackery.com | 1 | US | ruggable.com | 1 | US | taylorstitch.com | 1 | US | ikea.com | 1 | EE(爱沙尼亚站) | flyingtiger.com | 0 | 引用了另一个块,块里没写国家 | 中位数是1。最大值是2,还是唯一的那一个。 退货政策那一栏更整齐:11个写了applicableCountry的站,没有一个填了两个以上的国家——10个写US,1个写SG。 这个“1”值得停一下。它不必然是错的:一个只做美国本土生意的品牌,运费方案和退货政策都只覆盖美国,写1个国家是诚实的。所以下面几节要做的事,是把“只写1个”和“实际只卖1个国家”这两件事分开量。 ## schema.org给了三个专门划地域边界的字段,为什么一个都没人用? eligibleRegion的用途是直说“这份报价在这些地区有效”,ineligibleRegion是反过来“这些地区不适用”,availableAtOrFrom则是“从哪里发出”。三个字段的语义比运费和退货更靠近“作用域”这件事本身。 70个产品页里,这三个字段的出现次数分别是0、0、0。 零使用的原因大概不难猜:主流搜索引擎的商品结构化数据文档 (https://developers.google.com/search/docs/appearance/structured-data/product)里,推荐字段清单上没有它们。文档推荐什么,工具生成什么,模板里就有什么。schema.org是一套完整的词汇表,但真正被填的永远是被某个下游消费者点过名的那几个格子。 这个“没人点名就没人填”的规律,在别的机器可读界面上也一样。接口和feed这类地址连head标签都没有 (https://zhangwenbao.com/machine-readable-endpoints-x-robots-tag-noindex-audit.html),能用的表达手段本来就少,最后能被用起来的就更少。 这带来一个连锁后果:整个行业表达“地域适用范围”的能力,就这样被压缩到了运费和退货这两个字段上。而这两个字段的主语是运费方案和退货政策,不是报价本身。想说“这个价格只对欧盟买家有效”,目前没有一个被广泛消费的字段能表达它。 ## 声明服务200个地区的站,在产品页上写了哪个国家? 把地域这件事的另一份声明接过来对一下就清楚了。hreflang是站点自己列出的“我为哪些语言和地区准备了页面”,它是站点对市场范围最公开的一次表态。 70个产品页里带hreflang的有33个,声明的地区数中位数是5,最多的一个是200。 站点 | hreflang声明的地区数 | 产品页写明的运费国 | 写明的退货国 | liquiddeath.com | 200 | 0 | 0 | aloyoga.com | 192 | 0 | 0 | glossier.com | 186 | 0 | 0 | nomadgoods.com | 57 | 0 | 1 | rothys.com | 34 | 0 | 0 | beistravel.com | 30 | 0 | 0 | allbirds.com | 26 | 0 | 0 | govee.com | 22 | 0 | 0 | rapha.cc | 19 | 0 | 0 | mejuri.com | 15 | 0 | 0 | ruggable.com | 11 | 1 | 1 | 把这张表读透一点:公开声明自己服务2个以上地区的站有18个,其中在产品页上写明了报价管哪个国家的,只有ruggable和nomadgoods两个。剩下16个站的产品页上,那一栏是空的。 而写了的那两个也不能算写全。ruggable在hreflang里列了11个地区,产品页上的运费和退货各写了1个国家,作用域差了一个数量级。这不是笔误,是这套字段的常见用法——同一个模板输出所有地区的页面,那个国家码来自当前这一版的市场设置,其他10个市场各有各的页面、各有各的那一行。问题是抓到任何一版的机器,只会看到一个国家。 这份声明还有一个前提性的毛病:两边得互相指认才算数。互指对不上的时候,多半是另一边先改的 (https://zhangwenbao.com/hreflang-cluster-reciprocity-third-party-audit.html),而单向标注在多数消费方眼里等同于没写。 顺便说一句,hreflang这份声明本身也常常不准。236条地区声明背后只有6个真页面 (https://zhangwenbao.com/hreflang-region-code-declared-vs-real-pages.html)那次实测量过这个落差,所以上表左边那一列该读成“站点自称的市场范围”,不是“实际能下单的国家”。 ## 运费写着发到加拿大,退货政策上只有美国这一个国家 七个站同时写了运费国和退货国,可以两两比对。结果是6个一致,1个不一致。 那个不一致的是outdoorvoices:运费方案写着发往US和CA,退货政策的applicableCountry只写了US。 这一个字的差别,落到具体的人身上是这样的:一个加拿大买家,机器告诉他能收到货;等他想退,机器手上那份政策不覆盖他。它不等于“不能退”——真实的退货政策多半在网站的某个页面上写着,人工客服也一定有答案。它等于“机器不知道能不能退”。 这两件事的差别,在人来问的时候不大,在机器替人问的时候很大。人会接着往下翻,机器不会,它只会把这一栏留白,或者在比较几家店的时候,把留白的那家排在写清楚的那家后面。 这类“承诺的适用范围比承诺本身更难说清”的形态,在配送时效上也一样。你写的是2个工作日,他记的是周四 (https://zhangwenbao.com/checkout-delivery-date-unfinished-calculation.html)说的是同一件事的时间维度:一个没算完的承诺,双方各自补完了后半句,补出来的还不一样。 ## 一个北美牌子的退货政策,为什么写着新加坡? 前面那11个退货国里,唯一不写US的是nomadgoods,写的是SG。这个站是加州的配件品牌,它的产品页URL没有任何地区前缀,hreflang里en-US那一条自指向的正是我抓到的这个地址。 看到这一条的第一反应是“模板默认值填错了”。但这个解释经不起一次简单的复核。 我把它hreflang里的四条地区URL——美国、英国、新加坡、加拿大——挨个抓了一遍: hreflang | URL | 抓回来的货币 | 抓回来的退货国 | en-US | /products/… | SGD | SG | en-GB | /uk/products/… | SGD | SG | en-SG | /sg/products/… | SGD | SG | en-CA | /ca/products/… | SGD | SG | 四个不同的地址,四份一模一样的答案。这套地区版本是怎么被选定的,平台自己的本地化文档 (https://shopify.dev/docs/api/liquid/objects/localization)里写得很清楚:地址只是其中一个输入,访客位置是另一个。所以填错的不是模板,是我的出口线路把这套页面整体切成了新加坡版本——那几段地区路径根本没被当回事,决定这一页内容的是请求方的位置。 这条尺子偏差影响的不止一个站。整批数据里priceCurrency出现SGD的有9处,其中相当一部分并不是这些品牌真的在用新加坡元定价,而是我这次的观测位置留下的指纹。另一个mackweldon就更直白:响应里带回了一个写着SG的本地化Cookie,页面语言标成en-SG,货币SGD,而它结构化数据里的areaServed写的是US。 把这件事说穿了,它其实是本文主题的一个更狠的版本:你以为一份报价的作用域是由地址决定的,而在这些站上,它是由访客的位置决定的,地址和hreflang两份声明都不知情。 ## 地区网址到底管不管用?我拿hreflang挨个试了一遍 上一节冒出来的问题必须回答清楚:这种“地址说了不算”的站到底是少数还是多数?只看一个样本就下结论,是在替自己找证据。 所以对全部28个有多条地区URL的站,各抓最多4条不同地区的商品页,比对拿回来的货币。判据是: - 各URL回不同货币,说明报价的作用域由地址决定,地区站是真的 - 各URL回同一种货币,说明作用域由请求方位置决定,地址只是摆设 第一版结果是17比9。但这个数字有个漏洞,而且漏得很难看:欧元区十几个国家共用一种货币——如果我抽到的四条恰好是德国、意大利、西班牙、荷兰,那么四条都回EUR是完全正常的,它证明不了任何事。我把这类“抽到的地区本来就同币”的样本单独摘出来,重新分类: 判定 | 站数 | 含义 | 地址决定 | 15 | 不同地区URL回不同货币,地区站是真的 | 位置决定 | 3 | 跨了不同币区的URL,货币仍然一样 | 币区不可分 | 8 | 抽到的地区本来就共用一种货币,判不了 | 样本不足 | 2 | 能读到货币的URL不够2条 | 修正之后,“位置决定”那一栏从9掉到3。掉下去的6个全是欧元区内部的抽样。方向值得留意——错的那一版恰好指向“更有故事”的那一边,这种时候第一个该被怀疑的是尺子,不是结论。 那3个站是beistravel(US、GB、CA、BE四个不同币区全部回USD)、harrys(US和GB都回USD)、nomadgoods(US、AU、CA、GB全部回SGD)。 一套模板输出几十版页面这件事本身也有代价。一个模板生成十种语言,字符层看不出重复、信息层十份一模一样 (https://zhangwenbao.com/multilingual-template-ten-languages-duplicate-content-risk.html),地域字段只写当前那一版的国家码,正是这个形态在数据层的表现。 还有一个更细的观察:在“地址决定”那15个站里,有4个的默认版本(没有地区码的那条根URL)仍然是按位置切的,只有带地区码的地址才严格按地址走。也就是说同一个站上,两种规则同时在跑,取决于你落在哪个地址上。这层复杂度会一路传导到收录——hreflang里那些语言版本被当成规范页的别名 (https://zhangwenbao.com/hreflang-alternate-url-alias-not-indexed.html)说的就是它的下一站。 ## 说无限期退货又写着30天,这份声明该信哪一句? 把13份退货政策原样铺开,还能看到几处内部打架的写法。 站点 | 退货窗口类型 | merchantReturnDays | 问题 | dreametech.com | 无限期退货窗口 | 30 | 两个字段互斥,一个说没有期限,一个说30天 | buckmason.com | 有限期 | 365 | 一致 | taylorstitch.com | 有限期 | 21 | 一致 | 其余8个 | 有限期 | 30 | 一致 | fromourplace.com | 字段在,值是空数组 | — | 写了等于没写 | 另外6个站把运费和退货政策写成了对同页另一个块的引用(形如指向某个内部锚点),块本身在同一页的别处。这种写法是合法的,只是任何一个不做引用解析的读取方,看到的就是一个空壳。我第一版的统计脚本就是这么被绊了一下,把引用当成了内容。 还有一个小得几乎不值一提、但很能说明这些字段是怎么被生成的细节:availability这个字段在样本里出现了4次带前导空格的取值,写成空格加InStock。它多半来自某段模板拼接时没有裁掉的换行。这类字符级的瑕疵在自填字段里非常常见,商品属性被静默丢弃 (https://zhangwenbao.com/product-list-item-attributes-silent-rejection.html)那篇量过它们最终会被消费方怎么处理——通常是整条丢掉,不给任何提示。 ## areaServed写在公司那一层,和写在报价那一层,不是一回事 70个产品页里写了areaServed的只有2个,正好是两种典型用法。 rothys写的是35个国家码的一整串,从阿根廷到美国,覆盖了它hreflang里那34个地区还多一个。这份清单是准的,问题在于它挂在组织那一层——它说的是“这家公司服务这些地区”,不是“这件商品的这个价格在这些地区有效”。对一个只想知道“我这儿能不能买、多少钱”的读取方来说,这份清单帮不上忙。 mackweldon写的是单个US。而如前所述,它同一份响应里带回的本地化Cookie写着SG,页面语言标着en-SG。这一页上“这家公司服务美国”和“这一页是给新加坡访客的”并排放着,两句话各自都没错,合起来读却讲不通。 这就是层次问题的实际后果:组织的服务范围、页面的目标地区、报价的适用国家,是三个不同颗粒度的边界,它们可以互不包含。把其中任意一个当成另外两个用,读的人不会报错,只会得出一个错的结论。 同一份东西在不同层上各写一遍、各写各的,是结构化数据里的常见病。首页的title、og:title和H1说的常常不是同一件事 (https://zhangwenbao.com/self-description-copies-title-og-h1-schema-audit.html),量的是同一种毛病在描述层的样子。而在贸易那一侧,责任边界写在哪一刻交接是有成文规则的——FOB还是CIF,风险在哪一刻从你手里交出去 (https://zhangwenbao.com/incoterms-risk-transfer-cost-boundary-fob-cif.html),那套术语存在的全部理由就是不让边界含糊。 ## 边界之外的买家,AI购物代理替他们看到了什么? 这一栏空着,在过去只影响商品富媒体展示里的运费和退货那两行小字——商品列表那份文档 (https://developers.google.com/search/docs/appearance/structured-data/merchant-listing)写明了没提供时会退回到商家后台的配置。现在影响的东西多了一层。 当买家把“帮我找一双能发到加拿大、支持免费退货的鞋”这句话丢给一个AI助手,助手要做的事是从一堆商品数据里筛出符合条件的。它筛的依据只能是它读得到的字段。运费国和退货国那一栏空着的商品,在这个筛选里的处境不是“被排除”,而是更尴尬的“无法判断”——保守的实现会跳过它,激进的实现会猜一个,而猜的依据往往是站点的其他信号,比如货币、语言、公司地址。 更麻烦的是,这些代理拿到的常常不是实时页面,而是某个时点抓下来的快照。前面那个“内容跟着请求方位置走”的现象在这里会被放大:抓取端在哪儿,快照里就是哪个市场的价格和政策,而快照上不会写着“这是从新加坡节点看到的版本”。 而且这类筛选很不稳。AI推荐名单只要被追问一句就少掉六成 (https://zhangwenbao.com/ai-recommendation-churn-follow-up-question.html),追问里若带着国家或运费条件,字段空着的商品最先掉出去。 这一层的信息会怎么被重新组织、又会被派成什么角色,同一条来源在不同引擎里被派成不同角色 (https://zhangwenbao.com/ai-source-roles-brightedge-citation-study.html)那篇拆过机制;具体到商品页该补哪些结构化信息才让机器读得懂,面向AI推荐的产品页优化 (https://zhangwenbao.com/ai-ready-product-page-optimization.html)列过一份清单。地域字段是那份清单里最容易被跳过、也最容易被误读的一组。 ## 自己站上这几层地域声明,怎么排查? 不用等做全站改造,先拿一个商品页做四件事。 - 把这一页的结构化数据整段拍平,搜六个字段名:shippingDestination、applicableCountry、returnPolicyCountry、eligibleRegion、ineligibleRegion、areaServed。一个都搜不到,说明这一页从没表达过地域范围。 - 数一数自己hreflang里有几个地区,再和上一步搜到的国家数放在一起看。前者远大于后者,就是本文量到的那个落差,你的每一版页面都只说了自己那一个市场。 - 换一条线路再抓一次同一个URL。用一台在别的国家的服务器,或者任何一个能改变出口位置的方式,比对两次拿到的货币和国家码。如果变了,说明你的地址不是决定内容的那个变量——这件事你自己不测,抓你的机器也不会告诉你。 - 检查引用式写法。如果运费和退货政策是用锚点引用同页另一个块,确认那个块真的存在且填了内容,并且做好被不解析引用的读取方看成空的准备。 做完这四步,多半会发现真正要改的不是模板里少写了一个字段,而是没人想清楚“这份报价管谁”这句话应该由哪一层来回答。是每个市场的页面各说各的,还是在一份数据里把所有市场列全,这是个架构选择,不是填空题。保哥自己给客户做的那次盘点里,最后卡住的也是这个问题——运营部门认为退货政策是全球统一的,法务给出的版本按地区分了三档,而模板里只有一个国家码的位置。 如果你还要把商品数据喂给比价平台或者广告渠道,那就是又一份要维护的清单——站上加一门语言是加一套模板,喂给平台的那份数据要多一整份文件 (https://zhangwenbao.com/minor-language-product-feed-language-fields.html),地域字段在那份文件里通常是必填项,比页面上还严。生成hreflang本身也有坑,生成器给的sitemap代码粘上去往往是单向标注 (https://zhangwenbao.com/hreflang-generator-sitemap-return-tag-bidirectional-guide.html)。 顺带提一句排查顺序:这几层声明里最先该对齐的是hreflang和实际能下单的市场,其次才是产品页字段。上游那份清单本身如果就是虚的,下游填得再全也只是把错误抄了一遍。这条链路怎么按模板抽样查完,电商SEO审计按模板抽样 (https://zhangwenbao.com/ecommerce-seo-audit-template-level-sampling.html)那篇给过一个能在半天内跑完的做法。 ## 常见问题解答 ## 产品结构化数据里的运费和退货字段,不写会怎样? 不会报错,也不会被判罚,但商品富媒体展示里的运费和退货那两行就没有数据来源,搜索引擎要么留白、要么退回到商家后台的配置。更实际的影响在AI购物助手这一侧:当用户的问题里带着“能不能发到某国”“支不支持免费退货”这类条件时,字段空着的商品在筛选里是“无法判断”,不是“符合”。 ## applicableCountry和returnPolicyCountry有什么区别? applicableCountry说的是这份退货政策适用于哪些国家的买家,returnPolicyCountry说的是退货要寄回哪个国家。两者可以不一样——比如面向欧洲多国销售、但统一退回德国仓。实测70个产品页里写了前者的有11个,写了后者的只有2个,而这2个都是两个字段一起写、且填的是同一个值,说明这个区别在实践中基本没被用起来。 ## 我的站只卖本国,是不是就不用写这些字段? 仍然建议写。只卖一个国家的时候,写上那一个国家码的成本几乎为零,收益是把“只管这一国”这件事明确说出来,而不是留给对方去猜。实测里10个站的退货政策只写US,其中大部分确实是单一市场品牌,这种写法是准确的。真正的问题出在同时服务多个市场却只写一个国家的那些站上。 ## schema.org里的eligibleRegion能不能用来表达报价的地域范围? 语义上完全可以,它就是为这件事准备的。但实测70个产品页的使用次数是0,原因是主流搜索引擎的商品结构化数据文档没有把它列进推荐字段,工具和模板也就不生成它。如果你的目标是被搜索引擎的商品展示消费,先把文档点过名的那几个字段填好;如果目标是让更多类型的读取方理解你的报价范围,补上它没有坏处。 ## 为什么我用工具抓自己的产品页,看到的货币和实际不一样? 很可能是抓取端的位置触发了站点的地区切换。实测中有3个站的多个地区URL全部返回同一种货币,说明决定内容的不是地址而是请求方位置。排查方法是换一条不同国家的线路抓同一个URL,比对结果;如果两次不同,那么任何一个不在你目标市场的抓取端,看到的都是另一个版本的报价。 ## hreflang里声明了很多地区,产品页上只写一个国家,算不算错? 不算写错,但确实是信息缺失。多市场站通常是一套模板输出所有地区的页面,每一版页面上的国家码来自当前那个市场的配置——单看任何一版都是对的,问题是任何一个读取方也只会看到一版。想让完整的市场范围被读到,要么在同一份数据里把多个国家列全,要么确保每个市场的页面都能被独立抓到。 ## 退货政策写成对同页另一个块的引用,会有问题吗? 规范上没问题,被引用的块在同一页里就能解析。风险在于不是所有读取方都会做引用解析——不解析的那些拿到的是一个只有标识符的空壳。实测里有6个站用了这种写法。如果你不确定下游会怎么处理,把内容内联写一份是更保险的选择。 ## 权威参考资料 ## Shopify商品数据有个没人关的出口,一次能拿走250条 - URL:https://zhangwenbao.com/shopify-products-json-open-data-endpoint-audit.html - 分类:电商SEO - 发布:2026-08-17 | 更新:2026-09-06 - 摘要:竞争对手想知道你哪个色号断货、哪批货在清仓、哪些SKU故意不上购物广告,不需要买数据也不需要爬页面。这些答案就写在一个不用登录的地址里,而它出厂就是开着的,商家从没打开过它。 - 关键词:电商SEO,竞品分析,Shopify > **TLDR**:摘要:在103个能判定的电商站上挨个试了几个平台自带的只读地址,45个站的商品目录是敞开的,不用登录、不用密钥,一个链接返回250条。拿到手的22个站样本里有3934个商品、18917个变体,价格、划线原价、SKU、重量、上架日期、商品描述全在,连库存都写着——整体无货率20.1%。更意外的是标签:5300种标签里有52种明显是给内部看的,test、hidden、employee-30、exclude-from-gmc,出现在15个站上。 > 摘要:在103个能判定的电商站上挨个试了几个平台自带的只读地址,45个站的商品目录是敞开的,不用登录、不用密钥,一个链接返回250条。拿到手的22个站样本里有3934个商品、18917个变体,价格、划线原价、SKU、重量、上架日期、商品描述全在,连库存都写着——整体无货率20.1%。更意外的是标签:5300种标签里有52种明显是给内部看的,test、hidden、employee-30、exclude-from-gmc,出现在15个站上。 上一篇量的是站点对“我没有这个”这句话花了多少钱。这一篇反过来:有些东西它其实不打算给你,但你问了,它也照样给。 起因是查一个客户的商品数据同步问题,顺手在浏览器地址栏里给商品页后面加了个后缀,回车。屏幕上刷出一整屏JSON:商品、变体、价格、库存、SKU,一条不落。这个地址没有任何鉴权,任何人都能打开。 那么问题来了:这是个案,还是大家都这样? ## 一个不用登录的地址,能把整个店端出来多少? 还是那131个国际电商站。剔掉首页进不去的17个、以及对任何地址都回200所以判不了的11个,剩下103个可以判定。结果: 端点 | 返回真JSON且200的站 | 它给的是什么 | /products.json | 45 | 商品目录,含全部变体与价格 | /collections/all/products.json | 44 | 同上,走集合路由 | /cart.js | 50 | 当前购物车状态与币种 | /search/suggest.json | 44 | 站内搜索联想,可枚举商品 | /wp-json/wp/v2/posts | 1 | 内容接口 | /graphql(GET) | 2 | 接口探测 | 按平台拆开看更清楚:Shopify站59个里有40个的商品出口是开着的,占67.8%;Salesforce Commerce的10个站一个都没有,Magento的3个也没有。这不是谁配错了,这是平台默认行为的差别。 剩下那5个开着的分布也值得一提:认不出平台的19个站里有3个、Next.js的10个里有1个、BigCommerce的2个里有1个。也就是说这件事并不完全绑定Shopify,只是Shopify把它做成了默认。而那40个开着的Shopify站里,没有一个是店主主动打开的——它出厂就是这样。 接着往深处问:一次能拿走多少?把参数调到平台允许的上限再要一次,41个站给了完整回应,其中22个站一次就吐满250条,中位数正好是250。也就是说这不是它的全部家底,只是单页上限——翻页参数一改,剩下的照给。 ## 怎么确认它真的开着,而不是错误页换了个门牌? 这一步不做,后面所有数字都是废的。 上一篇量到的11个站对任何地址都返回200 (https://zhangwenbao.com/404-page-crawl-budget-byte-audit.html),包括那些编出来的、根本不存在的路径。在这种站上问/products.json,它当然也回200——可那是它的首页外壳,不是商品数据。所以判定得过三道关: - 第一关,首页要能正常打开,否则连样本都算不上; - 第二关,这个站对不存在的地址得会说“没有”,不然它的200一文不值; - 第三关,响应要真能解析成带商品数组的JSON,不能只看状态码和Content-Type。 第三关拦下来的假阳性有13例。最夸张的几个:soundcore.com的集合端点回了3969446字节的HTML,misen.com的接口探测回了5962542字节的HTML,casetify.com的搜索联想回了2615582字节。还有三个站的响应头写着application/json,体积是0字节——类型对了,内容空了。 只看状态码会把这13例全算成“出口开着”,把45虚报成58。接口和feed这类地址没有head标签可写 (https://zhangwenbao.com/machine-readable-endpoints-x-robots-tag-noindex-audit.html),能拿来判断的信号本来就少,就更不能只信一个。 ## 这份JSON里到底写了些什么? 41个站的字段结构完全一致,一个字段都不差。商品对象这一层: - 标识与文案:id、handle、title、body_html(商品详情页正文的完整HTML) - 归类:product_type、vendor、tags、options - 时间:created_at、published_at、updated_at - 素材:images(每张图的完整地址与尺寸) 变体那一层更细:price、compare_at_price、sku、available、grams、taxable、requires_shipping、三个规格维度。 逐个字段看过去,会发现每一个都能拿去干点别的事。sku是你的内部编码,很多品牌的SKU里带着年份、批次、供应商代号;grams是净重,配上尺寸就能反推物流成本结构;vendor和product_type合起来是一张品类地图——22个站的样本里出现了53个不同的vendor、360个不同的product_type,对方的产品线怎么划分、哪条线在扩张,一眼就能看出来。 body_html是商品详情页的完整正文,连同里面的HTML标签一起给。这意味着对手可以整段复制你的文案,也意味着你自己可以拿它做文案质量的批量体检——22个站里描述长度中位数只有456字符,短的那一批基本是一句话带过。用户扫完一屏商品一个都没点开 (https://zhangwenbao.com/product-list-item-attributes-silent-rejection.html)这种事,源头常常就在这几百个字符里。 拿到完整字段样本的22个站合起来是3934个商品、18917个变体。其中95.9%的变体带着SKU,超过一半带着重量。商品描述的HTML长度中位数456字符,最长的一条55238字符;每个商品的图片数中位5张,最多的一个商品挂了250张图。 这里要说明一个分母:第二轮取完整字段的时候只成功了22个站,另外20个把请求挡在外面了——和第一轮返回429的基本是同一批。所以字段统计是22个站的,不是45个站的,往后看到的比例都按22算。 ## 库存和折扣也在里面? 在,而且是逐个变体写着的。 available这个字段18917个变体全都有,没有一个缺省。整体无货率20.1%,站级的无货率中位数是11.5%。分布拉得很开: 站点 | 无货变体占比 | 样本变体数 | everlane.com | 56.2% | 1846 | flyingtiger.com | 56.0% | 250 | decathlon.com | 49.3% | 1381 | liquiddeath.com | 44.0% | 573 | functionofbeauty.com | 0.0% | — | 一半的库存缺口在竞争对手那儿是一览无余的。对方不用买任何数据,写十行脚本每天跑一遍,就能知道你哪个色号断了、断了几天、什么时候补上。 价格这一侧同样完整。compare_at_price就是页面上那个被划掉的原价,18917个变体里有4499个挂着它,占23.8%。能算出折扣的4049条里,折扣率中位数39.3%。挂划线价最多的是everlane.com的1285条、brooklinen.com的762条。 划线价这件事在合规上本来就敏感 (https://zhangwenbao.com/strikethrough-price-prior-price-dtc-discount-display.html),欧盟那边要求你能证明这个原价真的卖过。现在它连同你的全部SKU一起放在一个公开地址上,取证成本对监管方和对竞争对手一样低。 反过来这也是个便利:每单位价格这类需要现算的字段 (https://zhangwenbao.com/unit-price-denominator-eu-rules-product-list.html),用这份JSON里的price和grams两秒就能批量算完,比从页面上抠可靠得多。合规自查、价格带分析、毛利结构复盘,都可以从这里起手。 ## 图片和文案是一整份,不是缩略图 images数组给的是每张图的完整地址,带宽高。22个站的样本里每个商品图片数中位5张,最多的一个商品挂了250张。这些地址都是CDN上的原图,不需要任何令牌就能直接下载——也就是说对方拿到的不是你的商品截图,是你的原始素材。 配上body_html里那份完整文案,一个竞品的商品页可以被整页复刻,只剩下品牌名要换。那几张在页面上没露出来的商品图 (https://zhangwenbao.com/product-gallery-truncated-thumbnail-signposting.html)也在这份数组里,页面上因为版面被截断的图,在JSON里一张不少。 ## 那5300个标签里,有多少是给内部看的? 这是整轮实测里最让我意外的一格。 tags字段本来是给主题模板做筛选和分组用的,理论上都是面向顾客的词。3934个商品上一共出现了44582次标签,去重之后5300种。 常见的那些确实很正常:all-products、most-loved、top-rated、new-releases、season:aw26。但接着往下翻,画风就变了: - over-40-off、over-50-off、over-60-off、over-70-off——完整的折扣分层,每一档都是250次 - winback-codes——挽回优惠码的商品池 - percentageinstockv2、lower-bucket——内部的库存与分层口径,还带着版本号 - employee-30——员工价三折 - costco - titanium——渠道名直接写在标签里 按“像内部运营用语”这个判据数了一遍:52种标签、共出现464次,分布在22个站里的15个上。出现次数最多的几个是test(234次)、exclude_rebuy(39次)、employee-30(29次)、hidden(28次)、exclude_feeds(24次)、exclude-from-gmc(14次)、hide(11次)。 后面那几个尤其值得琢磨。exclude-from-gmc的意思是“这个商品不要推送到Google购物”,exclude_feeds是“不要进任何数据源”。一个用来表达“别公开这个”的标记,自己正躺在一个完全公开的地址上。顺着这批标签能反推出对方的Merchant Center投放策略 (https://zhangwenbao.com/google-free-product-listings-merchant-center.html)——哪些SKU故意不上购物、哪些是清仓池、哪些还在测试。 还有test那234次。测试商品留在生产库里不算罕见,但它们同时也出现在这份对外的JSON里,意味着爬虫和竞品也能看见你的半成品。 ## 除了商品目录,还有哪几扇门也开着? 商品出口是最扎眼的一个,但同一批站上还有两个开得更广。 ## 购物车状态:50个站 /cart.js在50个站上返回了正常的JSON,比商品出口还多5个。它给的是当前会话的购物车:币种、地区、行项目、总价、以及一串购物车令牌。单看一次请求,它只反映你自己的购物车,不含别人的数据,所以泄露风险跟商品目录不是一个量级。 它真正的用处是当探针。这个端点在官方文档里是公开设计 (https://shopify.dev/docs/api/ajax/reference/cart),返回体里的币种和地区字段,能一眼看出这个站给你分了哪个市场——不用去翻页面上那个语言切换器,也不用管它有没有做地区跳转。做国际站排查的时候这比看页面快得多。 ## 搜索联想:44个站 /search/suggest.json开着的有44个。这个端点接受任意关键词,返回匹配的商品、集合和页面。它的问题在于可枚举:拿一份常见词表跑一遍,同样能把商品目录拼出来,只是慢一些、脏一些。 站内搜索结果页本身的SEO处理 (https://zhangwenbao.com/site-search-result-page-landing-collapse.html)是另一个老问题——查得到和查无结果长得一模一样。而这个JSON端点是它的后台,两边的口径经常对不上:页面上说“没有找到相关商品”,接口里却明明返回了三条。排查搜索相关的收录问题时,先比一下这两边。 ## 那几个真正该关的没开 值得说句公道话:这次试的地址里,涉及订单、客户、后台的那些一个都没有开着。/wp-json那一族在103个站里只有1个返回了真数据,Magento的管理接口有2个返回200但都是要鉴权的错误体,/graphql用GET方式探测只有2个给了正常响应。开着的全是平台设计上就打算公开的店面数据,没有一个是配置事故。这件事的性质因此变了:它不是漏洞,是默认值。 ## 上新节奏能不能从这里读出来? 能读一半,另一半是个陷阱。 能读的那一半是created_at。22个站的3934个商品,上架日期距今的中位数是288天,最老的一个是3961天前——差不多十一年。90天内的新品占13.7%。逐站看,brooklinen.com的250条样本落在100个不同日期上、跨度从2018年到上个月,dreametech.com是106个不同日期。把这些日期按周聚一下,对方的上新节奏就是一条画得出来的曲线。 陷阱在updated_at。第一眼看到这个字段的时候我以为捡到宝了:改价、改文案、改库存,不都会刷新它吗?结果一算,3934个商品的updated_at100%落在最近7天内,中位数是1天。 一个字段如果对所有对象都给出同一个答案,它就没有区分度。这个数不是“最近改过什么”,而是平台的内部写入时间——库存变动、缓存刷新、后台任何一次触碰都会把它推到今天。拿它去判断“对手多久改一次价”,会得出“所有人每天都在改”这种一看就不对的结论。 这是这轮实测里第三次尺子出问题。前两次一次是采集速率把被测对象逼成了429,一次是压缩口径把数字夸大了五倍多。这一次它甚至不报错,就是安安静静地给了你一个漂亮的、错的答案。 ## robots.txt在这件事上基本是缺席的 查了这103个站的robots.txt,79个站有,24个没拿到。它们对这几个地址的态度是这样的: 路径 | robots里写了不许抓的站 | 服务器实际开着的站 | /cart.js(含/cart) | 55 | 50 | /search/suggest.json(含/search) | 33 | 44 | /collections/all | 3 | 44 | /products.json | 0 | 45 | 零。一个都没有。购物车和搜索路径倒是被拦得很勤——那是平台默认的robots模板里就带的,跟商家的意志没什么关系。而商品目录这个真正把家底端出去的地址,模板里没写,也就没人补。 这跟robots.txt分组不继承那件事 (https://zhangwenbao.com/robots-txt-group-inheritance-default-audit.html)是同一个成因:绝大多数站的robots是模板给的,商家从来没读过第二遍,更没往里加过东西。模板覆盖到的,站站都有;模板没覆盖的,站站都缺。 就算写了也拦不住人。robots.txt的规范 (https://www.rfc-editor.org/rfc/rfc9309.html)约束的是自愿遵守它的自动程序,浏览器不看它,curl不看它,写脚本的人更不看。Google自己在文档里也把这两件事分得很清楚 (https://developers.google.com/search/docs/crawling-indexing/robots/intro):Disallow管的是抓不抓,不是能不能访问。robots挡不住内容进模型 (https://zhangwenbao.com/ai-training-data-four-paths-robots-txt-limits.html)是同一个道理,Google自己也有一整类抓取器不看robots.txt (https://zhangwenbao.com/google-user-triggered-fetchers-robots-txt.html)。 robots说允许、实际却进不去的情况 (https://zhangwenbao.com/robots-allow-vs-actual-delivery-bot-identity-audit.html)之前量过;这次是反过来的一面:robots没说不许,实际就真的给。 ## 这些地址会不会自己进搜索引擎的索引? 会,而且已经有人踩过。JSON端点返回的是纯数据,没有可以写noindex,唯一能声明的手段是HTTP响应头里的X-Robots-Tag——而这批站里没有一个发了这个头。爬虫抓到它,看到的是一份内容独特、体积可观的文本。 体积这一点值得单独算一笔。页面体积会直接吃掉抓取额度 (https://zhangwenbao.com/html-byte-budget-crawl-truncation-audit.html),而一份250条的商品JSON压缩前动辄一两MB,比同站任何一个页面都大。它被抓一次的开销,抵得上几十个商品页。 更麻烦的是重复内容:这份JSON里的body_html跟商品页正文是同一份文字。喂给平台的那份数据本来就是页面的另一个副本 (https://zhangwenbao.com/minor-language-product-feed-language-fields.html),再加上这个公开端点,同一段文案在你的域名下至少有三个可抓取的位置。 ## 关得掉吗,关掉会不会伤到自己? 先说结论:在Shopify上,商品JSON这个出口在主题层面关不掉,robots.txt.liquid能改的只是robots那份声明 (https://shopify.dev/docs/storefronts/themes/architecture/templates/robots-txt-liquid),改不了服务器给不给。真要收口只有三条路,每条都有代价。 ## 第一条:在边缘层拦 用CDN规则匹配路径,对非浏览器请求返回403或者限速。这条最直接,但会误伤——很多第三方应用、比价插件、你自己的中台同步任务,走的正是这个地址。拦之前先去日志里看一遍谁在调它。 ## 第二条:把敏感字段清出去 标签是你自己写的,这一条完全可控。内部口径、渠道名、员工价、测试标记,全都不该写在tags里,该放到元字段(metafield)里去——元字段默认不出现在这份JSON中。这是投入最小、见效最快的一步。 清理的顺序建议这样走:先把全站标签词表导出来按出现次数排序,人工扫一遍前两百个;把明显是内部口径的挑出来,在主题代码里全局搜一遍有没有被引用;没被引用的直接删,被引用的先在模板里换成元字段判断再删。22个站的样本里内部标签一共464次,摊到单站是几十条的量级,一个下午能做完。 顺带把测试商品也清一遍。test这个词出现了234次,测试数据留在生产库里本身就是隐患,它们同时还会被按模板抽样的审计 (https://zhangwenbao.com/ecommerce-seo-audit-template-level-sampling.html)算进有效商品数,把你的品类分布也带偏。 ## 第三条:接受它,然后利用它 数据本来就是要给顾客看的,价格和库存在页面上也能看到,只是没这么整齐。与其纠结关不关,不如承认这是双向的:你的对手同样开着这扇门。 ## 你该怎么查自己的、怎么看别人的? 自查三条命令,一分钟出结果: curl -s "https://你的域名/products.json?limit=1" | head -c 400 curl -s "https://你的域名/products.json?limit=250" \ | grep -o '"tags":\[[^]]*\]' | tr ',' '\n' | grep -iE 'test|hidden|hide|exclude|employee|internal' curl -s "https://你的域名/products.json?limit=250" \ | grep -o '"available":false' | wc -l 第一条看门开没开,第二条把内部标签揪出来,第三条数一眼有多少变体正处在无货状态。三条都拿到数之后,先做第二条对应的清理,那是纯收益、零代价的。 至于看别人的,得说清楚边界。这些地址是平台公开文档记录过的店面接口,读它跟打开对方的商品页没有本质区别,做竞品分析 (https://zhangwenbao.com/ai-visibility-competitive-analysis-share-of-voice.html)时用它是常规操作。但有三条线别越: - 频率要克制。这次实测里有20个站在第二轮直接把我挡了,理由很正当——我要得太密。限速规则不认你的来意,只认你的节奏 (https://zhangwenbao.com/nginx-rate-limit-robots-txt-crawl-rate-seo.html)。 - 别做全量镜像。取样本判断趋势是研究,把对方整个目录连图带文案抄回来是另一回事。 - 拿到的数据自己用,别再分发出去。 ## 顺手能校准的三件事 这份数据对自己站的用处比对竞品的更大。第一,它是你商品数据的真实快照,可以拿来跟页面上的结构化数据 (https://zhangwenbao.com/merchant-listing-category-property-google-product-taxonomy.html)逐条对账,看两边的价格与库存说的是不是同一件事。第二,无货率这个数没有任何后台会直接告诉你,而它直接影响那些零流量SKU (https://zhangwenbao.com/zombie-sku-revival-performance-max.html)的处置判断。第三,created_at加上published_at能算出你自己的上新到上线的时间差,这个数多数团队从来没量过。 保哥给一个做户外装备的客户做过一次这个清理,光是把tags里的渠道名和测试标记摘干净就花了两个小时,改完对外的商品JSON少了七百多个标签实例。电商SEO审计按模板抽样 (https://zhangwenbao.com/ecommerce-seo-audit-template-level-sampling.html)的那套方法在这里同样适用——不用逐个商品看,把标签词表拉出来扫一遍就够。 ## 常见问题解答 ## 这个地址是Shopify独有的吗? 商品JSON这个具体形态是Shopify的店面惯例,实测里45个开着的站有40个是Shopify。但“平台自带一个公开只读接口”这件事不是它独有的:WordPress的REST接口、各类框架的数据路由都属于同一类。区别在于默认是开还是关——Salesforce Commerce的10个站和Magento的3个站在这次实测里一个都没开。 ## 竞争对手真的会去看这个吗? 比价工具和选品工具早就在用了,这不是什么秘密手法。真正值得担心的不是价格被看到——价格在页面上本来就是公开的——而是那些页面上看不到的东西:内部标签、测试商品、员工价、渠道标记、以及全量SKU的一次性导出。 ## 把robots.txt里加一条Disallow能解决吗? 不能。robots.txt只对自愿遵守它的自动程序生效,浏览器和脚本完全不看。加这一条唯一的效果是让守规矩的搜索引擎不去抓这个地址,避免它进索引,这本身有点用,但跟“防止被拿走”是两回事。 ## 无货的商品要不要从这份数据里去掉? 不建议去掉,因为主题模板要靠它渲染售罄状态。更值得做的是缩短无货商品在目录里停留的时间:长期无货又没有补货计划的SKU应该下架或者做重定向处理,那既是数据卫生问题,也是抓取预算问题。 ## updated_at为什么不能当改动时间用? 实测22个站3934个商品,这个字段100%落在最近7天内、中位数只有1天。它记录的是平台侧任何一次写入,库存扣减、缓存刷新、后台点开看一眼都会刷新它,跟“内容有没有改过”不是一回事。想追踪对手的改价,只能自己定期取数、自己存历史、自己做差分。 ## 清理标签会影响前台功能吗? 会,所以顺序很重要:先在主题里全局搜一遍这个标签有没有被if判断引用,确认没有再删。渠道名、员工价、测试标记这类通常只在后台筛选时用,删了不影响前台;而over-50-off这类很可能正驱动着某个促销集合页,动之前必须确认。 ## 我的站不是电商,这件事跟我有关吗? 有关,只是端点不同。任何一个内容管理系统都可能带着默认开启的只读接口,WordPress的REST接口 (https://developer.wordpress.org/rest-api/reference/posts/)能列出全部文章、用户名甚至草稿状态。判断方法一样:拿一个不存在的地址先探出这个站“说没有”的样子,再去试那些默认路径,看回来的是不是真数据。 ## 权威参考资料 ## 行业榜单上的前1%,是400家里的4家还是51家? - URL:https://zhangwenbao.com/industry-ranking-top-1-percent-denominator-slicing.html - 分类:电商SEO - 发布:2026-08-03 | 更新:2026-08-03 - 摘要:榜单写着前1%,那个1%的分母可能只有三五家。用一份公开电商体验榜单三年版本的逐项对照,讲清切片如何放大标签、哪些数字能自己验算、附三句判据与6个零成本动作。 - 关键词:SEO数据分析,竞品分析,数据治理,电商体验 > **TLDR**:摘要:一份行业榜单上写着“前1%”,读的人默认这三个字是从几百家里挑出来的。本文用一份公开可查的电商体验榜单做样本,把它连续三年的版本摊开逐项对账:同一年的名单里,“前1%”这个标签一共印了55次,而候选池按它自己的说法是400多家——1%只放得下4个位置。55次是怎么来的?19个行业乘3个终端,再加8个主题乘3个终端,格子先切好,标签再一格一个地发下去。其中7个行业只有一家获奖,也就是说那一格里的“前1%”和“第一名”是同一件事。顺着这条线还能翻出:同一家机构对自己有多少条准则给了四个数,其中一个能用加法还原;分数总量除下来对得上公开的335个站,却对不上自称的400家;三年名单的交集只剩一家公司。本文给出判断一份榜单能不能当尺子用的三句话,以及6个不花钱、不用埋点、这周就能做完的动作。 > 摘要:一份行业榜单上写着“前1%”,读的人默认这三个字是从几百家里挑出来的。本文用一份公开可查的电商体验榜单做样本,把它连续三年的版本摊开逐项对账:同一年的名单里,“前1%”这个标签一共印了55次,而候选池按它自己的说法是400多家——1%只放得下4个位置。55次是怎么来的?19个行业乘3个终端,再加8个主题乘3个终端,格子先切好,标签再一格一个地发下去。其中7个行业只有一家获奖,也就是说那一格里的“前1%”和“第一名”是同一件事。顺着这条线还能翻出:同一家机构对自己有多少条准则给了四个数,其中一个能用加法还原;分数总量除下来对得上公开的335个站,却对不上自称的400家;三年名单的交集只剩一家公司。本文给出判断一份榜单能不能当尺子用的三句话,以及6个不花钱、不用埋点、这周就能做完的动作。 百分比这个东西有个很讨人喜欢的地方:它自带分母。你说“前1%”,听的人脑子里立刻会浮现出一个很大的池子和一个很小的尖儿,不用你解释,画面自己就出来了。可这个分母是隐形的,它从来不需要被念出来,而恰恰因为不需要念出来,它可以是几百,也可以是三家。 这件事是在给一个客户核对竞品资料的时候撞上的。对方拿来一页幻灯片,上面写着某家同行“拿了行业前1%的体验评级”,要求参照那家把自己的移动端改一遍。翻到原始出处才发现,那份榜单同一年里发出去51个“前1%”,而它自己写的候选池是400多家。两个数摆在一起,怎么算都差着一个数量级。 更有意思的是往前翻。同一个奖,2023年、2024年、2025年三份完整名单都还挂在网上,谁也没删,逐个名字对下来,2024年的60位获奖者里有57位在2025年的名单上找不到了。三年都在的,只剩一家公司。一个行业的体验水平不会一年换血九成半,所以变的一定是别的东西。 ## 一份榜单里的“前1%”,最多能印几次? ## 先把两个数放在一起看 2025年那份名单 (https://baymard.com/blog/ux-awards-2025),从头到尾数下来是51个获奖主体。同一页的开头写着,进入评选范围的电商网站有400多家,每一家都被人工按平均500多条准则打过分,这个工作量按它的说法要花两万多小时。这两个数字分别看都很正常,放在一起就开始别扭了。 400家的1%是4家。就算把“400多”往宽了算成450家,1%也就是4.5家,取整之后还是4家。而实际发出去的是51家,中间差了十二倍还多。这不是四舍五入能解释的距离,也不是“多几家并列”能兜住的量级——并列通常是两三家的事,不会一路并列到51。 更准确的说法是51÷400=12.75%。如果拿这家机构公开可查的站点数335来当分母,那就是15.2%。无论用哪个分母,“前1%”这三个字都对不上它自己印出来的名单长度。差距不是几个百分点,是一个数量级,这种量级的偏差通常意味着两个数根本不是在回答同一个问题。 ## 标签不是发给公司的,是发给格子的 把51个获奖说明逐条读完,答案就出来了。没有任何一条写的是“该站在全部400家里排进前1%”,一条都没有。每一条后面都跟着一个限定语——某某行业的桌面端、某某主题的移动端、某某类目的App端,限定语的位置固定,格式统一,显然是按模板生成的。 换句话说,这个“前1%”从来没有对着整个池子说过话。它每次说话的对象都是一个更小的集合,而这个集合有多小,页面上不写。读的人拿到的是标签,看不到的是那一格里到底站着几个人。行业奖项和排行榜本身也是一门生意 (https://zhangwenbao.com/industry-awards-rankings-listings-link-building-tactics.html),从申报到评审都有成本,这决定了格子不会切得太少。 这跟AI审计工具那个95%准确率的分母是自己划的 (https://zhangwenbao.com/ai-audit-tool-accuracy-rate-denominator.html)是同一类毛病,只不过这次问题不在及格线怎么定,在池子被切成了多少份。及格线是一条横线,切片是很多条竖线,横线看得见,竖线看不见。 ## 55次,不是51次 51是获奖主体数,不是标签数。有几家公司同时拿了不止一个奖,比如某家户外品牌一家就占了桌面端、移动端和App端三项,把每条说明里出现的“Top 1%”逐个数一遍,一共是55次。也就是说这一页上,“前1%”这个词组被独立地印了55遍。 55次里,挂着行业名的34次,挂着主题名的17次,说“整体”的4次。三个数加起来正好55,一次不多一次不少,这说明每一次颁奖都被明确归到了某一个格子里,没有一条是含糊的。能对上的加总是个好信号,它至少证明这份名单的内部结构是清楚的。 数完这一步,问题就从“他们是不是夸大了”变成了“这些格子是怎么切出来的”。前一个问题问不出结果,因为对方随时可以说“我们没说是全池的1%”;后一个问题能一路问到底,因为格子数是可以数的。 ## 格子是这么切出来的 奖项类别 | 格子数 | 实发标签数 | 空置 | 19个行业×3个终端 | 57 | 34 | 23 | 8个主题×3个终端 | 24 | 17 | 7 | 整体×3个终端 | 3 | 4 | — | 合计 | 84 | 55 | 29 | 页面开头自己交代了切法:19个行业,外加按主题和终端切。终端有三种,桌面端、移动网页端、App端。主题从名单里数出来是8个——结账、商品页、商品列表与筛选、站内搜索、首页与类目、账户中心、订单跟踪与退货、全站功能,跟这家机构自己的研究板块划分是对齐的。 19个行业乘3个终端等于57格,8个主题乘3个终端等于24格,再加上“整体”这一类的3格,一共84格。84个格子,每格理论上都可以发一个“前1%”,实际发出去55个,剩下的29格那年空着。空格子不会出现在名单上,所以外人看不出哪些格子当年没人达标。 这就是55这个数的来源。它跟被评的网站有多好没关系,跟切了多少刀有关系。刀数决定标签数,这是一条纯算术的关系,跟评审严不严格无关,也跟那两万多小时的工作量无关。工作量决定的是每一格里的判断准不准,不是一共能发出去几个标签。 ## 切得越细,标签越多,每个标签越轻 假设明年这家机构把行业从19个扩到25个,终端再加一个“平板端”,格子数立刻从84变成25×4+8×4+4=136。名单长度大概率跟着涨,而每一个“前1%”背后的候选池同步变小。榜单看起来更丰富了,单个标签的稀缺性却被稀释掉了一半。 反过来,如果哪年他们决定只发“整体前1%”,那么400家里就真的只有4家能拿奖,含金量陡然上去,新闻稿却变得很难写——只有4个客户能拿去做宣传素材,剩下三百多家一无所获。任何一个做过内容分发的人都知道后一种方案不会被选中。这跟砍掉虚荣指标只盯真信号 (https://zhangwenbao.com/vanity-metrics-north-star-omtm-ecommerce.html)面对的是同一种拉扯。 所以切片数不是一个技术参数,它是一个产品决策。切多少刀,决定了这份榜单一年能生产多少个可供转发的荣誉,也决定了每个荣誉值多少钱。这两件事是此消彼长的,不可能同时最大化。 ## 有7个行业,整格只有一家获奖 把34个行业奖按行业名归一遍,19个行业里有7个只出现了一家公司:汽车配件、B2B五金与机械、家具家居、房产、外卖与餐饮配送、电信运营商、玩具手工与爱好。七个格子,七家公司,一格一个,整整齐齐。 一家。也就是说在这7个格子里,“该行业前1%”和“该行业第一名”指的是同一件事,甚至可能连“第一名”都算不上——如果那一格里参评的本来就只有两三家,那这个奖更接近“该行业唯一参评者”。而参评了几家,页面上一个字都没写。 相比之下,服饰配件、航班机票、印品定制各有3家获奖。同一份榜单里,有的格子发3个“前1%”,有的格子发1个,而读者拿到的标签长得一模一样,字号一样,措辞一样。电商类目页本身就是按格子组织内容的 (https://zhangwenbao.com/ecommerce-plp-collection-page-seo-mechanism-complete-guide.html),切法不同,结果就完全不同。 ## 当格子里只剩三五家,前1%就是第一名 这句话听上去像抬杠,但它是可以验算的。一个格子里如果只有5个候选,那么“排名前1%”这个条件在数学上等价于“排名前0.05个”,也就是说严格意义上没有任何一家满足这个条件,包括第一名在内。 实际操作里当然不会这么算,通常的做法是:这一格里最好的那个,或者达到某条绝对分数线的那些,拿奖。这个做法本身完全合理,甚至是唯一可行的做法,问题只在于最后印出来的字仍然是“前1%”,而不是“本类目最佳”。 于是同一个词组,在一个有200家候选的格子里意味着“击败了198家”,在一个有4家候选的格子里意味着“这4家里你还行”。词是同一个词,信息量差着两个数量级,而这个差别不体现在任何一个可见的字符上。 ## 第一名和前1%,在读者脑子里不是一回事 “某某行业第一名”这句话,读的人会本能地追问一句“一共几家参评”。这是个自然反应,因为“第一名”这个说法自带一个需要交代的分母,缺了它这句话就是不完整的,听的人会觉得少了点什么。 “前1%”不会触发这个追问。它已经把分母写在字面上了——1%,看起来分母是100或者更大,甚至更大才对。读的人不会再问,因为看上去已经答过了,追问反而显得没读懂。 > 这就是这类标签最微妙的地方:它用一个假的分母,替换掉了那个真正需要被追问的分母。写的人没撒谎,读的人也没偷懒,可信息还是在中间丢了一层,而且丢得悄无声息,没有任何一方会察觉。 ## 标题上写的是“表彰前1%的站点” 2025年那篇的标题直译过来是“表彰前1%的站点”。这句话如果字面成立,那么这份名单最多应该有4个名字。它实际有51个,比字面允许的多出47个。 把标题、开头段、名单三处放在一起看,三处都没错:标题说的是奖项的定位,开头段说的是候选池的规模,名单说的是最终结果。三段话各自成立,也各自准确,合起来会让人得出一个错误印象。 这种错觉不需要任何一方作假就能产生,它只需要三段真话被排在同一个页面上,而中间那句解释它们怎么衔接的话没人写。写那句话对榜单方没有任何好处,所以它永远不会被写出来。 ## 先算一遍,再决定信不信 验算这件事的成本极低。打开榜单页,数一下名单有多少行,找到候选池的规模,两个数一除。如果得到的比例比标签上写的大一个数量级以上,那就说明这个标签是按格子发的,不是按池子发的,后面所有的解读都要按这个前提来。 这一步大概花三分钟,比读完整份榜单快得多,也比事后发现抄错了对象便宜得多。给行业基准数据定参照值 (https://zhangwenbao.com/seo-industry-benchmarks-data-reference-guide.html)的时候,这个动作应该排在读正文之前,而不是读完之后再回头补。 算出来比例正常也不代表这份榜单就可靠,只是说这一层问题不存在,可以往下看别的。核对是一层一层剥的,不是一次做完的,剥完这一层还有分子分母同不同源、名单能不能核实这几层。把数据分析拆成指标体系与异常诊断两层 (https://zhangwenbao.com/seo-data-analysis-guide.html)也是这个思路,先确认口径再看数值。 ## 这不是造假,每一格的算法都成立 必须把话说清楚:按格子发奖是一个非常正常的做法。行业不同、终端不同,直接放在一起排名反而不公平——一个只有商品页和订阅流程的软件站,和一个有全套结账、物流、退换货流程的综合商城,用同一把尺子量没什么意义。这跟类目导航改了三轮用户仍不知道自己在哪 (https://zhangwenbao.com/category-navigation-scope-custody.html)同属一类结构问题。 切片是为了让比较更有意义,这个出发点没问题,甚至可以说是负责任的做法。问题出在切完之后,标签上的百分比没有跟着切片一起改写。分母变了,写在标签上的那个数没变,两者之间的那道缝就是所有误读的来源。 所以这不是一个诚信问题,是一个表述问题。追问下去得到的答案会是“我们说的是各细分领域的前1%”,这个答案完全成立,无懈可击,而且答完之后什么都不会改变——下一年的榜单还会这么写。 ## 问题的位置在读的人这边 榜单方按格子发奖、按格子表述,这套逻辑是闭环的。真正出问题的是这个标签离开原页面之后的那段旅程——它被截图、被写进幻灯片、被引用进竞品分析表,而那个限定语在第一次转述的时候就掉了。 “某某拿了行业前1%”这句话,从榜单页到会议室大概经过三个人,每经过一个人少掉几个字。到最后一个人手里,剩下的往往只有公司名和“前1%”这四个字,行业名、终端、年份全没了。 这跟基准报告只印发布日期不印观测日期 (https://zhangwenbao.com/industry-benchmark-data-observation-date-shelf-life.html)是同一种损耗:不写在标签上的限定条件,转述两次就没了。区别在于那次丢的是时间,这次丢的是分母,而分母丢了之后连追问的入口都没有了。 ## 把这一节收成一句话 看到“前X%”,先别看是谁拿的,先问这个X%是对着多少个对象说的。如果榜单上同时出现了几十个“前1%”,那么这个百分比几乎肯定是格子内的,不是池子内的,这一步判断不需要任何额外信息。 把标签数除以池子规模,得到的才是“拿到这个标签的实际难度”。51÷400=12.75%,意味着参评的每8家里就有1家能拿到某种“前1%”,这跟“百里挑一”是两个世界,跟“千里挑一”更是隔着十万八千里。 接下来的问题是:这个池子本身有多大、由谁划定、里面的成员能不能被你亲手核对。那要从这家机构自己给出的数字开始查,而那些数字之间也对不上——同一件事,官网上有四个答案。 ## 同一家机构说自己有多少条准则,为什么答案不止一个? ## 四个数,同一天,同一个官网 把这家机构的几个主要页面在同一天打开,找“我们一共有多少条体验准则”这个问题的答案,会得到四个不同的数:奖项页写的是“平均500多条”,导航栏写的是“700多条”,方法论页写的是794条,而基准图表里那个“整体体验表现”标着1254条。四个数,四个位置,没有一处交叉说明,也没有任何一页提到还有别的说法。 这不是不同年份留下的历史包袱,因为这四个页面是同时在线的,任何人现在打开都能看到。也不是某一页写错了,因为它们各自都能自圆其说,拆开看每一个都站得住。四个数字同时正确、同时在线、互不知情,这本身就是个值得停下来看一看的现象。 更要紧的是,这四个数里只有一个会被印到奖状上。奖项页那句“平均500多条”是外部转述时唯一会带上的数字,其余三个都留在了原地,没人会去查,也没人有理由去查。准则条数与分数条数是两笔账 (https://zhangwenbao.com/product-list-guidelines-scoring-selection-bias.html)这件事,在这里又出现了一次,而且比上次更极端,因为这次是四笔。 ## 1254这个数,可以用加法还原 基准图表把准则按终端分了三块:桌面端442条、移动网页端429条、App端383条。三个数加起来是1254,和上面那个“整体体验表现1254条”分毫不差。这说明1254不是一个宣传口径,是一个真实的加总结果,背后有一张能对得上的表。 继续往下拆,桌面端那442条还能再拆成八个板块:首页与类目34条、站内搜索28条、商品列表与筛选70条、商品页106条、结账110条、账户中心64条、全站设计与交互19条、会员计划11条。把这八个数加起来,正好442,一条不多一条不少。 两层加总都能对上,这在公开数据里是相当少见的待遇。它意味着这家机构的内部结构是清楚的、可复核的,也意味着任何人只要肯花五分钟按一遍计算器,就能验证这一层没有水分。这是好事,得先说清楚,后面所有的挑刺都建立在这个前提上。 ## 794和1254的关系是去重 1254是三个终端加起来的条数,794是去重之后的条数。同一条准则如果在桌面端和移动端都适用,加总的时候算两次,去重的时候算一次。1254减794等于460,这460就是被重复计算的部分,占1254的36.7%,比例不算小。 所以794和1254都没错,它们回答的是两个不同的问题:794回答“一共写了多少条不一样的准则”,1254回答“一个站最多会被打多少次分”。前者衡量的是知识库的大小,后者衡量的是工作量的上限,两个问题连单位都不一样。 问题是这两个问题在外部转述时会被压成同一句话——“他们有几百上千条准则”。压完之后,你既不知道知识库有多大,也不知道工作量有多重,只剩下一个模糊的量级感。这跟用上一代分词器的口径估算token (https://zhangwenbao.com/token-counter-tokenizer-generation-gap-window-cost-guide.html)是同一种事故:尺子本身刻得很准,只是刻的不是你以为的那件事。 ## 那“平均500多条”又是什么 奖项页那句“每个站被人工按平均500多条准则打过分”,用的是“平均”两个字。这说明不是每个站都被打满794条,也不是每个站都一样多——只做桌面端的站条数少,三端齐全的站条数多,平均下来落在500多这个区间。这个解释是唯一说得通的。 这个说法在逻辑上完全成立,而且比直接说“794条”更诚实。有意思的是,2024年那版写的是“按500多条准则打过分”,没有“平均”两个字,2025年才加上。一年之间只加了两个字,别的数字一动不动,连标点都没换。 两个字的差别看起来微不足道,实际上它把一个绝对陈述改成了一个统计陈述。前者可以被单个反例推翻——只要找到一个被打了300条的站;后者不能,因为平均值天然容纳离散。这类修改在法务和公关的口径校对里非常常见,改完之后表述更严谨,可核查性反而更低。该淘汰的那批老指标 (https://zhangwenbao.com/retire-outdated-seo-metrics-2026-strategy.html)大多也是这么退场的。 ## 2023年那版给的是一个区间 翻回2023年的版本,同一个位置写的是“每个网站按500到680条加权准则人工评测”。给的是区间,有上界也有下界,这是几个版本里唯一一次交代了上界。区间比“500多”信息量大得多,因为它同时告诉了你最少和最多,而“多”字后面可以藏下任何东西。 同一段还写着:候选池是234个美国和欧洲的高营收电商站,奖项基于数据库里超过215000个加权体验分数,整个过程花了超过10000小时。三个数都是具体的,没有一个带模糊后缀,234就是234,不是“200多”。 然后就出事了。这三个数被排在同一段话里,中间隔着不到三十个英文单词,它们可以互相验算,而验算的结果对不上。这一层不需要翻别的页面,也不需要任何背景知识,读完这一段就能发现。 ## 215000除以234,等于918.8 如果234个站产生了215000个加权分数,那么平均每个站被打了918.8次分。而同一段话说,每个站用的是500到680条准则。918.8比上界680高出35.1%,比下界500高出83.8%,两头都对不上,而且差得不是一点半点。 能想到的解释有两个:要么某些站被在多个终端上重复评测,918.8是把终端也算进去的结果;要么215000这个数里包含了234个站之外的东西,比如往年留下的历史分数。两个解释都有可能,也都合理,页面上一个字都没提。 注意这里的关键不是“他们算错了”。更可能的情况是两个数来自两个部门、两个系统、两次不同的统计口径,各自都对。对读的人来说,结论是一样的:这两个数不能放在一起做除法。而做除法恰恰是外部引用时最常见的动作。关键词难度在各家工具之间差得很大 (https://zhangwenbao.com/keyword-difficulty-metric-cross-tool-truth.html),原因同样是分母不一样。 ## 验算不是为了抓错,是为了知道哪个数能用 发现918.8这件事,本身不构成对这份榜单的否定。数据加总出现口径差异是极其常见的,尤其是当一个组织同时维护研究库、销售页面和公关稿的时候,三套口径来自三个部门几乎是必然的,谁都不算失职。 验算的意义在于告诉你:这一段里的三个数不能同时当精确值用。你可以用234来判断池子规模,可以用500到680来判断评测深度,但不能拿215000去反推任何东西,因为它跟前两个数不共享同一个口径,反推出来的每一个结论都会带着这个错位。 这跟校准第三方工具数据准不准 (https://zhangwenbao.com/third-party-seo-tool-data-accuracy-estimation-methodology.html)的思路是一样的:先找出哪些数字之间存在算术关系,把它们摆在一起对一遍,对不上的那一组就标记为“不可交叉引用”。这个动作不需要任何工具,也不需要跟对方打交道。 ## 275000这个分数总量,分母是335还是400 2024年和2025年两版都写着“基于超过275000个加权体验分数”。这个数比2023年的215000涨了27.9%,而候选池从234涨到“400多”,涨了71%。分数涨得比池子慢得多,说明每个站的平均评测次数反而下降了,这跟“我们评得更细了”的直觉相反。 275000除以400等于687.5,这跟“平均500多条”能对上一个大概,勉强算说得通。275000除以335等于820.9,跟方法论页那个794条只差3.4%。后一个吻合度高得不像巧合,尤其考虑到794这个数是从另一个页面上找到的。 反过来乘一遍更清楚:335乘794等于265990,跟275000只差9010,误差3.4%。而400乘500等于200000,跟275000差了75000,误差27.3%。两个候选组合摆在一起,哪一个是这个数的真实来源,一目了然。 ## 分子来自公开的335个站,分母写成了400多家 方法论页 (https://baymard.com/research/methodology)写得很清楚:54轮人工基准评测,覆盖美欧335个高营收电商站,跨794条体验准则,产出175000多个实现示例和275000多个体验分数。这一段里,335、794、275000三个数是长在一起的,出自同一句话,共享同一个口径。 奖项页把275000搬了过去,却把站数写成了“400多家”,理由是候选池里还包括了付费审计客户。这个说法本身没问题——客户站确实也被评过——但那部分评测有没有计入275000,页面没说,也没有任何地方说过。 从算术上看,275000和335乘794高度吻合,和400乘500相去甚远。更可能的情况是:分数总量来自公开的那批站,而候选池的规模来自公开加客户的并集。分子和分母不同源,这是核对外部数据时最该警惕的一种错位,因为它不会在任何一处露出破绽,只会让所有基于它的除法都偏一点。 ## 基准页给的是十万,不是二十七万 还有一个数字更奇怪。基准页开头写着“本图表汇总了100000多个体验评分”,同一个页面下方的页脚又写着“335个站的案例研究,用275000多个体验分数排名”。同一页,上下相距不到一屏,两个数差2.75倍,中间没有任何过渡。 上面用的词是ratings,下面用的词是scores。两个词在英文里都可以译成“评分”,中文里更是没法区分,而这家机构从来没有在任何一页解释过它们的区别。100000除以335等于298.5,275000除以335等于820.9,两个每站均值差了将近三倍。 298.5这个数接近什么?大约是桌面端442条的三分之二,或者说三个终端里最常评的那一到两个的量级。820.9这个数接近794。所以合理的猜测是:ratings统计的是某个较窄的口径,scores统计的是全量。这只是猜测,页面上没有答案。遇到这种情况,选工具先看它公开了多少口径 (https://zhangwenbao.com/seo-tools-recommendation-2026.html)比看功能列表有用。 ## 示例数也是两个,差了将近十倍 同样的错位在“设计示例”这一项上又来了一次。导航栏和页脚都写着“18000多个结构化设计示例”,而方法论页写的是“175000多个实现示例”。两个数差9.7倍,用的词一个是design examples,一个是implementation examples。 这两个词的区别大概率是:前者指被整理成图库、可以浏览的截图条目,后者指评测过程中记录下来的每一次实现情况。一个是对外的产品,一个是内部的原始记录,数量差一个量级完全说得通,甚至可以说理所当然。 但对读的人来说,这又是一组不能混用的数。如果你想说“这家机构积累了十几万个设计案例”,那是错的;如果你想说“一万八千个”,那也没错但漏掉了背后的工作量。看到量级差得离谱的两个数,先假设它们回答的是不同问题。用词频权重给内容做体检 (https://zhangwenbao.com/tfidf-analyzer-content-keyword-weighting-guide.html)时最容易踩这个坑,换个口径排序就翻过来。 ## 四个数里,哪个能用 出处 | 准则条数 | 这个数回答的问题 | 能不能当分母 | 奖项页 | 平均500多 | 每站平均被打了多少条 | 不能 | 导航栏与基准页 | 700多 | 大致量级 | 不能 | 方法说明页 | 794 | 去重后的知识库大小 | 能 | 基准图表·整体 | 1254 | 一个站最多被打多少次分 | 能 | 2023年奖项页 | 500到680 | 当年的评测深度区间 | 能 | 把这一节的账收一下。794是可以用的,因为方法论页把它和335、275000放在一起给出,三者能互相验算,误差在3.4%以内。1254也是可以用的,因为它能被442加429加383还原,而442又能被八个板块的数字精确还原。用透视表把分项加总核对 (https://zhangwenbao.com/excel-pivottable-data-summary-analysis-slicer-refresh-workflow.html)几分钟就能看出哪一层对不上。 “700多”是个约数,做量级判断没问题,做除法就不行,因为“多”字后面的空间太大。“平均500多”只能用来理解评测深度,不能当分母。100000和275000之间必须二选一,选之前要先确定你要回答的是哪个问题,否则选哪个都是错的。 > 最不能用的是2023年那个215000,因为它跟同段落的234和680对不上。一个数字如果在它自己所在的那一段话里就无法自洽,那它在任何别的地方都不能当依据。这条判据不需要任何背景知识,只需要一台计算器和三十秒钟。 ## 可加总的数字是最值得抓的 这一节里最有价值的发现不是哪个数错了,而是1254和442这两个能被还原的加总值。它们证明这家机构确实有一套结构化的内部账,也给了外部核对者一个可以下手的抓点,而这种抓点在公开材料里非常稀缺。 做竞品资料核对的时候,第一优先要找的就是这类“能加起来”的数字:分板块的条目数、分类目的站点数、分终端的覆盖数。把它们加一遍,如果加得出总数,这份材料的可信度就上了一个台阶;如果加不出来,差额本身就是下一个要问的问题。 反过来,如果一份材料从头到尾只给总数、不给分项,那就没有任何可以下手核对的地方。这时候能做的只有横向比对——找同一家机构的其他页面,看它在别处怎么说同一件事。这正是上面那四个准则数被找出来的方式,成本是打开四个标签页。给页面做加权评分体检 (https://zhangwenbao.com/meta-checker-weighted-seo-audit-guide.html)也一样,先弄清权重是谁定的。 ## 把这一节收成一句话 同一件事在同一家机构的官网上有四个数字,这不奇怪,也不一定说明谁在骗人。奇怪的是这四个数从来没有在任何一处被并列过,也没有任何一页解释它们的关系,而它们全都是公开的、随时可查的。 作为读的人,你要做的是给每个数字标上它能回答的问题,然后只在那个问题上用它。794回答知识库大小,1254回答单站评测上限,335回答可复核的池子规模,“400多”回答含客户的并集规模。标完之后,很多看起来矛盾的地方会自动消失。 分清楚之后,下一个问题就来了:这份名单一年换掉九成半,到底是被评的公司变了,还是这些数字背后的尺子变了。这个问题比前面几个都难回答,因为它需要三年的数据才能看出来,而三年的数据恰好都还在。 ## 一年之内九成半的获奖者换掉了,是被评的变了还是尺子变了? ## 三年三份名单,长度分别是41、60、51 这个奖从2023年开始连续办了三年,三份完整名单现在都还挂在网上,页面结构几乎一样,谁也没有被删掉或改写。2023年41位获奖者,2024年60位,2025年51位。三年加起来152个席位,听起来是个不小的荣誉圈子。 但把名字拉出来去重就不是这个数了。三年一共出现过的不重复公司是129家,远小于152,说明确实有一部分公司连续拿奖。问题是这个“一部分”到底有多大,这需要逐个名字比对才知道,而比对结果比想象中难看得多。 做这件事的成本很低:三个页面的名单复制出来,去掉国家后缀和大小写差异,做个交集。十分钟能做完,而这十分钟能问出一个任何单年名单都答不出的问题——这份榜单到底稳不稳。竞品内容差距要逐项对账才看得出来 (https://zhangwenbao.com/content-gap-analyzer-competitor-27-dimension-guide.html),榜单也一样,得摊开两份才有对比。 ## 2024到2025,交集只有3家 2024年60位获奖者,2025年51位,两年的交集是3家。三家。用集合的话说,并集108家,交集3家,重合度2.8%。也就是说2024年拿了奖的公司里,有57家在一年之后从名单上消失了,消失比例95%。 这三家是哪三家?一家做后端云服务的开发者平台,一家跨国快餐连锁,一家英国的餐饮设备供应商。三家分属完全不同的行业,看不出什么共性,更像是随机留下来的。如果连续获奖的是同一批头部大厂,那还说得通;三家毫无关联的中小玩家留下来,反而更难解释。 再把2023年那份加进来对:2023和2024的交集是17家,重合度20.2%;2023和2025的交集是6家。三年都在名单上的,只有一家公司。一家。这个数字放在任何一份“顶尖榜单”上都值得追问一句为什么。 ## 一个行业不可能一年换血九成半 先排除一种可能:这不是因为电商体验水平在一年内发生了剧变。网站改版是以季度和年为单位推进的,结账流程重构一次要几个月,账户中心的信息架构调整更慢。一年之内九成半的顶尖玩家集体掉队,在业务上说不通。 也不是因为大批新公司涌入。候选池的规模两年之间没有变化,都写着“400多家”,连数字都一模一样。池子没变大,池子里的人没换,可名单换了九成半。池子没变、成员没换、名单换了,这个组合本身就指向了评法。 那就只剩两种解释:要么打分方式变了,要么切格子的方式变了。前者会让所有站的分数一起漂移,后者会让原本能拿奖的站掉进别的格子里去。这两件事在外部都看不见,但它们留下的痕迹能被数出来。 ## “整体”这一类的奖,从21个缩到4个 把三年的获奖说明里带“整体表现”字样的条目数一下:2023年17条,2024年21条,2025年只剩4条。这是一个断崖式的变化,而且它恰好能解释名单为什么会换血。 “整体前1%”是最难拿也最值钱的一类,因为它的分母是整个池子而不是某一格。2024年有21个这样的席位,等于池子被拆成了21份来发“整体奖”;2025年只发4个,回到了字面意义上的“400家的1%”。 这个变化本身是往严格的方向走的,值得肯定。但副作用是:2024年那21家靠“整体奖”上榜的公司里,绝大多数在2025年拿不到同样的位置了。名单换血的一大块,就是从这里来的。严格化是好事,只是名单波动会被外部误读成实力变化,就像老内容流量悄悄下滑 (https://zhangwenbao.com/content-decay-mechanism-portfolio-roi-tiering.html)常被误读成算法惩罚。 ## 一家拿多个奖的情况也在减少 2023年41位获奖者里有14位拿了不止一个奖,占34.1%;2024年60位里有16位,占26.7%;2025年51位里只有4位,占7.8%。三年一路往下掉,掉得很干净。 这说明奖项的分配方式从“少数强者通吃”变成了“一格一个尽量摊开”。2025年那份名单里,47家公司各拿一个奖,只有4家拿了两个及以上。摊得非常平,平到几乎看不出层次。 > 摊平的直接后果是名单里能容纳更多不同的公司名。同样是55个标签,如果集中在20家手里,名单就只有20行;如果平摊到51家,名单就是51行。名单变长不等于获奖门槛变低,也可能只是分配策略变了。这两种情况从外面看起来一模一样。 ## 行业名本身在改名和拆分 2023年有一个行业叫“宠物与爱好”,2025年这个名字不见了,取而代之的是两个行业:“宠物食品与护理”和“玩具、手工与爱好”。一个格子拆成了两个,格子数加一,而拆的那一刀落在哪里,只有这家机构自己知道。 2023年的“家居用品与家具”,到2024年变成了“家具与家居装饰”;2023年的“旅游与住宿”,到2024年变成了“旅行住宿”。名字改了,覆盖范围有没有跟着改,页面上没有说明。改名之后,同一个行业名在两个年份可能指的不是同一批公司,季节性关键词跨年迁移 (https://zhangwenbao.com/seasonal-holiday-keyword-cross-year-planning-mechanism.html)也有这个麻烦。 这类改动对跨年比较是毁灭性的。同一家宠物电商,2023年拿的是“宠物与爱好行业移动端前1%”,2025年拿的是“宠物食品与护理行业桌面端和移动端前1%”——听起来是连续两次获奖,实际上中间那个类目已经被拆过一次,两次的分母根本不是同一个集合。 ## 同一份名单里,行业名的写法都不统一 2025年那份名单里,有一家公司的获奖说明写的是“Digital Subscriptions & SaaS”,另一家写的是“Digital Subscription & SaaS”,差一个复数s。2024年那份里,“Mass Merchant”和“Mass Merchants”两种写法同时出现。 还有词序问题。这家机构的基准页把一个行业叫作“Food Delivery & Takeout”,2025年的奖项页写成了“Takeout & Food Delivery”,两个词换了个位置。基准页叫“Product Lists & Filtering”,奖项页叫“Product List & Filtering”。 这些差异都很小,小到不影响阅读。但它们说明一件事:这份名单是人工整理的,不是从数据库里导出来的。如果是导出来的,同一个类目名不可能有两种写法。人工整理意味着口径依赖整理的人,而整理的人是会换的。 ## 2025年的新面孔有43家 反过来数也很有意思。2025年那51位获奖者里,有43位在2023年和2024年的名单上都没出现过,占比84.3%。也就是说这份“顶尖1%”名单,八成以上是当年第一次上榜的。 一份榜单如果每年八成是新面孔,那它衡量的更像是“今年谁被评到了”,而不是“谁一直做得好”。真正稳定的头部通常有很强的惯性,因为体验优化是靠长期投入堆出来的,不是靠某一年突击。稳定的头部榜年度更替率通常在两三成。在AI引擎里做可见度竞品分析 (https://zhangwenbao.com/ai-visibility-competitive-analysis-share-of-voice.html)时,也要先分清抖动是真实变化还是采样波动。 当然还有另一种可能:这家机构每年都在扩大和轮换实际评测的对象,去年评过的今年不评,今年评的去年没评。这个解释同样成立,而且更符合一家研究机构的正常工作节奏。但它带来的结论是一样的——这份名单不能当趋势看。 ## 消失的那57家去哪了 2024年名单上那57家在2025年消失的公司,包括好几个体量非常大的名字:北美最大的几家综合零售、几家全球服装品牌、几家主流旅行预订平台。这些名字大多是各自类目里体量最大的几家,投入和团队规模都在那儿,一年之内集体退步的可能性极低。 把它们跟公开的基准站点名单对一遍会发现,绝大多数仍然在那份335个站的名录里,案例研究页也还在,只是没再拿奖。这说明它们没有被移出评测范围,只是没有落进2025年的任何一个格子的头部。换句话说,它们并没有从这家机构的视野里消失,消失的只是那个能容纳它们的席位。 最可能的原因还是格子变了:整体奖从21个缩到4个,而这些大站原本大多是靠整体奖上榜的。格子一撤,人就掉下来了,跟他们自己做了什么没关系。这是切片决定名单的最直接证据。格子的存废由发奖方决定,这跟AI推荐名单被追问一句就少掉六成 (https://zhangwenbao.com/ai-recommendation-churn-follow-up-question.html)道理接近:边界不在被推荐方手里。 ## 排名榜有一条现成的规矩,就写在这上头 2006年在柏林,一群做大学排名的机构和研究者开了个会,定下了一份16条的《高等教育机构排名的柏林原则》 (https://www.ihep.org/publication/berlin-principles-on-ranking-of-higher-education-institutions/)。这是目前唯一一份专门规范“排行榜该怎么做”的国际性公开准则,二十年过去了仍然是这个领域最常被引用的框架。 它的第9条正好说的就是这件事:要把各项指标的权重公开写出来,并且限制对权重的改动,因为“权重的变化会让使用者难以分辨一所机构的名次变动,究竟是源于其自身的实质差异,还是源于方法上的改变”。这句话写在2006年,针对的是大学排名,可它精准描述了二十年后一份电商榜单的处境。 把“机构”换成“电商网站”,这句话一个字都不用改。2024到2025的名单换掉了95%,而外部读者手上没有任何材料能判断这95%里有多少是网站自己的变化,有多少是格子和权重的变化。 ## 柏林原则的另外几条,也全都戳在这 第3条要求“承认被评对象的多样性,把不同的使命和目标纳入考虑”,并且建议经常与被评对象和相关专家沟通。第6条要求“方法必须透明”,透明的范围明确包括指标的计算方式和数据的来源。这两条针对的都是“读的人凭什么相信这份榜”,而不是“这份榜排得准不准”。 第11条要求“尽可能使用经过审计和可验证的数据”,理由写得很直白——这类数据的好处之一是“它们在不同机构之间是可比、可兼容的”。第16条要求榜单的编制方式要能发现和纠正原始数据里的错误,并且要把已发生的错误告知被评对象和公众。 这四条加起来,基本上就是一份“读榜单时该查什么”的清单。反过来用:权重公开吗、方法透明吗、数据可验证吗、有没有勘误机制。四问全过的榜单很少,但至少能分出档次来。四问不必都过才能用,但要知道手上这份过了几问;做内容差距分析 (https://zhangwenbao.com/content-gap-analysis-competitor-coverage-share-of-voice-mechanism.html)时把这四问抄过去也基本适用。 ## 计量学里有一条更硬的判据 对照年份 | 交集家数 | 并集家数 | 重合度 | 2023与2024 | 17 | 84 | 20.2% | 2024与2025 | 3 | 108 | 2.8% | 2023与2025 | 6 | 86 | 7.0% | 三年都在 | 1 | 129 | 0.8% | 国际计量学词汇对“测量结果的计量相容性”有一条注释,说的是:如果对一个被认为恒定的量做了一组测量,其中某个结果与其他结果不相容,那么要么是测量本身不正确,要么是被测量在两次测量之间发生了变化。二选一,没有第三种。 把这条用到名单上:2024和2025的重合度只有2.8%,两次结果显然不相容。那么要么是评测方法在两年之间变了,要么是这400多个网站的相对水平在一年内真的发生了九成半的重排。 后者在业务常识上不成立,所以只剩前者。这个推论不需要任何内部信息,只需要两份公开名单和一条计量学定义。它也不指控任何人,它只是把“可能性”从两种收敛到了一种。 ## 跨年比较要看三类字段 做跨版本对照的时候,不是所有字段都值得看。真正有用的是三类:名单类(谁在里面)、工作量类(做了多少活)、分布类(怎么分组)。这三类的共同点是,如果不重新做一遍,它们不会自己变。 名单类变了,说明要么被评对象变了,要么筛选规则变了。工作量类变了,说明确实重新做了一轮。分布类变了,说明分组方式动了刀,跨年比较从这一刻起就失效了。 剩下的那些字段——措辞、排版、配图、标题——变不变都不说明问题,改一次的成本几乎为零。上一次用这套方法对照两版基准报告 (https://zhangwenbao.com/industry-benchmark-data-observation-date-shelf-life.html)的时候,结论是三类字段一格未动,那份材料是重发不是更新。这次不一样。 ## 这次是名单动了,工作量没动 把三类字段套到这三份名单上,结果很清楚:名单类剧烈变动(重合度2.8%),分布类明显变动(行业数18到19、行业名改名拆分、整体奖21到4),而工作量类一格没动——400多家、平均500多条、两万多小时、275000多个分数,2024和2025两版完全一样。 这个组合有点特别。如果真的重新评测了一轮,工作量类应该跟着涨,哪怕只涨一点。如果什么都没做,名单不该换血九成半。两者同时出现,最可能的解释是:底层评测数据没有大规模刷新,变的是从这批数据里挑人的规则。 这个推论没法百分之百确认,因为外部看不到底层数据。但它指出了一个应该被问的问题——而不是接受“今年这些公司做得更好”这个默认解释。 ## 被引用的时候,这些全都不见了 一份榜单被引用进竞品分析表的时候,带过去的通常只有公司名和“前1%”三个字。年份有时候带,行业名偶尔带,终端几乎从来不带,格子里有几家候选从来没人问过。 更要命的是跨年引用。有人会说“这家连续两年拿了行业前1%”,听起来分量很重,实际上两年的行业名可能不一样、格子里的候选可能不一样、整体奖的口径可能不一样。把竞品分析表做成能落地的行动清单 (https://zhangwenbao.com/competitor-reverse-engineering-framework-content-link-entity-stack.html)的前提,是表里每一格的口径都经得起追问。 这跟孤岛页面检测的抽样口径决定你看到的孤岛是真是假 (https://zhangwenbao.com/orphan-page-finder-sitemap-sampling-internal-link-audit-guide.html)是一个道理:口径不写清楚,结论就是不可复现的,而不可复现的结论不能拿来排优先级。 ## 把这一节收成一句话 一份榜单跨年可比的前提,是名单类、工作量类、分布类这三类字段有据可查。查下来如果只有名单在动,那么变的很可能不是被评的对象,而是挑人的规则。反过来,如果三类字段全都稳定,那这份榜单的跨年比较才真正立得住。 这不是说这份榜单没价值。单年的名单仍然是一份有用的参考——它至少告诉你在某一格里谁做得不错,值得打开看看。它只是不能用来做趋势判断,不能说“某某连续三年入选所以最稳”。当年度快照用没问题,当趋势线用就不行。从竞品差评里挖差异化 (https://zhangwenbao.com/competitor-review-gap-analysis-positioning.html)反而更稳,那批材料是连续产生的。 接下来要问的是第三个问题:如果连续两版的工作量数字一字未改,那么这些数字到底是每年重新算出来的,还是从上一版复制过来的。这个问题有一个很干脆的判别方法。判别方法很土:把两版的那几句话并排放在一起,逐字看过去。 ## 工作量的四个数一年一格没动,是没重做还是没重写? ## 把两版的开头段并排放 2024年那版开头写着:进入评选的400多个电商网站,每一个都被人工按500多条体验准则打过分,这个过程需要超过两万小时的审计工作量。2025年那版写着:进入评选的400多个电商网站,每一个都被人工按平均500多条体验准则打过分,这个过程需要超过两万小时的审计工作量。 两句话摆在一起,差别只有“平均”这两个字。400多、500多、两万小时,三个数一个都没动。再往下一段,两版都写着“基于超过275000个加权体验分数”,也是一字不差。三处能对上的地方全都对上了,剩下的差异只有那两个字。 这种对照做起来非常简单:两个页面各自复制一段,粘进任何一个文本比对工具,差异会自己标出来。整个动作不超过五分钟,而它能回答一个单看一版永远回答不了的问题——这些数字到底是每年重算的,还是沿用的。这个动作最适合放在读正文之前,把搜索结果页存成可对账的时间资产 (https://zhangwenbao.com/serp-history-snapshot-tracking-system-volatility-archive-engineering.html)用的是同一套思路:先留档,再比对。 ## 四个数字零改动,三处措辞小改动 逐字比对的结果是:两版之间一共只有三处改动。第一处,“18个行业”改成“19个行业”。第二处,“500多条准则”前面加了“平均”两个字。第三处,“今年我们扩大了候选池”改成了“今年同样,候选池包括”。 除此之外,句式、语序、标点、链接位置全都一样。连“更多方法说明”那个链接放在哪个括号里都没变。这是一份被复制粘贴然后局部微调过的文本,不是重新写的一段。 文本被复用本身完全正常,年度稿件沿用上一年的模板是行业惯例,谁都这么干。真正需要注意的是:被复用的不只是句子,还有句子里的数字。而数字被复用,读的人是看不出来的。措辞是今年写的,数字可能是去年的,混在一起没有标记。只改修改日期不改内容的假更新 (https://zhangwenbao.com/modified-timestamp-truthful-update-fake-refresh-signal-mechanism.html)是这件事的另一个版本。 ## 唯一动了的数字是行业数 18改成19,这是两版之间唯一变动的数量。它跟名单是对得上的——2025年确实出现了19个不同的行业名。所以这个数是真的重新数过的,不是沿用的。 有意思的是,一个新增的行业叫“房产”。这个行业不在这家机构公开的32个行业分类里,也就是说它是为了某一家公司新开的格子,而那家公司恰好又不在公开的站点名单里。一个新格子被开出来,同时被一家外部查不到的公司填上,这两件事发生在同一年。 一个新增的行业、一家不可查的公司、一个新增的“该行业前1%”。三件事凑在一起,18变19这个改动就有了具体的形状。它不是抽象的扩容,是一个格子被新开出来,然后立刻被填上了。从18到19这一格的距离,正好是一家公司的宽度。 ## 2023年那版给的全是精确数 回头看2023年那版,风格完全不同:234个站,215000个加权分数,500到680条准则,10000小时。四个数里三个是精确值,一个是区间,没有一个带“多”或者加号。精确值意味着有人真的数过,也意味着数错了会被人发现。 234这个数是可以数的。如果有人愿意,可以去把那份站点名录拉出来数一遍,看是不是234个。区间同样是可以检验的——只要找到一个被打了700条的站,“500到680”这个说法就被推翻了。 换句话说,2023年那版把自己置于一个可被证伪的位置上。这在公开材料里是需要一点勇气的,因为写下一个精确数意味着承担被人挑错的风险。 ## 2024年起,精确数全变成了带加号的下限 到了2024年,234变成“400多”,215000变成“275000多”,10000变成“两万多”,“500到680”变成“500多”。四个位置,四次同样的转换:精确值或区间,一律换成带加号的下限。 下限值有一个非常特别的性质:它几乎不可能被推翻。“超过400家”这句话,只要实际有401家就成立,有4000家也成立。你没办法通过任何观察证明它是错的,除非能证明实际不足400家,而这需要拿到内部名录。 更关键的是,下限值永远不会过期。今年“超过两万小时”成立,明年只要没减少,这句话还是成立的,后年也是。一个带加号的数字可以原地不动地放很多年,而每一年它都是对的。 ## 从精确数到下限数,是一道单向的门 这个转换一旦发生,通常就不会退回去了。原因很简单:写成精确值要承担核对成本和被挑错的风险,写成下限值两样都没有,而对外传播的效果几乎一样,甚至更好听。 没有哪个团队会主动从“超过400家”改回“402家”,因为这么改只有坏处没有好处。这是一条单向的门,走过去就不会回来,除非有外部压力逼着它回来。 所以在做材料核对的时候,值得专门看一眼:这家机构的早期版本有没有给过精确数。如果给过,那个早期版本往往是整条材料链里信息密度最高的一份,哪怕它已经旧了几年。越早的版本越敢给具体数。新鲜度机制会奖励更新 (https://zhangwenbao.com/content-freshness-qdf-algorithm-mechanism.html),这个激励反过来也在鼓励把数字写得更耐放。 ## 两万小时和一万小时之间 2023年写10000小时,2024年写“超过20000小时”,翻了一倍。这个变化是真实发生的还是口径变了?没法确认,但可以从别的数推一推。 2023年234个站、每站500到680条准则,取中位数590条,总打分次数约138000次。2024年“400多个站”、每站“500多条”,取500条算,总打分次数约200000次。打分次数涨了45%,工时涨了100%。 工时涨得比工作量快一倍,可能是因为新增了更复杂的评测项,也可能是因为2023年那个10000小时本身就是保守估计。两种解释都合理,页面上没有任何说明。评分类工具的数字该怎么看 (https://zhangwenbao.com/content-optimization-tools-score-truth.html),第一条就是别拿两个不同年份的口径做增长率。 ## “超过”这个词,改变的是举证责任 字段 | 2023年版 | 2024年版 | 2025年版 | 候选池规模 | 234 | 400多 | 400多 | 准则条数 | 500到680 | 500多 | 平均500多 | 审计工时 | 10000小时 | 超过20000小时 | 超过20000小时 | 加权分数总量 | 215000 | 275000多 | 275000多 | 行业数 | 18 | 18 | 19 | 获奖主体数 | 41 | 60 | 51 | 标签总数 | 55 | 76 | 55 | “我们评了234个站”这句话,举证责任在说话的人身上——如果有人质疑,得拿出名录来。“我们评了超过400个站”这句话,举证责任转移到了质疑的人身上——你得证明不足400,否则这句话就站着。 这个转移不是文字游戏,它是实实在在的。在商业材料里,一个不可证伪的陈述和一个可证伪的陈述,法律风险和公关风险完全不在一个量级上。 作为读的人,能做的是给这两类陈述打上不同的标记。可证伪的数字可以进你的分析表,不可证伪的数字只能进你的印象里。进表的必须能被复核,进印象的只能用来判断量级。两类数字混在同一张表里,是分析出问题最常见的起点,把指标收敛到一份可信来源 (https://zhangwenbao.com/seo-metrics-layer-single-source-of-truth-data-governance.html)之所以难,一大半原因在这。 ## 这跟“数据是哪年测的”是同一个问题吗 不完全是。上一次讨论行业基准报告只印发布日期不印观测日期 (https://zhangwenbao.com/industry-benchmark-data-observation-date-shelf-life.html)的时候,问题出在时间维度:一份两年前的快照因为被重新发布一次,看起来像刚拍的。那次的结论是,被重新发布的是页面,不是数据。 这次的问题在可核性维度:一个数字从精确值变成下限值之后,它既不会过期,也不能被核对。前者是“你不知道它是什么时候的”,后者是“你没办法知道它是不是真的”。一个数字同时具备不会过期和不能被核对这两个性质,它就变成了一个永久有效的装饰。 两个问题会叠加,而且叠加之后特别难缠:一个带加号的数字,被沿用了两年,你既查不出它是哪年算的,也查不出它准不准。这时候唯一能做的是找它的早期版本,看那时候有没有给过精确数。找到了就用早期版本的数,找不到只当量级参考。仪表盘全是绿灯生意却没动 (https://zhangwenbao.com/ai-search-kpi-blind-spot-metric-swap.html),往往就是不同源的数字被拼在了一张看板上。 ## 三类字段的判别法,这次给出了不同的答案 上一次用名单类、工作量类、分布类三类字段判别一份材料是“更新”还是“重发”,那次的结论是三类全没动,所以是重发。这次的结果是名单类和分布类都动了,工作量类一格没动。同一套判别法用在两份材料上给出了两种诊断。企业级SEO审计框架 (https://zhangwenbao.com/enterprise-website-seo-audit-framework.html)也强调结论要能追溯到具体检查项,而不是一个总评。 这个组合指向的是第三种情况:底层数据大概率没有大规模重做,但从这批数据里挑人的规则重新设计过。既不是纯粹的重发,也不是完整的更新,介于两者之间。换句话说,重做的不是评测,是分组。 判别法给出的不是一个是非题的答案,而是一个方向。它告诉你该往哪里追问,而不是替你下结论。三类字段的价值在于它能把“我觉得不太对”变成“这一类字段没动而那一类动了”。 ## 为什么工作量类特别值得盯 名单类会因为很多原因变动,包括正常的业务变化,所以它变了不一定说明什么。分布类的变动通常有明确的产品理由,比如新开一个行业,也不算异常。 工作量类不一样。它描述的是“我们今年干了多少活”,如果真的重新干了一轮,这个数字没有理由跟去年一模一样。哪怕只是从两万小时变成两万一千小时,也说明有人重新算了一遍。工作量是三类字段里唯一一个不重做就不可能变的,所以它变不变最能说明问题。 > 一字不改,最可能的解释是这段话被整体沿用了。沿用一句话不算什么,沿用一句话里的数字,等于让去年的工作量替今年的工作量背书。这才是需要被看见的那一层。而背书这件事一旦发生,读的人是完全察觉不到的。 ## 三份材料要一起看才有用 这一整节的所有结论,都依赖一件事:三年的版本都还能打开。如果2023年那版被删掉或者被覆盖成2025年的内容,“精确数变成下限数”这个转折就永远不会被发现。材料链的完整性,往往比材料本身的质量更决定你能查出什么。 所以看到一份年度材料,第一件事是搜一下有没有往年版本。搜法很简单:把网址里的年份改一改,或者在站内搜同名标题。这家机构三个版本的网址分别以无年份、2024、2025结尾,规律一眼就能看出来。 找到往年版本之后,重点不是读它,是拿它跟当前版本做逐字对照。用文本比对的方式看两份材料的差异 (https://zhangwenbao.com/text-diff-lcs-line-word-comparison-guide.html),比通读两遍快得多,也不容易漏。 ## 这不是在指控谁复制粘贴 再强调一次:年度稿件沿用模板是完全正常的做法,任何一家持续产出内容的机构都这么干,包括做得非常规范的机构。把上一年的稿子拉出来改几个字,是效率,不是懒惰。换成任何一家按年发年度总结的机构,做法大概率都一样。给工具栈做年度审计 (https://zhangwenbao.com/ai-tool-stack-annual-audit-12-sites-4-dimensions-8-steps.html)时翻自己去年的记录,多半也有沿用痕迹。 问题不在于复制粘贴这个动作,而在于复制粘贴之后,那些数字看起来仍然像是今年的。读的人没有任何线索能分辨哪些数字被重算过、哪些被沿用了,因为页面上只有一个日期,就是发布日期。一个日期承担了两件事:这段话是什么时候发的,和这些数字是什么时候算的。 这是一个结构性的缺口,不是某一家的疏忽。任何按年发布的材料都有这个缺口,区别只在于有没有人去做那次逐字对照。 ## 把这一节收成一句话 看到一份带年份的材料,先把往年版本找出来,把工作量类的数字并排放一遍。全都一模一样,就说明这一段话被整体沿用了,那些数字不能当作“今年的工作量”来引用。 再看这些数字是精确值还是带加号的下限。如果早期版本给的是精确值、近期版本变成了下限,那么早期版本反而是更值得引用的那一份,尽管它更旧。 问完时间和工作量,还剩最实际的一问:这份名单里有多少家是你能自己打开、自己核对的。这一问的答案,往往比前面所有问题的答案都更能决定这份材料能不能用。 ## 名单里有几家是你自己能打开核对的? ## 把获奖名单和公开站点名录对一遍 这家机构有一个公开的体验基准页 (https://baymard.com/ux-benchmark),上面列着它评测过的电商站,每一家都有一张卡片,写着行业和被拆解的页面设计数量,点进去还有完整的案例研究。这份名录是公开的,不需要登录,任何人都能一家家看过去。 把2025年那51位获奖者的名字,跟这份公开名录做个交集,结果是40家能对上,11家对不上。对不上的意思是:这家公司拿了“某某行业前1%”,但你在这家机构的公开名录里找不到它,也看不到它的案例研究和分数。 这个比对花了不到十分钟:名录页复制下来,名单页复制下来,把国家后缀和大小写统一一下,跑个集合运算。比对本身没有任何技术含量,难的是想到要做这一步——大多数人拿到榜单只会看谁上榜了。真正的门槛不是技术,是有没有人想到把两份名单放在一起。B2B买家先问AI再做决定 (https://zhangwenbao.com/ai-b2b-buying-journey-vendor-visibility.html)那件事里,进不进得了名单也取决于一份看不见的清单。 ## 11家不可核的公司,拿了14个奖 这11家里有几家拿了不止一个奖。逐条数下来,它们一共占了14个“前1%”标签,而全部标签总数是55个。也就是说这份榜单上25.5%的奖项,外部无法用任何公开材料复核。 四分之一。这个比例不算小,尤其考虑到榜单本身的定位是“表彰顶尖1%”。当一个荣誉体系里有四分之一的获奖者查无实据,剩下四分之三的可信度也会被连累,因为你分不清手上这条属于哪一类。 更实际的影响是:如果你想照着榜单上的某家去学,恰好挑中的是这11家之一,那么你既看不到它的评分明细,也看不到它被拆解过的页面截图,能拿到的只有一个公司名和一句“前1%”。学什么、从哪学,全靠自己猜。猜的结果往往是照着看得见的那部分抄。看清AI在引用哪些域名 (https://zhangwenbao.com/most-cited-domains-ai-search-citation-sources.html)之所以值钱,就是把一份看不见的名单变成了可数的。 ## 不可核的原因写在页面上 页面自己交代了原因:候选池里除了公开基准的站点,还包括购买过体验审计服务的客户,只要这些客户的表现达到或超过基准站点,也可以参评。而客户的数据按保密协议不对外公开。 这个安排本身完全说得通,甚至可以说是必要的。客户花钱做审计,评测结果属于商业机密,机构没有权利把它挂出来。要求把客户数据公开是不现实的,也不合理。 问题不在于该不该保密,而在于保密的那部分和公开的那部分被混在同一份名单里,用同样的措辞、同样的排版发布,读的人分不出来。如果名单上给这11家加个标注,说明“该站数据不公开”,整件事的性质就完全不同了。成本是11个脚注。 ## 房产这个行业,两头都查不到 2025年名单里有一条特别值得看:某家房产信息平台拿了“房产行业桌面端、移动端和App端前1%”,一口气三个终端全拿。这是名单里唯一一家三端通吃的公司。 然后去查这个行业。这家机构公开的行业分类一共32个,从服饰配件到宠物食品,从航班机票到在线学习,覆盖面很广,但里面没有“房产”。这个行业在它的公开体系里不存在。一个不在自己公开分类体系里的行业,是怎么产生出一个行业前1%的,页面上没有说明。 再去查这家公司,它也不在那份公开名录里。一个不在公开分类里的行业,一家不在公开名录里的公司,一个三端全拿的“前1%”。这条记录从头到尾没有任何一个部分可以被外部验证。 ## 这条记录说明了什么,又没说明什么 它不说明这家公司体验做得不好,也不说明这个奖是编的。最可能的情况非常平淡:这是一家购买了审计服务的客户,评测确实做了,成绩确实不错,为了给它归类临时开了一个行业。 > 它说明的是另一件事:当一个格子可以为某个具体对象临时新开的时候,“该格子里的前1%”这个说法就失去了约束力。格子是后开的,里面只有一家,那么这家必然是第一名,也必然是“前1%”。 这不是阴谋,是流程的自然结果。任何按格子发奖的体系,只要格子的划分权在发奖方手里,就会有这种情况。区别只在于外部能不能看出来——这次能看出来,是因为公开的行业列表恰好也在同一个网站上。大多数榜单不会公开自己的分类体系,所以这类情况通常查不出来。页面上的结构化字段能被一次扒清 (https://zhangwenbao.com/schema-extractor-structured-data-audit-guide.html),榜单的分类体系却没有对应的扒法。 ## 公开名录自己也有个小对不上 那个基准页的大标题写着“335个顶级电商站按体验表现排名”。但把页面上的案例研究卡片一张张数下来,实际是334张。差一张。 334和335的差别当然无关紧要,可能是某个站的卡片渲染失败,可能是名录里有一家暂时下架,也可能是标题写的时候多算了一个。这一条本身不值得追究。 值得记下来的是这个动作本身:标题上的总数和实际能数出来的条目数,值得数一遍。大多数时候两者一致,偶尔不一致,而不一致的地方往往指向一段没写出来的说明。这个动作的成本是一次滚动加一次计数。 ## 334张卡片能加出一个官网没有的数 每张卡片上都标着这个站被拆解了多少个页面设计,比如某家综合零售是90个,某家电子产品站是80个,某家软件公司只有18个。把334张卡片的数字全加起来,得到14504。 这个数在官网任何一个地方都找不到。均值43.4,最少的11个,最多的99个,跨度接近九倍。跨度这么大是合理的——一个有全套结账和会员体系的综合商城,能拆的页面本来就比一个只有订阅流程的软件站多得多。有了这个基数,以后任何关于拆解量的说法都有了参照。按页面模板抽样做电商SEO审计 (https://zhangwenbao.com/ecommerce-seo-audit-template-level-sampling.html)同样依赖准确的基数,基数错了比例全错。 加总值的意义不在于它是多少,而在于它可以被用来交叉验证别的数字。如果哪天这家机构说“我们拆解了两万个页面设计”,你手上就有一个可以对照的基数了。上一次手工加总卡片上的条目数 (https://zhangwenbao.com/product-list-guidelines-scoring-selection-bias.html)也是这个思路,加总值往往是整份材料里最硬的那个数。 ## App端的覆盖率只有14.1% 可核层级 | 家数 | 占51家的比例 | 名单上能查到公司名 | 51 | 100% | 能在公开名录里找到 | 40 | 78.4% | 能看到案例研究与评分 | 40 | 78.4% | 能看到具体评了哪些页面 | 40 | 78.4% | 那334张卡片还标着每个站被评了哪些终端。数下来:有桌面端的326家,有移动网页端的334家,而有App端的只有47家。47除以334等于14.1%。 三个终端全齐的只有39家,占11.7%;只做桌面和移动网页、没有App的有287家,占86%。也就是说App这个终端,在公开的评测体系里是个很小的补充,不是主战场。 而2025年的奖项里,带App的标签有8个。8个“App端前1%”,背后的公开候选池是47家。47家的1%是0.47家,四舍五入是0家。严格按字面算,App端根本不该有任何一家能拿到“前1%”。 ## 8个App奖里有3个来自不可核的公司 再往下拆一层:这8个App相关的标签里,有3个属于那11家查不到的公司。剩下5个属于公开名录里的站,其中包括一家服饰品牌、一家快餐连锁、两家连锁超市。也就是说八分之三的App奖,来自外部完全看不见的那部分。 把两件事叠在一起看:候选池47家,其中拿奖的至少5家来自公开名录,加上不可核的部分,实际获奖率相当高。这跟“App端体验的顶尖1%”这个描述之间的距离,比行业奖那边还大。 这一层不需要指控任何人,它只是提醒一件事:越是覆盖率低的维度,那一格里的“前1%”越接近“参评了就有奖”。而覆盖率这个数据,需要自己去数才知道。数覆盖率的成本是把终端标注抄一遍,半小时能做完。让AI帮着做审计有三个前提 (https://zhangwenbao.com/ai-seo-geo-audit-agent-pitfalls.html),其中一条正是先确认数据覆盖。 ## 柏林原则里有两条正好管这个 终端 | 公开名录覆盖家数 | 占334家比例 | 当年该终端标签数 | 桌面端 | 326 | 97.6% | 32 | 移动网页端 | 334 | 100% | 38 | App端 | 47 | 14.1% | 8 | 三端齐全 | 39 | 11.7% | — | 那份16条的排名原则,第11条要求“尽可能使用经过审计和可验证的数据”,理由写得非常直白:这类数据的好处包括它们已经被被评对象认可,而且在不同机构之间是可比、可兼容的。 第12条更狠一点,要求“纳入按科学的数据采集程序收集的数据”,并且明确写着:从不具代表性或有偏的子集中采集的数据,可能无法准确代表一个机构,应当予以排除。47家撑起的App端排名,恰好落在这条的射程里。 这两条不是法规,没有强制力,谁也不会因为违反它们被罚款。但它们提供了一套现成的提问框架,而且是二十年来这个领域里最被广泛接受的那一套。用它来对照一份商业榜单,比自己临时想问题靠谱得多。 ## 金融监管里有一条真正带牙齿的规定 比原则更硬的是法条。美国证券交易委员会管投资顾问广告的营销规则 (https://www.ecfr.gov/current/title-17/chapter-II/part-275/section-275.206(4)-1)里有专门一款讲“第三方评级”:广告里不得出现任何第三方评级,除非同时满足两个条件。 第一个条件是,投资顾问要有合理依据相信,用于准备这份评级的问卷或调查,其结构让参与者提供正面和负面回答同样容易,并且没有被设计成产出某个预定结果。这一条管的是评级工具本身有没有被做偏,跟评级结果好不好没有关系。换句话说,就算最终名次完全公正,只要问卷被设计成容易得出正面回答,这条评级就不合规。 第二个条件是清晰而显著地披露三样东西:评级作出的日期以及评级所依据的时间段、创建和统计该评级的第三方的身份、以及如果适用的话,该顾问是否为获得或使用这份评级直接或间接支付过报酬。三样,缺一不可。三样里最容易被省略的是第一样,也就是时间。 ## 那三项披露,正好是读榜单的三问 把这三条翻译成日常语言:这份评级是什么时候做的、覆盖哪段时间;是谁做的;被评的人有没有给做评的人钱。三个问题,任何一份行业榜单都适用,跟金融没关系。 拿来对照本文这份榜单:第一问答案是发布日期有、依据的时间段没有。第二问答案清楚,是这家机构自己。第三问最有意思——候选池里明确包含付费审计客户,也就是说确实存在“付过钱的参评者”,而且这一点写在页面上,只是从来不会跟着标签一起流传出去。 需要说清楚的是:付费客户参评不等于花钱买奖,这两件事之间隔着很远。审计服务卖的是评测和建议,不是名次。但按金融业那套标准,“存在付费关系”本身就构成一个必须披露的事实,跟它有没有影响结果无关。 ## 为什么金融业要管到这一层 因为投资顾问拿着“某某榜单前1%”去招揽客户,投资者据此把钱交出去,损失是直接的、可计量的、可诉讼的。监管的逻辑很朴素:既然这个标签会影响别人的钱包,那它的来历就必须写清楚。 电商体验榜单不涉及这么直接的资金流向,所以没有对应的监管。但影响链条其实是类似的:一家公司照着榜单上的对象改自己的产品,投入的是几个月的排期和几个人的工时,这笔钱同样是真的。排期和工时不会出现在任何一张财务报表上,但它们同样是花掉的钱。 差别只在于没人替你把关,所以这三问得自己问。自夸式榜单被搜索引擎点名 (https://zhangwenbao.com/self-promotional-listicles-ftc-google-crackdown.html)那件事之后,很多人开始注意榜单的利益关系,但注意力大多停留在“这是不是软文”,而不是“这个标签的分母是什么”。分母这个问题比利益关系更基础,它连有没有利益关系都不用问就成立。挑反链分析工具 (https://zhangwenbao.com/backlink-analysis-tools.html)也是先看索引库覆盖多少,再看功能。 ## 可核性是分层的,不是有或没有 把这一节的账收一下。这份榜单的可核性可以分成四层:能查到公司名的51家,能在公开名录里找到的40家,能看到案例研究和分数的40家,能看到具体评了哪些页面的也是这40家。分层之后你会发现,可核性不是这份榜单的短板,短板在标签的表述上。 第一层到第二层掉了11家,占21.6%。后面几层没有再掉,说明公开的那部分做得相当完整——这一点应该给出正面评价,很多榜单连第二层都到不了。 做核对的时候,把每一条记录标上它属于第几层,比笼统地判断“这份榜单可不可信”有用得多。可核和不可核可以混在一份名单里,你要做的不是整体接受或整体拒绝,是逐条分类。 ## 把这一节收成一句话 拿到一份榜单,第一步不是看谁上榜,是数一数上榜的对象里有多少家你能自己打开、自己核对。这个比例比榜单的名气重要得多,也比它的方法论描述重要得多。名气大的榜单反而更容易被引用得草率。五个维度打出来的一百分制审计分 (https://zhangwenbao.com/geo-optimizer-5-category-100-point-audit-guide.html)也一样,分数越像模像样,越少有人看判定规则。 核不了的那部分不必全盘否定,但要单独标出来,不要让它跟可核的部分混在一起进你的分析表。分析表里每一格都应该能追溯到一个可以打开的页面,追溯不到的那些格子,写上“未公开”三个字。未公开这三个字写出来,比留空强,因为它记录了你确实查过这件事。 问完可核性,还剩最后一个技术性的问题:这些被加起来的分数,加法这一步本身站不站得住。这个问题听起来很学究,但它决定了那个总分能不能当尺子用。 ## 把一个个打分加起来算总分,这一步在计量上成立吗? ## 275000个分数是被加起来用的 这份榜单的每一句方法说明里都写着,奖项“基于超过275000个加权体验分数”。加权两个字说明这些分数不是简单堆在一起的,是乘上系数之后再汇总的。汇总之后得到一个综合表现值,站与站之间靠这个值排序,排在前面的拿奖。 这个流程听起来天经地义,几乎所有评分体系都这么干。给每一条准则打个分,按重要性配个权重,加起来得总分,总分排序出名次。做过评分模型的人闭着眼睛都能写出这套逻辑。正因为太熟悉,这套流程里的一个前提几乎从没被检查过。七维度加权模型把选词变成可排序的数字 (https://zhangwenbao.com/keyword-opportunity-score-7-dimension-model-guide.html)用的就是它,好用的前提是只拿它排序。 但是加权求和是一个代数运算,它对参与运算的数有要求。不是所有能写成数字的东西都能相加,这一点在计量学里有非常明确的界定,而且界定得比大多数人想象的严格。这个要求不是学究式的讲究,它决定了算出来的数能不能被拿去做比较。 ## 计量学里有一类量,叫序量 国际计量学词汇给“序量”下的定义是:一种由约定的测量程序所定义的量,它可以按大小与同类的其他量建立全序关系,但这些量之间不存在代数运算。定义很短,关键在最后半句。定义里那句“不存在代数运算”,直接否掉了加法。 能排序,不能做代数运算。也就是说你可以说甲比乙大、乙比丙大,但你不能把甲和乙加起来,不能算甲乙之差,也不能说甲是乙的两倍。这些操作在序量上没有意义,不是不精确,是根本没定义。 词汇表在这条下面还补了一句注释:序量只能进入经验关系,既没有测量单位也没有量纲,序量之间的差和比没有物理意义 (https://jcgm.bipm.org/vim/en/1.26.html)。这句话是本文里最该被划下来的一句。差和比这两样,恰恰是所有对标动作最常用的两种运算。 ## 它举的四个例子,很有意思 词汇表给序量举了四个例子:洛氏C标度硬度、汽油的辛烷值、里氏震级的地震强度、以及零到五级的主观腹痛程度。前三个是工程和地质领域的标准量,第四个是医学问诊里的疼痛自评。四个例子横跨材料、化工、地质和医学,覆盖面这么广不是偶然。 把这四个放在一起看,能看出一个共同点:它们都是“按一套约定的程序,把某种性质映射到一个数轴上”。映射之后数看起来很正常,可以比大小,可以画图表,可以做统计。 但没有人会把两次地震的里氏震级加起来说“总共发生了11.2级地震”,也没有人会把两个病人的疼痛等级相加。这两件事的荒谬是直觉可见的。而把两个页面的体验评分加起来,荒谬程度完全一样,只是不那么直觉可见。 ## 里氏6级不是3级的两倍 里氏震级这个例子特别值得展开,因为它是最多人搞错的一个。里氏6级地震释放的能量大约是3级的三万多倍,不是两倍。差值3在这个标度上不代表任何固定的物理量。三万多倍和两倍之间的差距,就是把序量当可加量用的代价。 辛烷值也是同样的道理。95号汽油的抗爆性不是90号的1.056倍,这两个数之间的差值5也不对应任何固定的性能差距。数字只是标签,标签之间的间距不承载任何信息,这一点在所有序量上都成立。 体验评分的处境跟它们一样。一个站得80分、另一个得40分,不代表前者的体验是后者的两倍好,甚至不代表前者比后者好两个“单位”,因为这个尺子上根本没有单位这回事。没有单位就没有比例,没有比例就不存在几倍好这种说法。 ## 体验准则的打分是什么类型 一条体验准则的评判通常是这样的:这个站的商品页有没有在图廊里放尺寸对照图,有没有把配送时效写在加购按钮附近,筛选器有没有支持多选。答案基本上是“有、没有、部分有”三档。三档之外偶尔还有不适用,那种情况直接不计入分母。 三档打分本身是个非常合理的做法,简单、稳定、不同的人评出来结果一致性高。这也正是能进入评分表的准则必须是不认识你的人也能判对错的那种 (https://zhangwenbao.com/product-list-guidelines-scoring-selection-bias.html)的原因。三档是可判定性的产物。换句话说,为了让不同的人评出一致的结果,评判方式必须简化到三档。 问题出在下一步。把几百个三档判断加起来,得到的那个数究竟是什么?它是“符合的条数”的一种加权计数,而不是“体验好坏”的度量。计数和度量是两回事,前者能加,后者不一定能加。把计数当度量用,是评分体系里最常见也最难察觉的一步跳跃。 ## 加权让事情更复杂了一层 如果只是数“符合了多少条”,那还好说,计数是可以相加的,加出来的数有明确含义。但一旦给每条准则配上权重,事情就变了——权重是根据“这一条有多重要”人为设定的,而“重要程度”本身也是个序量。两个序量相乘,结果在计量上没有任何定义可言。 用一个序量去乘另一个序量,再把结果加起来,得到的东西在计量上很难说清是什么。它不是没有用,它在实践中确实能区分出好坏,问题是它得出的那个数不能被当成一个可以做算术的量值来对待。 这跟把向量相似度0.89当成内容对齐程度 (https://zhangwenbao.com/content-alignment-vector-score-trap.html)是同一类错觉:一个数被算得很精确,精确不等于准确,更不等于它可以被拿去做减法和除法。 ## 那这个总分还能不能用 能用,但用法有边界。它可以用来排序——这正是序量被定义出来的用途,排序是序量唯一被允许的操作。所以“这个站排第几”是一个有效的结论。 它不能用来做差值比较。“我们比行业头部低了23分”这句话没有意义,因为23这个差值不对应任何具体的东西。同理,“提升15分”作为一个目标也是空的,你不知道15分是三条准则还是三十条。把没有单位的差值写进目标,等于给团队一个无法验证是否达成的指标。用六维量表给内容打分定级 (https://zhangwenbao.com/geo-geval-6-dimension-quality-scoring-guide.html)时,级别之间的距离同样不该被当成可加的。 > 它也不能跨体系比较。两家不同的机构各自打出的体验分,哪怕都是百分制,也不能放在一起说谁高谁低。序量的数值只在它自己那套约定的程序内部有意义,离开那套程序就是一串没有单位的数字。 ## 把序量当成可加的量,会得出什么样的结论 最常见的一种是“我们只要补齐这30条准则,分数就能追上对手”。这个推理默认每条准则的分值是可加的、独立的、等价的,而这三个假设通常都不成立。 第二种是“行业平均分是62分,我们68分,已经高于平均”。平均值对序量来说是个可疑的统计量,因为求平均需要做加法和除法,两个操作在序量上都没有定义。行业平均分这个说法到处都是,很少有人追问它怎么算的。可读性分数背后有六个不同公式 (https://zhangwenbao.com/readability-scorer-content-difficulty-guide.html),换一个公式同一篇文章的等级就变了。 第三种更隐蔽:把不同年份的总分画成折线图看趋势。如果中间准则集变过、权重调过,这条折线上的每个点都来自不同的尺子,连起来的那根线不表示任何东西。折线图说服力极强,也最容易掩盖口径变动。把可见性拆成七个维度 (https://zhangwenbao.com/geo-content-scorer-7-dimension-9-strategy-guide.html)之后再看趋势,比盯一个总分靠谱。 ## 可比性在计量学里有个严格定义 同一份词汇表里还有一条叫“测量结果的计量可比性”,定义是:对于给定类别的量,其测量结果可溯源到同一参照时所具有的可比性 (https://jcgm.bipm.org/vim/en/2.46.html)。关键词是“同一参照”。 它举的例子是:地球到月球的距离和巴黎到伦敦的距离,这两个测量结果是可比的,因为它们都可溯源到同一个测量单位,也就是米。距离差着十几个数量级也没关系,可比性跟量级无关,只跟参照有关。这个例子选得很妙:两个量级差得极远的距离,照样是可比的。 反过来说,如果两个结果溯源到不同的参照,那它们再接近也不可比。这条定义把“可比”从一个模糊的感觉变成了一个可以检查的条件:找出参照,看是不是同一个。一个能被检查的条件,价值远高于一句听起来正确的原则。 ## 三年三套准则集,参照不是同一个 把这条用到那三份名单上:2023年的评测用500到680条准则,2024年用500多条,2025年用平均500多条。这三套准则集是不是同一套?页面没说,但从条数的写法变化看,至少口径变过。从区间到“多”再到“平均多”,写法变了三次,本身就是信号。 更明确的证据是分数总量:2023年215000个,2024和2025年275000个。总量变了28%,说明参照体系确实动过。既然参照不同,那么三年的分数结果按定义就不可比,跟每一年评得多认真无关。分数总量是最难造假也最能反映参照变动的一个数。 这条推论的好处是它不依赖任何内部信息。你不需要知道准则具体改了哪几条,只需要知道“参照变过”这个事实,就足以判定跨年比较无效。可比性是个前置条件,不满足就不用往下算了。 ## 参照本身还必须带时点 词汇表讲“计量溯源性”的时候有一条注释写得特别到位:对参照的说明必须包含该参照在建立校准链时被使用的时间,以及关于该参照的其他相关计量信息,比如校准链中第一次校准是何时做的。尺子的版本号和被测对象的时点,是两个独立的时间。 翻译过来就是:说清楚你用的是哪把尺子还不够,还得说清楚那把尺子是什么时候的版本。同一套准则集,2023年版和2025年版可能条目数一样、名称一样,内容却改过。 这就跟数据的观测时点 (https://zhangwenbao.com/industry-benchmark-data-observation-date-shelf-life.html)接上了。上次讨论的是被测对象的时点,这次是尺子本身的时点。两个时点都不写在标签上,而只要有一个对不上,比较就不成立。两个时点里,尺子那个更隐蔽,因为它连一个日期都不会出现。 ## 这不是在挑学术上的刺 有人会说:一份商业榜单不需要满足计量学标准,用户又不是在做物理实验。这个反驳有道理,绝大多数商业评分体系都不满足这些条件,照样在被广泛使用,而且确实有用。 计量学定义的价值不在于给榜单判死刑,在于给你一套现成的语言,把“我总觉得这个比较不太对”说清楚。说清楚之后,讨论才能从感觉层面进到具体层面。 而且这套语言是可操作的:找参照、看是不是同一个、看参照有没有带时点。三步查完,你就知道手上这两个数能不能放在一起,这比争论“这份榜单权不权威”有用得多。 ## 什么时候必须较这个真 做内部汇报、给团队看个大概方向,不用较真,序量拿来排序完全够用。真正需要较真的场合有三个:把分数写进考核指标、把分差写进立项理由、把跨年趋势写进战略判断。前一类出错代价很小,后三类很大。关键词优先级用六维度三档矩阵定 (https://zhangwenbao.com/keyword-priority-scoring-model-beyond-difficulty.html),就是为了避免把综合分直接当排期依据。 这三个场合的共同点是,那个数字会驱动资源分配。一旦有人根据“我们比对手低23分”批下三个月的排期,那23分就不再是一个参考值,它变成了一笔钱的依据。从参考值变成花钱的依据,这个转变通常没有任何人宣布过。 这时候就必须回答:这23分是怎么来的、它对应多少条准则、这些准则里有多少条是我们真该做的。拆解一个综合评分是怎么算出来的 (https://zhangwenbao.com/seo-rank-score-r-score-formula-guide.html),本质上就是把序量还原回它背后的那些可判定的条目。还原到条目之后,讨论的对象就从一个数变成了一张待办清单。 ## 还原回条目,是唯一靠谱的用法 一个体验总分最有用的地方,从来不是那个数本身,而是它背后那张明细表。明细表上写着哪些准则符合、哪些不符合,每一条不符合的都是一个具体的、可执行的待办。明细表的每一行都指向一个具体页面上的具体位置。 拿到明细表,总分就可以扔掉了。你需要的是那几十条“不符合”,以及判断这几十条里哪些跟你的业务真的相关。这个判断没有任何评分体系能替你做。相关性判断依赖你对自己业务的了解,这恰恰是外部评测最缺的。技术SEO一堆问题先修哪个 (https://zhangwenbao.com/technical-seo-prioritize-business-impact.html),最终也是按业务影响排。 总分的作用是让你决定要不要打开明细表,明细表的作用是让你决定要做什么。把这两件事的顺序搞反,就会出现“为了提分而提分”的项目,那种项目通常做完了没人说得清收益在哪,因为提上去的那几分本来就不对应任何具体的用户行为。 ## 榜单方其实也知道这一点 值得公道地说一句:这家机构的公开材料里,案例研究页面给的恰恰就是明细——哪个页面被拆成了几个设计、每个设计上标注了什么问题。这部分内容的质量相当高,远比那个名次有用。把最有价值的部分放在明细里,是这家机构做得对的地方。 换句话说,它自己也把重心放在明细上,那个总分和名次更多是一个入口和一个传播抓手。真正被过度使用的是标签,不是研究本身。 这也是本文一路强调的:问题几乎从来不出在原始材料上,出在标签脱离原始材料之后独自旅行的那一段。原始材料越扎实,脱落下来的标签传得越远,这两件事是成正比的,也是这类误读最不公平的地方。 ## 把这一节收成一句话 体验评分是序量,能排序,不能做加减乘除。总分可以用来决定要不要细看,不能用来算差距、算平均、画跨年趋势线。 要判断两个分数能不能比,就查一件事:它们溯源到同一个参照吗,那个参照有没有标明是哪个时点的版本。两问都过才能比,有一问不过就只能各看各的。 到这里,一份榜单该查的四件事都齐了:分母被切成了几份、数字之间对不对得上、名单能不能核实、分数能不能做算术。剩下的问题是,查完之后该怎么办。查完之后怎么办,比查出什么更决定这件事有没有价值。 ## 拿到一份行业榜单,第一件事该做什么? ## 一个照着榜单改了三个月的团队 有个做跨境箱包和旅行配件的独立站,登机箱、托运箱、双肩包再加上收纳配件那一套,主要打北美和澳洲,客单价在80到400美元之间,团队十几个人,前端加运营一共不到六个。他们的移动端一直是短板,加购率比桌面端低一大截。 年初的时候,负责运营的同事在一份电商体验榜单上看到,某家同类目的品牌拿了“行李与旅行用品行业移动端前1%”。这条信息被截图放进了季度规划,配的结论是:既然同类目里人家做到了顶尖,那就照着人家的移动端商品页改一遍。 立项通过得很顺利,因为理由太硬了——“行业前1%”这五个字在会议室里几乎不会被质疑。两个人排了三个多月的期,把移动端商品页从图廊到规格表到加购区重做了一轮。立项理由越硬,事后越没人回头质疑它的来源。把SEO当产品做 (https://zhangwenbao.com/seo-as-product-roadmap-metric-system-iteration-discipline.html)的一个好处,就是每个立项都要写清楚假设。 ## 三个月之后,数字没怎么动 改版上线之后跟了六周。移动端商品页的跳出率降了几个百分点,这个是实打实的收益,页面确实做得比原来利落。但加购率一直在正负一个百分点里晃,六周下来看不出方向。跳出率和加购率是两个不同层面的指标,前者动了不代表后者会跟着动。 转化那条线也没什么变化。团队最初预期的是加购率能有个两三成的提升,因为对标的是“顶尖1%”,落差应该很明显才对。结果落差没有兑现成提升。预期落差没有兑现,通常意味着对标的前提出了问题,而不是执行不到位。 这时候的常规反应是继续改:是不是抄得不够彻底,是不是还有几个细节没跟上。第二轮方案已经在写了,写到一半被一件很小的事打断。 ## 一个新来的运营想看细节,结果打不开 新来的运营想找那家对标品牌的完整案例研究,看看它的结账流程是怎么设计的,好把第二轮的范围划出来。她在那家机构的公开名录里搜了半天,没搜到。 换了几个拼法、去掉后缀、按行业筛,都没有。最后确认:那家品牌根本不在公开的站点名录里,它的评分明细、案例截图、页面拆解,外部一样都看不到。名单上有它的名字,别的什么都没有。查不到明细的对标对象,抄的其实是外部能看见的那层壳。B2B产品详情页那十四个模块 (https://zhangwenbao.com/b2b-pdp-14-module-high-conversion-blueprint.html)能照着做,是因为每块都写清了它解决哪层疑虑。 顺手她又做了一件事:把公开名录按类目筛了一遍,看这一格里到底有几家。同类目的公开站点,一共4家。 ## 那一格里只有4家 4家。加上可能存在的、不公开的付费客户,撑死了六七家。也就是说所谓的“行业移动端前1%”,实际上是在一个不到十家的小池子里选出来的第一名。把“不到十家里的第一名”和“四百家里的前1%”放在一起,差距一目了然。 把这件事讲给团队听的时候,最直接的反应是:“那这跟'我们同行里有一家做得还不错'有什么区别?”没有区别。这就是那句话的真实含义,只是它被写成了“前1%”。 更麻烦的是第二层:那家品牌的客单价是他们的三倍多,SKU数量差着一个量级,供应链和履约体系完全不是一个模式。在一个四家的池子里,“第一名”很可能只是“最不像你的那一家”。品类和客单价不匹配的对标,抄得越像偏得越远。商品列表页上那个每千克单价 (https://zhangwenbao.com/unit-price-denominator-eu-rules-product-list.html)就是例子:欧盟规则下必须现算,别的市场照抄反而多余。 ## 五份材料,四份是零 复盘的时候把能拿出来的证据摊开数了一遍。榜单本身,关于那家为什么好,零行具体说明。流量分析,改版前后无显著差异,零条可归因的结论。搜索后台,没有任何词的表现出现拐点。 A/B测试做过一轮,样本量不够,结果不显著,零条可用结论。样本量不够的测试跑出来的结果不能用 (https://zhangwenbao.com/dtc-ab-test-sample-size-3-formulas.html)这件事他们是知道的,只是当时已经改完了,测试更像是补个手续。补手续式的测试,在复盘时是最没有说服力的一类证据。 第五份材料是客服工单。翻下来发现,从某个季度开始,“两件行李能不能分开寄到两个地址”和“超重了会怎么算钱”这两类问题的出现频率一直在涨,涨了半年多。这是唯一一份不是零的材料,而当时没有人在固定看它。 ## 真正在变的东西,榜单上一条都没有 多地址配送和超重费用预估,这两件事在那份体验榜单的准则体系里几乎没有对应的检查项。原因不难理解:评测的时候,被评的那批站没有一家在做这件事,没人做的事就不会被写成准则。评测体系覆盖的是当时的行业现状,覆盖不了还没走到的地方。物流跟踪页把用户踢到第三方站 (https://zhangwenbao.com/order-tracking-page-six-details-cross-border-wismo.html)这类问题,就是在没人做的时候没人写进清单。 > 这就引出一个比“榜单口径不清”更狠的推论:一份基于同行现状编出来的清单,永远只包含已经有人在做的事。真正的空白地带因为无人可比,天然不会出现在任何一张对照表上。这条推论比口径问题更根本,因为它不是执行问题,是结构问题。 照着榜单改,能保证你不掉队,保证不了你能领先。这两件事的性质完全不同,而立项的时候它们经常被混成同一句话——“对标行业顶尖”。不掉队和领先,需要两套完全不同的输入材料。退换货政策页既做信任背书又吃售后流量 (https://zhangwenbao.com/dtc-return-refund-policy-page-seo-trust-conversion-design.html)这种打法,不会出现在任何一张同行对照表上。 ## 改法很土,一个人两天 后来的做法很简单。一个运营用两天时间,把榜单上同类目的对象逐个打开,按当前状态重新看一遍,同时数清楚每一格里到底有几个候选。做成一张两栏表:榜单说的,和今天看到的。两栏表的价值不在于内容多,在于它逼着人把每一格的分母写出来。 这张表做完之后,最有价值的不是“哪一条基线移动了”,而是“这一格里有几家”这一列。因为它直接决定了每个标签该被读成“前1%”还是“这几家里最好的一家”。有了这一列,榜单在会议室里的说服力会回到它该有的位置。技术SEO做到满分却不涨 (https://zhangwenbao.com/search-intent-alignment-vs-technical-seo.html)的复盘里,缺的也是这样一列写明前提的备注。 保哥后来把这个动作固定在了立项流程里:任何以外部排名为理由的立项,必须在申请单上写清楚那个排名所在的格子里有几个候选。写不出来的,就写“未标注”,不设审批,不设校验,只看填没填。这一行加下去之后,用外部排名当理由的立项少了一半以上。 ## 重扫之后,榜单一条都没错 两天扫完,结论有点出乎意料:那份榜单里跟他们相关的条目,一条都没有被推翻。每一条在它自己的口径里都是对的,那家品牌确实在那一格里表现最好,这一点没有任何问题。结论没被推翻,反而让这次重扫的意义更清楚。体验报告里那两条没给达标率的建议 (https://zhangwenbao.com/post-purchase-ux-observation-cost-boundary.html)也是这样,不是错,是它到不了那一层。 变的只有一件事:每一条结论前面都多了一个限定语——“在四家里”。加上这个限定语之后,原本“必须追上的标杆”变成了“值得看一眼的同行”,优先级立刻往下掉了两档。四个字的限定语,抵得过三个月的排期讨论。用户连点五个筛选之后已经忘了自己选过什么 (https://zhangwenbao.com/shopify-collection-applied-filters-overview-ux.html),跟标签脱离限定语之后的处境很像。 > 团队当时问了一句:“那我们这两天不是白做了吗?”答案是:白做的不是这两天,是之前那三个多月。这两天是唯一一次用正确的分母重新读了一遍那份材料。 ## 还有一笔没人算的账 那三个多月里,两个人的排期被占满了。同一时期真正该做的多地址配送和超重费用预估,一格都没往前挪,因为没有人手,也因为它没有一个“行业前1%”这样的立项理由。被占满的排期不会报警,它只是安静地把别的事往后推。用户扫完一屏一个都没点开在报表里等于没发生 (https://zhangwenbao.com/product-list-item-attributes-silent-rejection.html),机会成本的沉默程度是一样的。 这笔账不会出现在任何一张报表上。改版做完了,页面确实变好看了,跳出率也确实降了,从交付的角度看这个项目是成功的。失掉的东西没有名字,也没有归属人。 机会成本从来不出现在报表里,可它才是这类误判最贵的部分。一次选错对标对象的代价,不是改版白改,是同期该做的事没做。同期该做没做的事,通常要等到下一个季度才会以别的形式冒出来。 ## 六个动作,按拿到成本和可执行性排 下面这六件事,全都不花钱、不需要埋点、不占开发排期。排序的依据是两个维度相乘:拿到成本有多低,以及结论能不能直接变成一个动作。六件事按这个顺序做,前面几件的产出会直接减少后面几件的工作量,顺序颠倒过来则会重复劳动。 第一件:数格子。把榜单上跟你同类目的对象逐个打开,数清楚公开可查的有几家。不到十家,就把“前1%”读成“本类目最佳”。二十分钟,排第一是因为它一次性决定了后面所有解读的前提,而且是六件里唯一一件关起门自己就能做完的。 第二件:标可核性。给榜单上每一条记录标一个记号,能打开案例研究的打勾,打不开的写“未公开”。半小时。这一件的价值在于它把一份名单拆成了两份,而这两份该用的方式完全不同。拆成两份之后,可核的那部分才是能拿去排优先级的。内容审计要在留改并删转之间做决策 (https://zhangwenbao.com/content-audit-pruning-decision-system.html),同样是先分类再动手。 ## 剩下四件 第三件:除一遍。数一数榜单上一共发了多少个标签,除以候选池规模,得到实际获奖率。三分钟。如果算出来是百分之十几,那这份榜单的标签是按格子发的,后面所有引用都要带上格子名。 第四件:找往年版本对工作量。把网址里的年份改一改,找出往年版本,把候选池规模、准则条数、工时、分数总量四类数字并排放一遍。二十分钟。四个数一格没动,说明这段话被整体沿用了。四个数一格没动,就别把它当作今年的工作量来引用。 第五件:把总分还原成明细。找到榜单背后的条目清单,只留下跟你的业务真正相关的那几条,其余的不看。半天。这是六件里唯一需要动脑判断的,也是唯一能产出待办清单的。 ## 第六件最便宜,也最难坚持 第六件:在任何写下外部排名的地方,强制带上格子名和年份。不是“某某是行业前1%”,而是“某某在2025年该榜单的行李与旅行用品行业移动端这一格里被评为前1%”。成本为零,难在坚持。格子名和年份加起来不到二十个字,却是整句里信息量最大的部分。图廊里那几张没露出来的缩略图 (https://zhangwenbao.com/product-gallery-truncated-thumbnail-signposting.html)同理,少掉的往往比看得见的更关键。 写不出格子名的,就写“未标注”三个字。这三个字必须真的写出来,不能留空——留空看起来像是忘了填,写上则是“查过了,对方没标”。这个区别在三个月后回头看的时候非常重要。查过和没查过,三个月后分辨不出来,除非当时写下来了。资深团队的技术SEO会失灵 (https://zhangwenbao.com/advanced-technical-seo-overlooked-issues-diagnostic.html),很多时候就是因为当年的判断依据没留下记录。 副产品是:半年之后,反复出现“未标注”的那几个来源会自动浮出来,那就是你的资料体系里口径最模糊的地方。不需要专门排查,它自己会聚起来。自动浮出来的东西,比专门排查出来的更可靠,因为它没有筛选偏好。 ## 卡在哪个环节最有效 动作 | 耗时 | 产出 | 数格子:同类目公开候选有几家 | 20分钟 | 这个标签该读成前1%还是本类目最佳 | 标可核性:能否打开案例研究 | 半小时 | 把一份名单拆成可核与不可核两份 | 除一遍:标签总数÷候选池规模 | 3分钟 | 实际获奖率,判断是不是按格子发的 | 找往年版本对工作量四个数 | 20分钟 | 这段话是重算的还是沿用的 | 把总分还原成明细条目 | 半天 | 一张只留相关项的待办清单 | 写下外部排名必带格子名与年份 | 零成本 | 半年后自动浮出口径最模糊的来源 | 这六件事如果没有一个固定的挂载点,做两次就忘了。最有效的挂载点是立项申请单和排期评审,不是竞品分析表——因为分析表是给自己看的,申请单是要过会的。 具体做法是在申请单上加一行必填:本次对标对象所在的那一格,当时有几个候选。不设选项校验,不设审批规则,判定标准只有“填了”和“没填”两种。前几批分别把类似的卡点挂在过组件库、验收用例模板、采购问卷、客服工单模板、发布检查清单和季度规划文档上,逻辑是一样的——卡在决策要花钱的那一刻,不卡在做研究的那一刻。 为什么必须是必填而不是建议?因为这一行的真正作用不是收集数据,是逼着提案的人在写申请之前去数一遍。数完之后,有一部分立项自己就撤了。撤掉的那部分立项,就是这一行必填带来的全部收益。 ## 四条边界,先说清楚 第一条:数格子只对公开名录有效。付费客户那部分永远数不出来,所以你数出来的候选数是个下限,实际可能更多。这不影响结论方向,但影响措辞——应该说“公开可查的有4家”,不是“一共只有4家”。 第二条:格子很大也不代表那家值得学。一个两百家候选的格子里选出来的第一名,如果客单价和品类跟你差着量级,照样不该抄。选对标对象要看的是维度匹配 (https://zhangwenbao.com/geo-competitor-17-dimension-ai-citation-gap-guide.html),不是名次高低。名次高低回答的是“谁做得好”,维度匹配回答的是“谁的做法你能用”。受众分群有七个维度可选 (https://zhangwenbao.com/audience-segmentation-user-grouping-rfm-lifecycle-engagement-dimensions.html),选错维度分出来的群再漂亮也用不上。 第三条:还原明细只对给了明细的榜单有效。有相当一部分榜单只发名次不发条目,那种榜单除了知道谁在里面,什么都做不了。第四条:这套方法治的是“对象选错了”,治不了“方向选错了”——那需要的是客服工单和搜索词,不是榜单。 ## 做完之后会发生什么,提前讲清楚 这套动作做完,榜单上的对标对象一个都不会减少,待办清单也不会变短。变的只有一件事:每个对标对象前面多了一个格子名和一个候选数。 而这个候选数会让其中一部分对象从“行业标杆”降级成“同量级同行”。第一次做完,常见的降级比例在三到四成之间。降级不代表那些对象不值得看,只代表它们不该独占三个月的排期。降级之后它们仍然值得看,只是不该再占用最好的那几个排期位。 这件事必须在动手之前说清楚。等两栏表做出来了再解释“其实标杆没那么标杆”,听起来全像是在给之前的判断找补。提前一句话讲明白,后面所有的沟通成本都省了。预期管理这件事,永远是提前一句话比事后十句话便宜。 ## 把整篇收成三句话 第一句:看到“前X%”,先问这个百分比是对着多少个对象说的。如果一份榜单同时发出几十个“前1%”,那它一定是按格子发的,格子里有几个候选决定了这个标签值多少钱。 第二句:把这份材料里能互相验算的数字找出来对一遍,把能加总的分项加一遍,把往年版本翻出来比一遍。对不上的标记为不可交叉引用,加得上的当作可信度加分,一字未改的当作沿用。 第三句:数一数名单里有几条是你能自己打开核对的,核不了的单独标出来。这三句问完,一份榜单该有的分量就基本落定了,剩下的是打开明细,找出跟你真正相关的那几条。找出那几条之后,这份榜单的使命就完成了,剩下的是你自己的事。 ## 常见问题解答 ## 榜单上根本没写候选池有多少家,这种情况怎么估? 先找三个地方。第一个是榜单页自己的开头段,很多榜单会顺带提一句“从多少家中评选”,哪怕带着加号也是个下限。第二个是这家机构的方法说明页或者关于页,那里通常写着样本规模,而且往往比榜单页给的更具体。第三个是它有没有公开的对象名录——有的话直接数,没有的话看有没有按行业筛选的入口,把每个行业的条目数加一遍。三处都找不到,就按最保守的方式处理:假设那一格里只有你自己能想到的那几家同行,然后把“前1%”读成“这几家里最好的一家”。这个假设通常不会让你亏,因为切片型榜单的实际格子规模确实很小。 ## 候选池里包含付费客户的榜单,还能不能用? 能用,但要拆开用。付费客户参评本身不构成问题,很多研究机构的商业模式就是这样,评测标准对客户和非客户是同一套的可能性也很高。真正的问题是外部无法区分名单里哪些条目属于哪一类,也看不到客户那部分的明细。实际做法是:把能在公开名录里找到的那些单独拎出来,这部分可以当作可复核的证据用;找不到的那些标注“数据未公开”,只当作一个线索,不作为对标依据。如果一份榜单里可核部分低于一半,那它更适合当行业动态读,不适合当基准用。这个判断跟机构的信誉无关,只跟你手上能拿到什么材料有关。 ## 一份榜单只发一个整体第一,是不是就更可信? 可信度会高一些,但代价是可用性下降。只发一个第一名,意味着这个标签的分母确实是整个池子,不存在切片放大的问题。但对读的人来说,一个跟自己业务完全不搭界的第一名,参考价值往往低于同类目里的第三名。所以更好的判断方式不是看榜单发了几个奖,而是看它有没有把每个奖的分母写出来。发五十个奖但每个都注明了格子规模的榜单,比只发一个奖但什么都不解释的榜单有用得多。透明度和颗粒度是两件事,前者决定能不能信,后者决定用不用得上。两者兼有的榜单很少,遇到了要珍惜。 ## 找不到往年版本,这套对照法是不是就用不了了? 还有两条退路。第一条是网页存档服务,把当前网址粘进去看历史快照,年度榜单这类页面被存下来的概率相当高,尤其是流量大的机构。第二条是找引用过这份榜单的第三方文章,那些文章往往会把当年的数字抄进正文,抄下来的数字虽然是二手的,但至少带着一个明确的时间戳。两条都走不通的话,就退而求其次:只用当前版本,并且把它当作一个单点观测而不是趋势的一部分。单点观测同样有价值,只是不能用来说“越来越好”或者“越来越差”。写结论的时候把这个限制写进去,比假装有趋势要诚实得多。 ## 自己团队做内部评分体系,怎么避免踩序量这个坑? 最实用的办法是:总分只用来排序和触发动作,永远不写进目标。比如规定“综合分掉出前三就启动一次专项复盘”,这是合法用法;而“本季度综合分提升五分”就不是,因为五分不对应任何具体的事。第二个办法是把每条检查项的判定结果和总分一起存下来,任何人质疑总分的时候都能立刻还原到条目。第三个办法是权重一旦定下就锁一整年,中途要改必须同时保留旧权重的算法,两套并行至少一个周期。这三件事做到,评分体系仍然是序量,但它至少不会误导人,也不会在换了负责人之后变成一笔糊涂账。 ## 对标对象已经定了、项目也在跑,还有必要回头数格子吗? 有必要,但目的变了。项目已经在跑的时候,数格子不是为了推翻它,是为了给它重新定优先级。如果数完发现那一格里只有三五家,那么这个项目从“追赶行业标杆”降级成“参考一个同量级同行”,相应的排期投入就该跟着调整——原本计划三个月的,可能一个月做完主干就够了。另一个价值是止损点:知道了对标对象的实际含金量,就能给项目定一个合理的观察期,到期没有起色就收手,而不是无限期地“再改一轮”。这两件事都不需要停下项目,一个下午就能做完。 ## 把这些问题反馈给榜单方,他们会改吗? 大概率不会,而且这不完全是态度问题。按格子发奖、用“前1%”表述、把工作量写成带加号的下限,这几件事对发布方都是理性选择:格子多则传播广,下限值则风险低,措辞含糊则不必每年重算。改掉任何一条都会增加成本、降低传播效果,而收益只体现在极少数会去核对的读者身上。真正可能推动改变的是两种力量:一是被评对象集体要求标注分母,二是引用方开始在转述时带上限定语。后一件是每个读的人都能做的,也是本文唯一真正建议去做的事。指望发布方自律,不如把限定语写进自己的资料模板。 ## 除了数格子,还有没有更快的判断办法? 有一个三十秒的粗筛:看这份榜单的获奖名单有多长,再看它宣称的比例。名单行数除以宣称比例,得到的就是它隐含的候选池规模。比如发了五十个“前1%”,那么隐含的池子应该是五千家;如果这家机构自己说只评了四百家,那么这个标签一定是切片内的。这个方法只需要两个数字,都在同一页上,不需要打开任何别的页面。粗筛通过之后再做后面那些细活,粗筛不通过就直接按切片型处理。它的准确率不是百分之百,但足以在会议开始之前给你一个判断。 ## 权威参考资料 ## Google给商品结构化数据加了个category:页面标记和数据源的分类终于对上了 - URL:https://zhangwenbao.com/merchant-listing-category-property-google-product-taxonomy.html - 分类:电商SEO - 发布:2026-07-19 | 更新:2026-07-19 - 摘要:为什么说多写一个字段其实是把页面标记与商品数据源的裂缝焊上、促销时长的validFrom与priceValidUntil怎么配、分类填错会以哪四种症状暴露、变体商品的分类该写在哪一层、映射表怎么建才不会做到一半烂尾,写给做独立站与出海电商的技术与运营。 - 关键词:结构化数据,电商SEO,独立站,商品数据 > **TLDR**:摘要:Google在2026年7月给商家信息结构化数据加了一个category属性,推荐填但不强制。它能写成纯文本,等价于商品数据源里的product_type;也能写成CategoryCode对象,用inCodeSet指向Google的商品分类法、用codeValue填数字ID或者完整路径,等价于数据源里的google_product_category。同批更新还把促销时长的表达方式说清楚了,用validFrom、validThrough配priceValidUntil。这件事真正的分量不在多写一个字段,而在于它第一次让页面上的标记和数据源里提交的分类能对上口径——过去这两套数据各说各话,谁也不知道Google最后信了哪一套。这篇拆清楚两种写法怎么选、路径和ID为什么不能同时给、独立站三大平台各自怎么落地,以及分类口径统一之后对AI购物答案意味着什么。 > 摘要:Google在2026年7月给商家信息结构化数据加了一个category属性,推荐填但不强制。它能写成纯文本,等价于商品数据源里的product_type;也能写成CategoryCode对象,用inCodeSet指向Google的商品分类法、用codeValue填数字ID或者完整路径,等价于数据源里的google_product_category。同批更新还把促销时长的表达方式说清楚了,用validFrom、validThrough配priceValidUntil。这件事真正的分量不在多写一个字段,而在于它第一次让页面上的标记和数据源里提交的分类能对上口径——过去这两套数据各说各话,谁也不知道Google最后信了哪一套。这篇拆清楚两种写法怎么选、路径和ID为什么不能同时给、独立站三大平台各自怎么落地,以及分类口径统一之后对AI购物答案意味着什么。 ## Google这次到底加了什么? 2026年7月上旬,Google更新了商家信息结构化数据的文档,一共三处新增,其中分量最重的是给Product类型加的category属性 (https://www.searchenginejournal.com/googles-new-merchant-listing-structured-data-improves-seo/581879/)。 先把术语理顺。在schema.org的体系里,类型(Type)用来说明一个东西是什么,属性(Property)用来描述这个类型的某个特征。Product是类型,category是挂在它下面的新属性。这个属性不是必填,Google把它列为推荐项。 推荐项这三个字很容易让人直接跳过。过去几年里,被列为推荐但后来变得几乎等同于必需的属性,实在不算少见。 更值得注意的是同批更新的第二件事:促销时长的表达方式。文档明确了用validFrom和validThrough这一对属性来框定促销的起止,配合priceValidUntil使用。Search Engine Land在报道里点明了这次更新的意图 (https://searchengineland.com/google-merchant-listings-support-sale-duration-and-product-category-481730):它对齐的是商品数据源里sale_price_effective_date那个字段。 两件事指向同一个方向——把网页上的标记和数据源里的申报,往同一个口径上收。 ## 为什么说“多写一个字段”其实是件大事? 要理解这次更新的分量,得先看清一个长期存在的裂缝。 一件商品在Google眼里其实有两份档案。一份是你在网页上用结构化数据标出来的,另一份是你通过商品数据源提交到商家中心的。这两份档案描述的是同一件商品,但字段体系一直不完全通用。 分类就是最典型的例子。数据源里有google_product_category和product_type两个字段,前者填Google官方分类法里的类目,后者填你自己定义的分类。而在网页的结构化数据里,过去根本没有一个标准位置来表达这件事。 结果就是:你在数据源里把某件商品归到“服饰配件 > 服装 > 连衣裙”,网页上却完全没提这件事。Google拿到两份不一致的档案,只能自己判断该信哪一份,或者自己重新归类一遍。 这个裂缝平时不显眼,出问题的时候很难查。商品在购物结果里被归到了奇怪的类目下,你去查数据源,字段填得好好的;去查网页标记,那里压根没有这个信息。中间发生了什么,全靠猜。 category属性做的事,就是把这条缝焊上。 ## 纯文本和CategoryCode,这两种写法该怎么选? 新属性接受两种写法,它们对应的是数据源里两个不同的字段,用途也完全不同。 ## 纯文本写法:对应product_type 直接把分类写成一个字符串,比如“户外装备 > 电源 > 便携储能”。这等价于数据源里的product_type字段,也就是你自己定义的分类体系,Google不校验内容,你想怎么分就怎么分。文档建议单个值不超过750个字符。 这种写法的价值在于表达你自己的商品组织逻辑。你的站内分类结构、你的导航层级,都可以原样搬过来。 ## CategoryCode写法:对应google_product_category 这是一个结构化对象,里面有两个关键字段:inCodeSet指向Google的商品分类法,codeValue填具体的类目。schema.org上CategoryCode这个类型 (https://schema.org/CategoryCode)本身是个通用设计,codeValue表示唯一标识该值的短代码,inCodeSet表示它属于哪个代码集,继承链是DefinedTerm到Intangible再到Thing。 用在商品上,它表达的就是Google官方分类法里的那个类目。这一套是有标准答案的,不是你自己定义的。 ## 那到底选哪个? 正确答案是两个都写。文档明确说了category可以接受一个数组,纯文本字符串和CategoryCode对象可以混着放。 选择逻辑其实很清楚:CategoryCode是说给Google听的,纯文本是说给你自己和其他消费方听的。前者让Google知道该把你放进哪个标准类目,后者保留你自己的商品组织逻辑,也方便别的抓取方理解你的站内结构。两者不冲突,各干各的活。 ## codeValue填ID还是填路径,有什么讲究? 这是最容易踩坑的一处,因为文档给了两种格式,而商家中心那边有一条硬规则。 两种格式分别是:填数字ID,比如2271;或者填完整路径,用大于号分隔,比如“Apparel & Accessories > Clothing > Dresses”。 Google商家中心关于商品类别的规范 (https://support.google.com/merchants/answer/6324436?hl=en)把话说死了:ID和完整路径二选一,不能同时提交;每件商品只能有一个类目;这个字段不可重复。 实际操作里保哥倾向于用数字ID,原因有三个。第一,路径字符串很长,拼错一个空格或者一个连接符就匹配不上,而ID只有几位数。第二,Google偶尔会调整分类法的路径名称,ID相对稳定。第三,路径是有语言版本的,做多语言站的时候用路径会立刻变成一笔糊涂账,ID则跨语言通用。 唯一的代价是ID不可读,你在代码里看到2271完全不知道那是什么。解决办法也简单:在模板里留一行注释,或者在后台的分类管理界面上把ID和名称一起存。 ## 什么时候才该手工指定类目? 这里有个反直觉的地方:Google会自动给你的商品归类,大多数情况下你不需要管。 商家中心的规范列了三种应该覆盖自动归类的情形: - 为了解锁类目专属的必填字段。某些类目会追加要求,比如服饰类会要尺码、颜色、性别、年龄段,手机类会要型号标识,软件类有自己的一套。不指定类目,这些字段的校验规则就不会生效。 - 为了按类目做广告定向。如果你的广告系列是按商品类目分组投放的,那类目就必须由你自己控制,不能交给自动归类。 - 纠正误判。规范里点名了酒精饮品这一类——被误分类的后果可能是整批商品被拒。 除这三种之外,硬要手工指定反而可能不如自动归类准。这一点和很多人的直觉相反:不是填得越多越好,而是该填的地方填对。 顺带提醒一句,服饰、手机、软件这几个类目会追加必填字段,这意味着你一旦手工指定了类目,可能会连带触发一批原本不存在的校验错误。改完记得回商家中心看一眼诊断报告,别改完就走人。 ## 促销时长这一处,为什么单独拎出来说? 第三处更新是关于促销价的有效期。文档说明了怎么用validFrom和validThrough表达一段促销的起止时间,配合priceValidUntil使用。 这里有一条容易忽略的连带规则:Google的商家信息文档 (https://developers.google.com/search/docs/appearance/structured-data/merchant-listing)里写明,priceValidUntil一旦过期,商品可能就不再展示富媒体结果了。也就是说这个字段填了但没维护,比不填还糟——不填只是少个信息,填了过期是直接掉展示。 时间格式建议用带时区的ISO 8601。这一条对做出海的团队格外重要:你的服务器在国内,促销活动按目标市场时间开始,不写时区的话差个大半天,促销价要么提前露出要么迟到。 见过一个很典型的翻车:黑五促销价标记里的结束时间写的是本地时间午夜,结果目标市场那边还在周五下午,价格就先掉回原价了。客服接了一下午的投诉电话,技术查了两天才想到是时区的问题。 ## 这套东西和AI购物答案有什么关系? 说到这儿该把视线拉远一点。分类口径统一这件事,在AI购物场景下的分量比在传统购物结果里更重。 原因在于提问方式变了。传统搜索里用户搜的是“便携储能1000W”,匹配靠的是关键词。而在助手里,用户问的是“露营用的电源,能带上飞机的那种,预算三千以内”。要回答这个问题,模型得先理解这是哪一类商品,再在这一类里筛条件。 类目在这个链条里是第一道筛子。如果你的商品在分类这一层就没被正确识别,后面的属性再全也进不了候选池——它压根没进到那个筛选范围里。 这也是为什么保哥认为这个“推荐非必填”的属性值得优先做。它成本极低,一次模板改动的事,但它影响的是最上游的那一道判断。站内讲结构化数据对AI搜索到底有没有用 (https://zhangwenbao.com/schema-markup-ai-search-truth.html)那篇里提过一个基本判断:结构化数据不是排名信号,但它是理解成本的削减器。分类属性是这个判断的一个新例证。 ## 写出来的标记,长什么样? 把上面的规则落成实际的标记,大概是这个形状。假设一件便携储能电源,Google分类法里的类目ID是5710,站内自己的分类是户外装备下的电源。 category那一项是个数组,里面第一个元素是CategoryCode对象,第二个元素是纯文本字符串。CategoryCode对象里,@type写死是CategoryCode,inCodeSet指向Google商品分类法的地址,codeValue填5710。纯文本那一项直接写你自己的分类路径,用大于号分层。 促销时长那部分挂在offers里面:priceValidUntil写这个价格的失效时间,validFrom和validThrough框定促销的起止,三个时间都带时区偏移。 几个实现细节,都是踩出来的: - inCodeSet填的是分类法本身的标识,不是你那个类目的地址。这一点最容易搞混——它回答的是“这个代码属于哪套体系”,而不是“这个代码指向哪一页”。 - codeValue是字符串还是数字都能识别,但整站保持一致更省心,别一半引号一半不引号。 - 数组里的顺序不影响解析,但把CategoryCode放前面更符合阅读习惯,也方便排查的时候一眼看到。 - 时间一律带时区偏移,别图省事写成纯日期。Ahrefs那份结构化数据指南 (https://ahrefs.com/blog/schema-markup/)里对格式选型讲得比较全,JSON-LD之外还有微数据和RDFa两条路,但对商品这个场景来说JSON-LD基本是唯一值得考虑的。 ## 分类填错了,会以什么方式暴露出来? 这一节可能是最实用的:如果你压根不知道自己填错了,前面讲的所有规则都用不上。分类出问题的症状往往不长在分类上,而是长在别的地方,很容易误诊。 症状一:商品在购物结果里和一批不相干的东西排在一起。这是最直接的信号。搜自己的商品,看同一屏里出现的其他商品是不是同一个品类。如果你的便携电源旁边全是充电宝,那多半是被归到了移动电源那一类。 症状二:商家中心突然冒出一批新的必填字段错误。这通常发生在你刚改完类目之后。前面说过,服饰、手机、软件这几类会追加必填字段,一指定类目校验规则就生效了。这其实是好事,说明类目生效了,但很多人会误以为是自己改坏了什么。 症状三:广告系列的商品分组数量对不上。如果你按类目分组投放,某个组的商品数突然变了,八成是自动归类改了主意。这条最容易被当成广告端的问题去查,其实根子在商品数据上。 症状四:AI购物答案里死活出不来。这条最难查也最没法直接验证,因为你看不到候选池。可以侧面试探:把你的商品品类当成关键词去问助手,看它给出的推荐里有没有你的同类竞品。如果同行都在、只有你不在,而你的商品信息本身没问题,那分类值得查一遍。 诊断顺序建议从便宜到贵:先看商家中心诊断报告(免费、即时),再看购物结果实际归属(免费、要点耐心),最后才是去猜AI那一层(几乎无法证伪,别在这上面花太多时间)。 ## 映射表怎么建,才不会变成烂尾工程? 前面提到WooCommerce和Magento都需要自己维护一张分类映射表。这件事的失败率相当高,值得单独说说。 失败的典型路径是这样的:立项时决心很大,打算把全部两百个类目一次映射完;做到第三十个的时候发现有些类目在Google分类法里找不到对应;开始纠结该往上归还是往下归;纠结了两周,这事就搁置了。半年后有人问起,答案是“当时做了一半”。 三条能显著提高成活率的做法: 第一,按商品数量排序,不按类目编号排序。把你的类目按下挂商品数从多到少排,先做头部。通常前20% 的类目覆盖80% 的商品,做完这一截收益就已经拿到大半了。 第二,找不到精确对应就往上归一级,别硬凑。Google的分类法有几千个类目,但未必有你那个细分品类。归到上一级是完全可接受的,比归到一个语义相近但实际不对的类目安全得多。归得粗只是损失一点精度,归错了是给出错误信息。 第三,把映射关系存在能被上新流程读到的地方。存在某个人的表格里,等于没存。要么进数据库当成分类的一个字段,要么进后台的分类管理界面。判断标准很简单:新来的运营在不问任何人的情况下,能不能自己填对。 还有一条经验:映射表要留一列写“为什么这么归”。半年后有人质疑某个归类,没有这一列的话,没人记得当初的理由,只能重新纠结一遍。 ## 三个建站平台各自怎么落地? 说完原理,说落地。独立站常见的三个平台,处理方式差得挺远。 ## Shopify Shopify自带的商品结构化数据由主题模板生成,改动点在product模板里的JSON-LD块。Shopify后台的商品编辑页有一个标准化商品类型字段,用的就是Google的分类法,可以直接把这个值读出来写进codeValue。你自己的商品类型字段则适合写成纯文本那一路。 要注意的坑是:如果你装了SEO插件,很可能站上已经有两套JSON-LD在跑了。加字段之前先确认自己在改的是被Google采纳的那一套,别辛苦半天改了个没人读的。 ## WooCommerce WooCommerce的商品结构化数据默认由核心生成,可以用过滤器挂进去。它的商品分类是自己的一套taxonomy,和Google分类法没有对应关系,需要你自己维护一张映射表。 映射表这件事没有捷径,但可以偷懒:先按你的一级分类做粗映射,覆盖八成商品,剩下的边缘类目慢慢补。追求一次做全,通常的结果是一次也做不完。 ## Magento Magento的属性体系本身就足够灵活,加一个自定义属性存Google类目ID,然后在模板里输出,是最直接的做法。它的麻烦在于多店铺视图,每个视图的分类可能不同,映射表要按视图维护。 三个平台的共同点是:这件事的工作量不在写代码,在维护映射关系。代码是一次性的,映射表是长期的。上新品的时候有没有人记得填这个字段,才是决定它长期有没有用的关键。 ## 变体商品的分类,该写在哪一层? 这是落地时最先会撞上的一个问题:一款T恤有五个颜色三个尺码,十五个变体,category该写在父商品上还是每个变体上? 结论是写在能代表这件商品的那一层,通常就是父商品。理由很直接:颜色和尺码不改变商品的品类。红色M码的T恤和蓝色L码的T恤,在Google分类法里是同一个类目,重复写十五遍除了增加出错概率之外没有任何收益。 但有两种例外值得留意。 第一种,变体跨了品类。有些站会把配件当成主商品的变体来管,比如一台相机的变体里混进了镜头盖和电池。这种情况下变体确实分属不同类目,但更根本的问题是商品结构本身就不该这么建——这属于用变体机制凑数据,早晚会在别处出问题。 第二种,套装和单品混在一起。一个“买一送一”的套装,和单品在分类法里可能落在不同类目。这时候套装应该是独立的商品,不是变体。 换句话说,如果你发现变体之间需要写不同的category,那多半说明它们本来就不该是变体。这个信号很好用,能顺带帮你发现商品结构上的历史遗留问题。 还有一条容易忽略的:变体页如果各自都有独立URL和独立标记,那么规范页策略要和分类策略对齐。被canonical指向父商品的变体页,它的标记未必会被采纳,你写得再仔细也可能白写。这一层的判断逻辑,和站内讲重复内容治理时的思路是一样的。 ## 改完之后怎么确认真的生效了? 给一条务实的验证路径,四步: 第一步,用富媒体结果测试工具跑一遍单个商品页。先确认语法没错、属性被识别了。这一步只验证格式,不验证内容。 第二步,回商家中心看诊断报告。重点看有没有因为你新指定的类目而冒出来的新校验错误,尤其是服饰、手机、软件这几个会追加必填字段的类目。 第三步,看数据源和网页的一致性。随机抽十件商品,把数据源里的类目和网页标记里的codeValue对一遍。不一致的话,两边都得查,不能只改一边。 第四步,隔两周看购物结果里的类目归属。这一步最慢也最真实。Google重新评估需要时间,改完第二天去看是看不出什么的。 关于第四步的等待,可以参考站内那篇canonical标签是提示不是命令 (https://zhangwenbao.com/canonical-tag-common-mistakes-hint-not-directive.html)里讲的道理:你给的是信号,采不采纳、多久采纳,决定权不在你手里。结构化数据也是一样,写对了只是把话说清楚,不等于对方立刻照办。 ## 顺手该一起查的,还有哪几个高频出错点? 既然要动商品页的结构化数据模板,不如把周边几个高频出错的地方一起过一遍。改一次模板的成本,和改三次是一样的。 价格和货币符号对不上。price字段里带了货币符号、或者用了千分位逗号,是最常见的低级错误。这个字段只该有纯数字,货币单独用priceCurrency表示。多币种站点尤其容易出问题:页面上按用户地区显示了不同货币,标记里却还写着建站时那一种。 库存状态写死不更新。availability填了InStock之后再没人管,商品早就下架了,标记里还说有货。这会直接影响信任,严重的会被判定为数据不实。它的正确做法是从库存系统实时读,而不是在模板里写死。 评分数据和页面显示的对不上。aggregateRating里的评分值、评价数量,必须和页面上用户真能看到的一致。标记里写着4.8分200条评价、页面上一条评价都找不到,这属于典型的踩线行为。 变体商品各写各的。同一款商品的不同尺码颜色,如果每个变体页都独立标记成一个Product,很容易被判成重复。这一块和站内讲过的电商重复内容治理是同一个问题的两面,处理思路要和你的规范页策略保持一致。 标记里的信息页面上没有。这条是所有结构化数据的通则:标记描述的必须是用户在页面上真能看到的内容。保哥见过一个站把商品的全部参数都塞进了标记,页面上却只显示三条,剩下的藏在一个从来没人展开的折叠块里——这种做法在审核趋严之后风险不小。 把这五条和新增的category一起排进同一次模板改动,投入产出比会好得多。 ## 哪些人现在就该动手,哪些人可以先放放? 不是所有站都需要马上做这件事,给个优先级判断: - 已经在跑商品数据源、有免费商品收录或购物广告的——优先做。你本来就在维护分类字段,把它同步到网页标记上是顺手的事,收益最直接。 - 商品数量多、类目跨度大的——优先做。类目跨度越大,自动归类出错的概率越高。 - 做服饰、手机、软件、酒类的——优先做。这几类要么有追加必填字段,要么有误判风险。 - 单品类小站、商品数量在几十件以内的——可以放一放。自动归类在这种情况下基本不会错,人工维护映射表的成本反而不划算。 - 还没接商家中心的——先去接商家中心。免费商品收录 (https://zhangwenbao.com/google-free-product-listings-merchant-center.html)那一步的收益远大于这个属性,顺序别搞反了。 说到底,这次更新的意义是补齐了一块拼图,不是开辟了一条新路。商品数据源该归谁管 (https://zhangwenbao.com/product-feed-seo-asset-organic-ai-ownership.html)这个老问题,因为它又多了一个必须回答的理由——现在连网页模板都要读这份数据了,再把它当成投手一个人的事,缝只会越来越大。 ## 常见问题解答 ## category属性是必填的吗?不写会怎样? 不是必填,Google把它列为推荐属性。不写的直接后果是网页标记里缺少分类信息,Google会依靠自动归类或者你提交的数据源来判断类目。对小型单品类站影响很小;对商品多、类目跨度大的站,自动归类出错的概率会明显上升,而且出错之后很难定位原因。 ## 纯文本和CategoryCode只能选一个吗? 不是,两个都可以写。文档明确说明category接受数组,纯文本字符串和CategoryCode对象可以混合放在同一个数组里。推荐的做法就是两个都给:CategoryCode表达Google官方分类法里的类目,纯文本表达你自己的商品组织逻辑,各自服务不同的消费方。 ## codeValue里能不能既填ID又填完整路径? 不能。商家中心的规范写得很明确,ID和完整路径二选一,不能同时提交,而且每件商品只能有一个类目、该字段不可重复。建议优先用数字ID:更短更不容易拼错、路径名称调整时更稳定、做多语言站时不受语言版本影响。 ## 我该手工指定类目,还是让Google自动归类? 大多数情况下自动归类就够了。规范列出的三种该手工指定的情形是:需要解锁类目专属的必填字段、需要按类目做广告定向、以及自动归类出现了误判(规范点名了酒精饮品)。除此之外硬要手工指定,准确度未必比自动归类高,还可能触发一批原本不存在的校验错误。 ## priceValidUntil填了之后过期了会怎样? 可能导致商品不再展示富媒体结果。这个字段属于填了就得维护的类型,填完不管比不填更糟糕。做促销的时候配合validFrom和validThrough使用,时间格式建议用带时区的ISO 8601——出海团队尤其要注意时区,服务器时间和目标市场时间差半天,促销价的露出时机就会整个错位。 ## 这个属性以后会不会变成必填?现在做是不是太早? 没人能替Google保证,但从历史规律看,被列为推荐的属性变成事实上必需的情况并不少见——不一定是文档改成必填,而是不填的商品在竞争中逐渐处于劣势。考虑到这个属性的落地成本极低(一次模板改动加一张映射表),而它影响的是分类识别这道最上游的判断,现在做的性价比是合理的。真要说该等,也只有商品数量在几十件以内、单一品类的小站可以先放放。 ## 变体商品的category写在父商品上还是每个变体上? 通常写在父商品上就够了,因为颜色、尺码这类变体维度不改变商品品类。如果你发现不同变体需要写不同的category,那往往说明它们本来就不该被建成变体——比如把配件混进了主商品的变体里,或者套装和单品混在了一起。另外要注意规范页策略:被canonical指向父商品的变体页,它自己的标记未必会被采纳。 ## 改完结构化数据,多久能看到效果? 格式层面的验证可以立刻做,用富媒体结果测试工具就能确认属性有没有被识别。但类目归属在购物结果里的实际变化需要等Google重新抓取和评估,通常要以周为单位观察,改完第二天去看是看不出什么的。结构化数据给出的是信号而不是指令,写对了只是把话说清楚,采不采纳、多久采纳,决定权不在你这边。 ## 权威参考资料 ## 视觉搜索崛起:出海产品怎么被Lens、圈图搜和Pinterest找到 - URL:https://zhangwenbao.com/visual-search-product-discovery-lens-circle-to-search.html - 分类:电商SEO - 发布:2026-07-04 | 更新:2026-07-04 - 摘要:别只盯着打字搜了。用户越来越爱拍照搜、圈图搜、用图找同款,年轻人四成产品搜索从视觉起手。出海独立站怎么让产品被机器看懂、又能顺手买走?从产品图到商品feed,一份可落地的视觉搜索优化指南。 - 关键词:图片SEO,Google Lens,视觉搜索 > **TLDR**:摘要:用户搜产品的方式正在多出一条路——不打字,直接拿摄像头拍、在屏幕上圈一下就问。Google Lens每月要处理近200亿次这样的视觉搜索,其中五分之一带着明确的购买意图;Circle to Search铺到了几亿台安卓设备;Pinterest的视觉搜索每月也有十几亿次查询。对出海独立站来说,这等于在打字搜之外,冒出了第二个搜索框。本文讲清楚一件事:视觉搜索不是“图片SEO加强版”,它是一条机制不同的发现渠道,产品能不能被“拍照搜到”,取决于机器能不能一眼看懂你的产品、又能不能顺手把它买走。文末给一份按优先级排好的落地清单,也把三个容易高兴太早的坑一并说透。 > 摘要:用户搜产品的方式正在多出一条路——不打字,直接拿摄像头拍、在屏幕上圈一下就问。Google Lens每月要处理近200亿次这样的视觉搜索,其中五分之一带着明确的购买意图;Circle to Search铺到了几亿台安卓设备;Pinterest的视觉搜索每月也有十几亿次查询。对出海独立站来说,这等于在打字搜之外,冒出了第二个搜索框。本文讲清楚一件事:视觉搜索不是“图片SEO加强版”,它是一条机制不同的发现渠道,产品能不能被“拍照搜到”,取决于机器能不能一眼看懂你的产品、又能不能顺手把它买走。文末给一份按优先级排好的落地清单,也把三个容易高兴太早的坑一并说透。 ## 打字搜之外,用户手里多了一只“眼睛” 过去十几年,SEO的默认前提是:用户想找东西,会在搜索框里敲字。这个前提正在松动。现在越来越多的人看到实物、截图、别人穿的一件外套,第一反应不是去想“这个该怎么用文字描述”,而是抬手拍一张、或者在屏幕上圈一下,直接问机器“这是什么、哪里买”。 规模已经不小。按 Google广告与商务团队公布的Lens与AI Overviews数据 (https://blog.google/products/ads-commerce/google-lens-ai-overviews-ads-marketers/),用户每个月用Lens完成近200亿次视觉搜索,其中大约20%直接跟购物相关。这不是个边角功能——把20%乘到200亿上,光购物类的视觉搜索每月就是40亿次的量级。Semrush的视觉搜索优化指南 (https://www.semrush.com/blog/visual-search/)也观察到,仅lens.google这一个入口,2025年5月的访问量已经涨到约1000万次,是两年前的10倍。 更值得盯的是年轻用户的习惯迁移。多份行业数据显示,Z世代和千禧一代里,有接近四成的产品搜索是从“视觉”起手的,而不是从关键词起手。对做出海、做DTC、卖实物产品的人来说,这批人恰恰是主力买家。搜索框长出了一只眼睛,而这只眼睛越来越爱先看,再问。 ## 视觉搜索和“图片SEO”不是一回事 很多人一听“视觉搜索优化”,条件反射地想到图片SEO那老一套:文件名别用IMG_1234、alt写清楚、压成WebP、上懒加载。这些当然还得做,但如果只做这些,方向就跑偏了。两者要解决的问题根本不同。 图片SEO解决的是“让我的图片,出现在别人用文字搜图时的结果里”——查询还是文字,图片是被检索的对象。视觉搜索反过来:查询本身就是一张图,机器要先看懂这张图里是什么、什么风格、属于哪个品类,再决定给用户看谁。前者是“图片被搜”,后者是“图片在搜”。这一层机制上的差别,早年那篇讲 Vision AI读图与Lens排名机制 (https://zhangwenbao.com/image-seo-vision-ai-multimodal-search-google-lens-mechanism.html)的文章拆得更细,这里只强调结论:优化视觉搜索,你要伺候的不是爬虫的文本索引,而是一个“会看图的模型”。 举个对照就清楚了。传统图片SEO的思路是:我想在“陶瓷马克杯”这个词的图片搜索里排上去,于是把文件名、alt、周边文字都往这个关键词上靠。视觉搜索的思路完全反过来:一个用户在别人桌上看到一只杯子,拍了张照,机器得先从这张照片里认出“这是一只北欧风白色陶瓷马克杯”,再去所有商品里找长得像、又买得到的,你的产品能不能进这个候选池,跟你有没有优化“陶瓷马克杯”这个词关系不大,跟你的图够不够清楚、数据全不全关系很大。前者你在追一个词,后者机器在追一张图。 打个比方,机器看你的产品图,像隔着一层毛玻璃看展柜。图糊了、主体不突出、背景乱,它就只能猜个大概;图干净、主体清晰、角度到位,它才敢确定“这是一只北欧风的陶瓷马克杯”,然后把你摆进对的货架。所以视觉搜索优化的第一性问题,从来不是关键词,而是“可辨识度”。 ## 三个入口,三套逻辑:Lens、圈图搜、Pinterest 视觉搜索不是一个统一的东西,它至少分三个入口,用户动作不同、结果来源也不同。搞混了就会用错力气。 - Google Lens:用户主动打开Lens、或在Google App里点相机图标,拍实物或传截图。Lens擅长“识别这是什么”,然后接上Google的购物图谱(Shopping Graph,收录超过450亿件商品的信息),给出跨零售商的价格、评价和购买链接。它的官方定位就是“搜你所见”,这一点在 Google Lens关于它如何工作的官方说明 (https://lens.google/howlensworks/)里写得很直白。 - 圈图搜(Circle to Search):2024年1月底先在Pixel 8和三星Galaxy S24上线,如今已铺到几亿台安卓设备。它的妙处是“不用离开当前应用”——刷短视频、看社交动态时,长按Home、把感兴趣的东西一圈,就地出结果。用户动作的门槛被压到了几乎为零。 - Pinterest视觉搜索:这是电商味道最浓的一个。Pinterest的Lens每月约15亿次查询,整个平台每月约800亿次搜索、过半带商业意图,而且约80%的搜索不带品牌词——用户是按风格、场景、需求在找,而不是冲着某个牌子来。这对没什么品牌声量的新独立站,反而是机会。Pinterest到底怎么给内容排序,可以顺带看看 Pinterest的Pin排名六信号 (https://zhangwenbao.com/pinterest-seo-visual-discovery-engine-pin-ranking-mechanism.html)那篇的拆解。 一句话记住区别:Lens偏“识别与比价”,圈图搜偏“随手就问”,Pinterest偏“逛着逛着看对眼”。三个入口对应的优化重点不完全一样,后面会分别落到抓手上。 ## 多模态查询:文字和图片一起问,长尾被重写了 真正把视觉搜索推上新台阶的,是“多模态查询”——图片加文字,一次问清。用户拍下一只红色手袋,再补一句“找个100块以内的同款”;或者截了一张沙发的图,追加“要布艺、灰色、三人位”。机器同时理解图里的视觉信息和文字里的约束条件,给出的结果比任何一种单独查询都精准。 这件事对内容策略的冲击不小。传统的长尾关键词,是把用户脑子里的需求硬翻译成一串文字;多模态查询让用户可以“指着图说话”,很多本来说不清、懒得打的长尾,现在被一张图加一句话替代了。也就是说,一部分长尾需求正在从文本搜索框,悄悄迁移到摄像头后面。 保哥的判断是:多模态查询会让“产品的视觉属性”和“结构化的商品属性”这两件事的权重同时上升。机器要先从图里认出颜色、材质、款式,再拿你标注的价格、尺码、库存去匹配那句文字约束。图和数据,哪一头缺了,都接不住这类查询。 ## 拍照搜的人,心里其实揣着三种问题 把用户按“用什么入口”分完,还得再按“想解决什么”分一遍。同样是拿摄像头对着一样东西,不同人脑子里的问题完全不同,对应的优化落点也不一样。大体分三种。 识别型:“这到底是个啥?”用户看到一件不知道名字的东西,拍照就想知道它叫什么、属于什么品类。这类查询里,你能不能被认出来,几乎全看产品图的可辨识度和它落在什么语境里。图干净、主体清楚、周围文字说清品类,机器才认得出“这是一只手冲咖啡的鹅颈壶”,而不是含糊地归成“水壶”。识别错了品类,后面全盘皆输。 比价型:“这个多少钱、哪买划算?”用户已经认识这东西,拍照是为了比价和找购买入口。这类查询几乎完全由商品feed决定——你的产品有没有进购物图谱、价格标得准不准、有没有货、评价好不好。图片在这里退居次要,真正被拿出来比的是结构化的商品数据。做电商的要盯的就是这一类,因为它离成交最近。 风格型:“有没有类似风格的?”用户不一定要买图里那件,而是想找“这个调调”的东西。这是Pinterest最典型的场景,也是场景图、风格标签、品类词大显身手的地方。你得让机器读懂你的产品是“奶油风”“复古工业风”还是“侘寂风”,才能在别人搜相似风格时被捞出来。风格型查询往往不带品牌词,对新品牌反而最友好。 这三种意图不是非此即彼,一次查询里可能混着来,但优化时心里要有杆秤:想接识别型,狠抓图质和语境;想接比价型,狠抓feed和结构化;想接风格型,狠抓场景图和风格标签。力气花在哪,取决于你的品类和客单价更靠哪一头。 ## 第一层:产品图本身,要让机器一眼看懂 视觉搜索的地基,是产品图的可辨识度。这不是审美问题,是“机器能不能确定你在卖什么”的问题。几条经过验证的做法: - 一图一主体:一张图里只突出一个产品,别把全家福塞进去。机器识别单主体的准确率,远高于识别一堆挤在一起的东西。Google图片SEO官方文档也反复强调,清晰、明亮、聚焦单一主体的高质量图,比模糊杂乱的图更容易被正确理解。 - 白底图和场景图,各有各的活:白底图(纯净背景、主体居中)方便机器抠出主体、做比对和识别,适合做主图和喂给购物图谱;场景图(产品在真实使用环境里)方便被“按风格、按场景”匹配,尤其在Pinterest那种“逛”的场景里更吃香。两种都要准备,别只留一种。 - 多角度、够大、够清晰:正面、侧面、细节、上身/上桌效果都给全,机器从多个角度确认同一件商品,识别更稳。分辨率别抠门,糊图等于自废武功。 - 别用文字盖住产品本身:促销角标、大字水印压在主体上,会干扰识别。Pinterest甚至明确建议图上别用文字遮挡产品。你想让机器看清货,就别在展柜玻璃上贴满海报。 ## 第二层:把图和“能买的商品”用结构化绑起来 机器认出图里是“一只马克杯”还不够,它得知道“这只马克杯是你店里那件、卖多少钱、有没有货、点哪买”。这一步靠的是结构化数据,把一张图和一件可交易的商品死死绑在一起。 具体来说,产品页要上Product结构化数据,把名称、价格、库存、评分标清楚;图片本身可以用ImageObject、以及Google建议的primaryImageOfPage属性,告诉搜索引擎“这张才是这个页面的主图”。这些标记做扎实了,你的产品才有资格出现在带图的富结果里,也才更容易被视觉搜索接上购买链路。至于哪些结构化类型值得优先做、别再凭感觉堆,可以对照 Schema官方公开的全网使用数据 (https://zhangwenbao.com/schema-org-usage-statistics-priority-guide.html)来排优先级。 这里有个容易被忽略的因果:视觉搜索给出的购买结果,很多是从商品图谱里调的,而商品图谱的数据,靠的正是规范的产品结构化标记和商品feed。图拍得再好,如果没有结构化数据把它和“可购买的SKU”绑定,机器认得出这是杯子,却指不到你的收银台。 ## 第三层:图要落在能被识别的上下文里 同一张图,放在一个主题相关、文字充分的页面上,和孤零零挂在一个空页面上,机器对它的理解完全不同。图片从来不是孤立被看的,它周围的语境会帮机器确认“这张图到底在说什么”。 按 Google图片SEO最佳实践 (https://developers.google.com/search/docs/appearance/google-images)的说法,几件事值得做实:文件名短而有描述性,用red-ceramic-mug.jpg而不是IMG_1234.jpg;alt文本要“有信息、在语境里、自然用词”,写成“手冲用的白色陶瓷马克杯”这种,而不是把关键词堆成仓库——把alt写成关键词清单,机器只会觉得你在自言自语;图片要放在和它主题相关的文字附近,页面本身也得是相关主题。这些做法对“让机器确认图的含义”实实在在有用,只是要记住它们服务的目标,是可辨识度,不是往上堆权重。 ## 第四层:产品feed要铺进Lens和Pinterest两个入口 前三层是把自家产品页收拾干净,第四层是主动把产品数据送进视觉搜索的两大入口——不然机器就算想推你,手里也没你的货。 Google这头,核心是把商品feed上进Google Merchant Center,让你的产品进到那个收录超450亿件商品的购物图谱里。用户用Lens拍照比价时,系统调的就是这个图谱。feed的字段越全、越准(标题、图片、价格、可用性、GTIN等),被匹配到的机会越大。 Pinterest这头,要把完整产品目录上传成catalog,自动生成带实时价格和库存的Product Pin。Pinterest商务团队给的优化建议很具体:图用2:3竖版(1000×1500像素)、标题控制在100字符内并把主关键词放前面、目录里把品牌、颜色、价格、尺码这些信息填全,因为这些字段直接决定系统在什么查询下把你的商品拿出来。Pinterest商务团队一篇讲《视觉搜索营销是未来》的文章 (https://business.pinterest.com/blog/the-future-of-search-is-visual/),把这套“图 + 结构化目录”的逻辑说得很清楚。 Shopify在它那篇面向零售商的《什么是视觉搜索》指南 (https://www.shopify.com/blog/what-is-visual-search)里也点了同一件事:视觉搜索的红利,属于那些提前把产品图和产品数据都准备好、并主动铺进各个视觉入口的商家,而不是等着流量自己找上门的那批。 ## 一张产品图,要同时讨好两类“读者” 做视觉搜索时,有个容易顾此失彼的地方:你的产品图,其实要同时被两类“读者”看——一类是人眼,一类是机器眼,它俩的偏好并不总是一致。 人眼要的是“好看、想点、被种草”:光影氛围到位、场景有生活感、构图讲究,最好还能勾起“我家客厅摆上一个也不错”的联想。机器眼要的是“看得懂、抠得出、对得上”:主体突出、边界清晰、背景别太抢戏,好让它准确识别品类、抠出主体、再跟你的商品数据对上号。有时这两者会打架——一张氛围感拉满、道具堆了一桌的场景图,人看着舒服,机器却可能被一堆杂物带偏,认不准主角是哪件。 解法不是二选一,而是分工。主图、feed里的图,优先服务机器眼:干净、单主体、白底或极简背景,先保证被认得出、被接进购买链路。详情页、社媒、Pinterest上的图,多放服务人眼的场景图,负责种草和风格匹配。同一件产品,准备两套气质不同的图,各司其职,别指望一张图既当识别证件照又当氛围大片。想清楚每张图是给谁看的,取舍就不纠结了。 ## 泼盆冷水:视觉搜索的三个“别高兴太早” 说了这么多机会,也得把话说全。视觉搜索对独立站不是稳赚的红利,有三个坑必须先看清。 第一,平台闭环容易截流。Lens拍照给的是购物图谱里的比价结果,Pinterest圈图给的是站内的shoppable Pin,很多时候用户的注意力和成交,都被平台自己的闭环消化掉了。你辛苦拍的图、备的货,可能只是喂大了平台的比价页,最后成交落在别人的收银台。这和 图片搜索里免费流量被购物广告挤压 (https://zhangwenbao.com/google-image-search-shopping-ads-organic-traffic.html)是同一个母题——入口是平台的,规则也是平台定的。 第二,圈图搜大多是“识别→跳转”,不一定跳到你。圈图搜的典型路径是:用户圈了个东西,机器识别出品类,然后把他导向购物结果或大平台。你的产品要么进了那个结果池,要么根本不在场。做视觉搜索,很容易只是给大平台做嫁衣,热闹是它们的,你未必分得到点击。 第三,证明“机器认得出”不等于“拿得到点击”。你可以把图拍得漂亮、alt写得工整、结构化上得齐全,让机器100%确定这是什么——但这只解决了“被识别”,没解决“被选中”。真正决定你能不能被拿出来的,是你的商品feed有没有进Merchant Center或Pinterest catalog、价格有没有竞争力、评价够不够。识别是入场券,不是名次。保哥见过不少店把产品图打磨得很精致,却压根没建商品feed,机器认得出货,却指不到店,白忙一场。 这三盆冷水泼下来,不是劝你别做,而是提醒你摆正预期:视觉搜索现阶段更像是一条“补充发现渠道”,而不是能取代关键词SEO的主战场。它的价值在于——在用户越来越懒得打字、越来越爱拍照圈图的趋势里,提前占住位置,让机器在关键时刻手里有你的货。把它当成一份低成本的长期布局去做,投产比是划算的;但要是指望它明天就带来一波订单洪流,多半会失望。清楚它的边界,才不会做错了还怪渠道不行。 ## 为什么现在值得动手:窗口正在打开 可能有人会说,视觉搜索喊了好几年了,为什么偏偏现在要认真对待?因为三件事凑到了一起,把窗口撑开了。 一是设备铺开。Circle to Search从两款旗舰机起步,一年多就覆盖了几亿台安卓设备,“随手圈一下就问”的动作,从尝鲜变成了日常。二是模型变强。多模态大模型让机器“看懂图”的能力这两年跳了一大台阶,以前认不准的材质、款式、风格,现在识别得越来越细,视觉查询的可用性今非昔比。三是结果融合。视觉搜索的结果正越来越多地和AI答案、购物图谱缝在一起——用户拍一张图,拿到的不再只是“相似图片”,而是一整套“这是什么、哪家便宜、去哪买”的答案。 三股力量叠加的结果,是视觉搜索正从一个尝鲜功能,变成一条真会带来订单的发现渠道。渠道刚成型、大多数出海独立站还没认真布局的时候,恰恰是卡位成本最低的窗口期。 ## 出海独立站现在该做的7件事(按优先级) 把上面拆开的东西收成一份可执行清单,按投入产出比从高到低排。别贪多,先把前三件做到位,往往就能吃到大半红利。 - 先把商品feed建起来并上进Google Merchant Center。这是被视觉搜索接住购买链路的前提,优先级最高。feed字段填全、图片链接有效、价格库存实时同步。 - 产品目录同步上传到Pinterest catalog。尤其是家居、服饰、美妆、饰品这类看脸的品类,Pinterest的视觉搜索和“不带品牌词”的逛式流量,对新站特别友好。 - 主图重拍:一图一主体、白底 + 场景两套、多角度、别压文字水印。这是可辨识度的地基,做一次长期受益。 - 产品页补齐Product与ImageObject结构化数据。把图和可购买的SKU绑死,让机器不只是认得出,还能指得到。 - 图片基本功别落下:描述性文件名、语境化alt、够大够清晰、WebP压缩。这些是老规矩,但仍是机器理解图片的输入。 - 为核心产品准备“场景化”内容页。把产品放进真实使用场景的图文里,既服务Pinterest的风格匹配,也给机器更充分的上下文。 - 定期看Merchant Center和Pinterest后台的数据,回头调feed。视觉搜索是个持续校准的活,哪个字段、哪张图带来了曝光和点击,就往那个方向加码。 ## 一个真实场景:家居饰品独立站怎么被“拍照搜”到 说个具体的。一家做北欧风家居饰品的出海独立站,客单价不高、品牌声量几乎为零,靠传统关键词SEO跟大站硬拼,词都被压在两三页开外。它把重心挪了一部分到视觉搜索,动作其实不复杂。 第一步,把全线产品的主图重拍成白底单主体图,另配一套摆在真实客厅、餐桌上的场景图。第二步,商品feed上进Merchant Center,同一套目录同步到Pinterest,图统一用2:3竖版、标题把“陶瓷花瓶”“藤编收纳篮”这类品类词放前面。第三步,每个产品页补上Product结构化数据,把材质、尺寸、价格标清楚。 变化不是一夜之间的,但方向对了。用户在Pinterest上刷到别人晒的客厅,圈一下那个花瓶,系统按风格匹配,把它家的同风格产品推了出来;也有用户在实体店看到类似的收纳篮,用Lens拍照比价,因为feed进了购物图谱,它家的链接出现在了结果里。这两条路,都不是靠抢关键词抢来的——是靠“机器看懂了它的产品长什么样、又知道去哪买”接住的。 它也不是把全线产品一股脑都重拍了。资源有限,取舍的依据很实在:先挑客单价高、视觉辨识度强的几个主推款下手,因为这些款一旦被“拍照搜”接住,回报最直接;其次挑那些在传统关键词里被大站死死压住、几乎没机会翻身的长尾款,视觉搜索对它们反而是条绕开正面战场的小路。至于那些纯功能件、外观没什么记忆点的产品,就先放着,硬拍也讨不到好。判断的逻辑始终是一条:这件产品值不值得让机器“看一眼就记住”,如果值,才配得上重拍主图、补全feed的那份投入。保哥常说,小站跟大站拼文字词库多半是以卵击石,但在视觉这条新赛道上,大家的起跑线其实差不了太多,谁先把图和数据备齐,谁就先被看见。 ## 做了视觉搜索,怎么判断有没有效果 视觉搜索的效果不像关键词排名那样有个直观的名次可看,数据散在几个后台里,得自己拼。几个值得盯的口子: - Google Search Console的图片搜索表现:在效果报告里按“Google图片”这个搜索类型筛,看你的图片带来的曝光和点击趋势。它反映的是图片可发现性的大盘,视觉搜索优化做对了,这条线通常会跟着往上走。 - Merchant Center的商品曝光与点击:产品在购物结果里被展示、被点了多少,哪些商品数据不合格被拒了。比价型查询的效果,主要看这里。feed有问题,第一时间在这暴露。 - Pinterest Analytics:看Pin的曝光、保存、出站点击,尤其是视觉搜索和相关Pin带来的流量。风格型查询做得好不好,这个后台最直接。 - 网站流量来源里的引荐:留意来自lens.google、Pinterest等来源的引荐访问。量可能不大,但趋势能说明视觉入口到底有没有在给你送人。 别指望这些数字一夜暴涨。视觉搜索是个慢变量,更像是给站点多开了几扇窗,风是慢慢灌进来的。把这几个后台每月对一次,看哪张图、哪个品类在起量,再往那个方向加码,比盯着某个单一指标焦虑要靠谱得多。 ## 常见问题解答 ## 视觉搜索优化,是不是把图片SEO做好就够了? 不够。图片SEO解决的是“让图片出现在文字搜图的结果里”,视觉搜索解决的是“机器用一张图当查询时,能不能看懂并选中你的产品”。前者伺候文本索引,后者伺候会看图的模型,还得靠商品feed和结构化数据把图和可购买的SKU绑起来。图片SEO是其中一层,不是全部。 ## 没有App、只是个独立站,用户怎么会用视觉搜索找到我? 路径不在你的站内,而在入口平台。用户用Google Lens拍照或圈图搜时,系统从购物图谱调结果,只要你的商品feed进了Google Merchant Center、结构化数据规范,你的产品就有机会出现在那个结果里。Pinterest同理,产品目录上传成catalog后,用户在站内视觉搜索就可能刷到你。关键是把产品数据主动铺进这些入口。 ## 圈图搜(Circle to Search)会不会只是给大平台导流? 这个担心是对的,也是视觉搜索的真实短板。圈图搜的典型路径是“识别品类→导向购物结果或大平台”,独立站容易只是结果池里的一个候选,甚至完全不在场。应对办法不是指望截住圈图搜的全部流量,而是先确保自己在结果池里(feed进图谱、结构化齐全),再靠价格、评价、图质去争那个被选中的位置。 ## 做视觉搜索,Google和Pinterest该先做哪个? 看品类。如果你卖的是看脸、靠风格种草的东西——家居、服饰、美妆、饰品、手作,Pinterest优先,它的视觉搜索最成熟、商业意图最浓,而且约八成搜索不带品牌词,对没声量的新站友好。如果产品偏功能性、用户更多是“看到实物想比价”,那Google Lens + Merchant Center这条线更关键。两个都做当然最好,但资源有限时按品类押注。 ## 多模态查询(图 + 文字)对我的关键词策略有什么影响? 它会把一部分长尾需求从文字搜索框迁走。以前用户得把“灰色布艺三人位沙发”打出来,现在可以拍张沙发图再补一句“要灰色的”。这意味着你不能只盯着文本关键词,还得让产品的视觉属性(颜色、材质、款式)清晰可辨、并在结构化数据里标全,机器才能同时接住图里的视觉信息和文字里的约束条件。 ## 产品图到底怎么拍,机器最容易看懂? 四个要点:一图一主体,别把一堆产品塞一张图;白底图和场景图各备一套,白底方便识别比对、场景方便风格匹配;多角度、高分辨率,正面侧面细节都给全;别用促销角标、大字水印盖住产品本身。核心目标只有一个——让机器隔着屏幕也能一眼确定“这是什么”。 ## 权威参考资料 - Google —《Google Lens and AI Overviews: New ways for marketers to reach customers》 (https://blog.google/products/ads-commerce/google-lens-ai-overviews-ads-marketers/)—— Google广告与商务团队官方公布Lens每月近200亿次视觉搜索、20%为购物意图、购物图谱收录超450亿件商品的一手数据。 - Google Lens —《How Lens works》官方产品页 (https://lens.google/howlensworks/)—— 讲清Lens“搜你所见”的定位、拍照识别与接入购物图谱给出比价与购买链路的工作方式。 - Google搜索中心 —《Google image SEO best practices》 (https://developers.google.com/search/docs/appearance/google-images)—— 图片可辨识度与可发现性的官方规范:描述性文件名、语境化alt、高质量单主体图、结构化数据与图片站点地图。 - Pinterest Business —《Why Visual Search Marketing Is the Future》 (https://business.pinterest.com/blog/the-future-of-search-is-visual/)—— Pinterest商务团队讲视觉搜索的商业逻辑,以及品牌上传产品目录、图用2:3竖版、填全品牌与价格字段的优化建议。 - Semrush —《How to Optimize Images for Visual Search & AI Overviews》 (https://www.semrush.com/blog/visual-search/)—— 视觉搜索优化系统指南,含lens.google访问量两年涨10倍、图片质量与结构化在视觉搜索里的权重变化。 - Shopify —《What Is Visual Search? Definition, Examples + Tips for Retailers》 (https://www.shopify.com/blog/what-is-visual-search)—— 面向零售商的视觉搜索指南,从零售视角讲清红利属于提前备好产品图与产品数据、并主动铺进各视觉入口的商家。 ## 产品变体SEO怎么做?同一商品的几十个URL该合还是该拆 - URL:https://zhangwenbao.com/product-variant-seo-url-canonical-indexation-strategy.html - 分类:电商SEO - 发布:2026-06-26 | 更新:2026-06-26 - 摘要:产品变体SEO怎么做?拆解变体URL泛滥的四笔账(权重稀释、重复内容、抓取预算、关键词蚕食),讲清单页选择器、查询参数、路径静态化三种形态,canonical收口与自引用,ProductGroup与inProductGroupWithID标记,以及Shopify、WooCommerce、Magento的变体处置。 - 关键词:canonical,结构化数据,电商SEO,ProductGroup,产品变体 > **TLDR**:摘要:同一件商品有红蓝黑三色、S到XL四个尺码,大多数电商系统会默默给每个组合生成一条独立URL,于是一个产品页悄悄裂成几十个近乎一样的页面。它们抢同一批关键词、稀释彼此的权重、吃掉本该留给重要页面的抓取预算,还容易触发那条让人头疼的GSC报错“Duplicate, Google chose different canonical than user”。产品变体的SEO说到底是一道取舍题:这一个商品,到底该用几条URL。本文把变体和分面筛选先掰开,算清变体失控的四笔账,再给出一套按搜索需求分两堆的决策框架——绝大多数变体用canonical收口到一条父URL,只有少数自带独立搜索量的变体才值得单独成页。后面还会拆canonical工具箱、ProductGroup结构化数据、三大平台的默认行为与坑、变体长尾机会,以及一个户外储能站三千SKU的真实治理复盘。 > 摘要:同一件商品有红蓝黑三色、S到XL四个尺码,大多数电商系统会默默给每个组合生成一条独立URL,于是一个产品页悄悄裂成几十个近乎一样的页面。它们抢同一批关键词、稀释彼此的权重、吃掉本该留给重要页面的抓取预算,还容易触发那条让人头疼的GSC报错“Duplicate, Google chose different canonical than user”。产品变体的SEO说到底是一道取舍题:这一个商品,到底该用几条URL。本文把变体和分面筛选先掰开,算清变体失控的四笔账,再给出一套按搜索需求分两堆的决策框架——绝大多数变体用canonical收口到一条父URL,只有少数自带独立搜索量的变体才值得单独成页。后面还会拆canonical工具箱、ProductGroup结构化数据、三大平台的默认行为与坑、变体长尾机会,以及一个户外储能站三千SKU的真实治理复盘。 ## 先分清:产品变体和分面筛选根本不是一回事 很多人把产品变体和分面导航混为一谈,结果治理时一锅乱炖。这两件事虽然都会催生海量URL,但来源完全不同,处置逻辑也不一样。 分面筛选是分类页层面的事。用户在一个品类列表页上勾选“红色 + 99元以下 + 按销量排序”,系统把这些过滤条件拼成参数URL。这类页面的治理思路,保哥在另一篇里讲过——重点是按搜索需求决定哪些筛选组合值得索引、哪些直接用robots挡掉,详见分面导航的SEO治理 (https://zhangwenbao.com/faceted-navigation-seo-crawl-budget-index-control.html)。 产品变体是单个商品层面的事。一件T恤本身就有颜色、尺码两个维度,每个维度几个取值,这些取值组合出来的就是变体(variant),每个变体往往对应一个独立的SKU。schema.org把这种关系定义得很干净:一个 ProductGroup(产品组) (https://schema.org/ProductGroup)代表“一组只在某些明确描述的方式上有差异的产品,比如尺寸、颜色、材质”。换句话说,分面是“在一堆商品里挑”,变体是“在一个商品里选规格”。 这个区分不是咬文嚼字。分面页大多是过滤出来的临时组合,本身没几个值得长期索引;而变体背后是实实在在的库存单位,有的变体(比如某个热门容量、某个爆款颜色)自带搜索量,处置策略要细腻得多。把两者混在一起,要么把该留的变体页一刀切屏蔽了,要么放任变体URL泛滥。 ## 平台默认怎么坑你:一个商品裂成几十个近重复页 问题的根子在于:大部分电商系统的默认行为,是给每个变体组合生成一条可访问的URL。 算笔账你就明白这有多吓人。一件T恤5种颜色、4个尺码,组合就是20个变体;再加一个“是否带口袋”的二选一,直接翻到40个。如果系统给每个组合都吐一条URL,那么这一个商品在搜索引擎眼里就是40个页面。而这40个页面的正文——产品描述、规格表、配送政策、评价区——几乎一字不差,区别只是标题里的颜色词和那张主图。 对搜索引擎来说,这就是典型的近重复内容。Ahrefs在拆解一条常见报错时提到,超过60%的网络都存在某种程度的重复内容问题 (https://ahrefs.com/blog/duplicate-google-chose-different-canonical-than-user/),电商的变体页正是重灾区之一。更麻烦的是,这些近重复页不是孤立存在,而是成片成片地批量产生——一个目录几百个SKU,乘以变体倍数,轻松就是几万条URL。 这里要先破一个误区:变体URL多,不等于你的商品丰富、内容厚实。在搜索引擎看来,那只是同一份内容被抄了几十遍。商品本身的价值没增加,索引库里的噪声却暴涨。 ## 变体失控的四笔账 变体URL泛滥到底坏在哪?拆成四笔账看得最清楚,这四笔是层层递进的。 第一笔,权重稀释。外链、内链带来的链接权益本该集中喂给一个强势的产品页,结果被几十个变体页瓜分。每个变体页都分到一点点权重,谁都长不壮。本该冲首页的关键词,因为权重被摊薄,卡在第二页上不去。 第二笔,重复内容竞争。几十个内容雷同的变体页同时存在,搜索引擎得自己猜该索引哪个、该排哪个。这一猜就出问题——它选的那个,未必是你希望用户落地的那个。 第三笔,抓取预算浪费。爬虫的抓取额度是有限的。它把时间花在反复抓那40个近重复变体页上,留给新品页、留给那些真正有转化价值页面的额度就少了。Yoast在变体优化指南里直接点名这一条:为每个变体单独建页会浪费抓取预算,阻止高优先级页面被及时索引。结果就是新品上架两周还没被收录,老变体页倒是抓得勤快。 第四笔,互相蚕食。这是最隐蔽的一笔。“红色T恤”和“蓝色T恤”两个变体页,在搜索引擎眼里相似度极高,会被判定为争抢同一组关键词,结果谁也排不好。关于变体之间互咬这件事,本质上就是关键词蚕食,处理思路可以参考用余弦相似度压商品蚕食 (https://zhangwenbao.com/cosine-similarity-ecommerce-seo-semantic-optimization.html)那套方法。 四笔账加起来,你会发现一个反直觉的结论:变体页越多,整个商品的搜索表现往往越差。少即是多,在这里是字面意义上的成立。 ## 核心决策:这个变体到底配不配拥有独立URL 治理变体,第一步不是动手改canonical,而是回答一个问题:这个变体值不值得拥有一条独立的、可被索引的URL? 判断标准其实只有两条,缺一不可。 第一条,它有没有独立的搜索量。“iPhone 15 Pro Max 512GB蓝色”这种长尾,是真有人这么搜的,搜索意图明确,那它就值得一个独立着陆页。而“蓝色”这个颜色变体本身,几乎没人会单独搜“蓝色T恤”加你的品牌词来找货,那它就不配。用关键词工具拉一下,看变体词组有没有像样的月搜索量,这是最硬的依据。 第二条,你能不能给它加上独特的价值。Yoast的电商产品变体优化指南 (https://yoast.com/ecommerce-product-variations-optimization-guide/)说得很直接:只有当你能为变体页补上独特的内容、图片,独立URL才成立,否则就是在制造重复。如果一个所谓的“独立变体页”除了改个颜色词、换张图,正文跟父页一模一样,那它就是个重复页,给它独立URL纯属自找麻烦。 把这两条套到实际目录上,你会得到一个清晰的二分:绝大多数变体(颜色、尺码这类低差异属性)应该收口到一条父URL;只有极少数自带搜索量、又能补独特价值的变体,才拆成独立页。这就是Yoast推荐的混合策略——保持单一主产品页,仅为高需求搜索词开变体URL。九成场景下,答案都是“合并”。 ## 三种变体URL形态,怎么选 明确了“大部分合并、少数独立”的原则,接下来是技术形态的选择。变体在URL上一共有三种活法。 形态一:单页选择器。整个商品只有一条URL,颜色色板、尺码按钮都在这一页上。用户点选不同变体时,用JavaScript实时切换图片、价格、库存状态,URL始终不变。这是变体SEO的理想形态——权重全部集中在一条URL上,从根上消灭了重复内容。Shopify默认就是这套:一件衣服5色8码共40个变体,全部归到 /products/t-shirt 一条URL。 形态二:查询参数变体。父URL加参数区分变体,比如 /coat?size=small&color=green。Google官方文档专门强调,单页结构里每个变体必须能通过查询参数被预选到。这种形态下,参数变体页统统用canonical指回干净的父URL,让权重回流。 形态三:路径静态化的独立着陆页。把那少数有搜索量的高价值变体,做成路径清晰、内容独特的独立页,比如 /coat-red,并配上自引用canonical让它独立参与排名。这条路只走给通过了上面两条判断标准的变体,不能滥用。 大方向是:能用单页选择器就别拆,必须拆的用参数 + canonical收口,真正值得的少数才静态化独立成页。顺带提一句,那个老SEO们用了多年的Google Search Console URL参数工具,已经在2022年退役了,别再去后台找它处理变体参数——现在一切交给canonical和robots。 ## canonical工具箱:变体场景怎么收口 canonical标签是收口变体权重的主力工具,但它的脾气得摸清楚。 对于该合并的变体页,做法是让所有变体URL的canonical都指向那条不带任何变体参数的主产品页。Search Engine Land的 2026规范化指南 (https://searchengineland.com/canonicalization-seo-448161)把这条列为电商标准操作:不同颜色或尺寸生成的唯一URL,应当指向主产品页,除非各变体有独立搜索量。这样Google就明白:只有主页是要索引排名的,那一堆变体页是同一商品的不同侧面。 对于该独立的高需求变体页,则要用自引用canonical——它指向自己,宣告“我是一个独立的、值得单独索引的页面”。Semrush在 canonical URL最佳实践 (https://www.semrush.com/blog/canonical-url-guide/)里把自引用列为基本功,还提醒了几个容易翻车的细节:每页只能有一个canonical、必须用包含协议和域名的绝对URL、HTTPS站点的canonical也必须是HTTPS、别指向一个会立即重定向的URL。这些细节在变体场景里尤其容易出错,因为变体URL本身就长、参数多。 但要记住canonical的两个本质限制。其一,它不省抓取预算——爬虫还是会去抓那些被canonical收口的变体页,只是不索引而已。其二,它只是一个建议而非命令。Ahrefs提醒,canonical不过是Google用来判断规范版本的约20个信号之一,如果你的canonical跟内链、sitemap、重定向这些其他信号打架,Google完全可能不听你的,自己另选一个。这就引出了那条最常见的报错。 ## 别忘了结构化数据:用ProductGroup告诉Google “这是一个产品的多个变体” 光靠canonical收口还不够,你还得主动告诉搜索引擎这些变体之间的关系。这就是ProductGroup结构化数据的活儿,它是Google在2024年初正式支持的能力。 核心逻辑是用一个父级容器把变体组织起来。按 Google官方的产品变体结构化数据文档 (https://developers.google.com/search/docs/appearance/structured-data/product-variants),几个关键属性是这么分工的: - productGroupID:产品组的唯一标识符,也就是俗称的父级SKU(parent sku),把所有变体拴在一起。 - variesBy:声明这组变体到底按什么维度变化,可选值包括color、size、material、pattern、suggestedAge、suggestedGender等。 - hasVariant:挂在ProductGroup下,每一个代表一个具体变体。 - inProductGroupWithID:写在变体的Product标记里,反向引用回父组的ID。 这里有个硬要求:每个变体必须有自己唯一的ID(用sku或gtin),且每个变体的图片、价格、库存这些都是变体自己的,不从父级继承。加了这套标记,你的产品就有机会在Google的商品列表体验里直接展示“还有这些颜色、这些尺寸可选”,对点击率是实打实的加成。 一个要留神的坑:Google文档提到,如果你的结构化数据是靠JavaScript动态生成的,可能会降低Shopping爬虫抓取的频率。所以变体schema尽量在服务端就渲染进HTML,别让爬虫等着JS跑完。 ## 那条“Google选了不同canonical”的报错,多半是变体在作祟 如果你在GSC的页面索引报告里看到一批URL被标成“Duplicate, Google chose different canonical than user”(重复,Google选择了与用户不同的规范网址),先别慌,电商站里这条十有八九是变体引起的。 它的意思是:你给变体页指定了canonical,但Google没采纳,自己另选了一个URL去索引。Search Engine Land把这条直接定性为“潜在的规范冲突”信号。成因通常逃不开这几种:变体页之间内容太像,Google觉得你指的那个canonical没道理;或者你的canonical信号跟内链、sitemap矛盾——比如sitemap里收了一堆变体URL,却又让它们canonical到父页,Google收到的是自相矛盾的指令。 修复路径也清楚:内容确实重复的,要么合并、要么给独立变体补足独特内容;canonical形成链条或循环的(A指B、B又指回A),把所有版本统一指向最终首选页,必要时用301加强信号;sitemap和canonical打架的,把变体URL从sitemap里清出去,只留你希望被索引的页面。把信号理顺,Google自然会回到你指定的那条canonical上。 ## 动手前先盘家底:三步看清变体到底乱成什么样 很多人一上来就改canonical、写schema,结果改了半天不知道有没有改对,因为根本没摸清家底。治理变体之前,先做三件事。 第一,用爬虫按变体参数给URL分组。跑一遍站点爬虫,把所有带 ?color=、?size=、?variant= 这类参数的URL揪出来,按参数归类。你会很直观地看到:哪些商品的变体URL在爆炸式增长,哪些参数纯属冗余。 第二,翻服务器日志,看Googlebot实际在抓什么。爬虫报告告诉你站点有多少变体URL,日志才告诉你Googlebot真的把多少抓取额度花在了这些变体页上。如果你发现爬虫一半的时间都在抓近重复变体页,那抓取预算的账就是实打实在亏。 第三,列一张变体清单作业本。把主力商品的变体维度、每个维度的取值、对应的搜索量一行行列出来。这张表是后面所有决策的依据——哪些变体合并、哪些独立,全看这张表上的搜索量数字说话。 盘完家底,你手里就有了一张地图,而不是凭感觉乱改。 ## 决策树:每一类变体该怎么处置 有了清单,就可以按变体类型逐一定夺。下面这套处置逻辑覆盖了绝大多数电商场景。 - 颜色、尺码(低搜索量):合并。单页选择器搞定,全部canonical到父URL。这是九成变体的归宿。 - 容量、规格、型号(常有独立搜索量):逐个看。像储能电源的“500W”“1000W”、手机的“256GB”“512GB”,往往有真实长尾搜索,值得评估是否独立成页。 - 套装、组合装:通常值得独立,因为它和单品的用户意图、价格、内容差异都足够大,本来就该是另一个商品。 - 材质、图案(视品类):家居、服饰里材质有时有搜索量(比如“真皮沙发”对“布艺沙发”),需要个案判断。 还有一条铁律:排序、分页、价格区间这类参数页,永远不该被索引。它们不是变体,是浏览状态,统一canonical到基础页或直接屏蔽。 判断完之后,决策落到两个动作:要合并的,单页选择器 + canonical收口;要独立的,路径静态化 + 自引用canonical + 补独特内容 + 进sitemap。 ## 三大平台的变体默认行为与各自的坑 原则归原则,落到具体平台,默认行为和踩坑点各不相同。 Shopify:默认就很SEO友好——一个产品一条URL,变体通过参数访问,且自动把所有变体URL canonical到基础产品URL。对绝大多数店来说这就是对的。坑出在你自己手贱:要么自定义了变体URL,要么装了某些把变体拆成独立页的App,反而绕过了Shopify的自动canonical,制造出本不存在的重复内容。Shopify店的原则是——非必要别动它的默认行为。 WooCommerce:变体(variable product)默认不为每个变体生成独立URL,而是在父页用下拉切换。这本身没问题,但WooCommerce的变体SEO在schema、canonical、URL三层都有需要单独治理的细节,保哥在WooCommerce变体SEO实战 (https://zhangwenbao.com/woocommerce-product-variations-seo-schema-canonical-url-deep-dive.html)里专门拆过这套三层治理,这里不重复。 Magento:用configurable product(可配置商品)组织变体,下面挂一堆simple product。坑在于配置不当时,那些底层的simple product可能各自暴露出可索引的URL,造成父页和子SKU互相重复。Magento站要特别检查底层simple商品的可见性和canonical设置。 三个平台的共性是:默认配置往往是合理的,问题大多出在二次开发、装插件、改URL结构之后。改之前先搞清楚平台原本是怎么处理变体的。 ## 把高需求变体做成独立着陆页:变体里的长尾金矿 讲了这么多“合并”,得给“独立”也留个正经位置——因为一刀切全合并,会漏掉变体里真正的长尾机会。 那些自带搜索量的变体,值得你认真做一个独立着陆页,而不只是父页上的一个选项。做的时候要把它当成一个真正独立的商品页对待: - 独特的标题和描述,围绕这个变体的具体搜索词来写,而不是父页标题加个颜色词。 - 变体专属的图片,让用户和搜索引擎都看得出这页是为这个特定规格服务的。 - 针对该变体的使用场景、人群、卖点单独展开——比如“1000W储能电源”的着陆页,就该重点讲它能带哪些电器、适合什么露营场景。 - 配上变体级别的结构化数据,并用自引用canonical让它独立参与排名。 判断哪些变体配得上这份投入,回到前面那张变体清单:搜索量过得了门槛、又有内容可补的,就是你的长尾金矿。其余的,老老实实合并。 ## feed里的变体:item_group_id别让购物广告认错爹 变体的影响不止于自然搜索,还延伸到购物广告和AI购物。在产品feed里,变体之间的关系靠 item_group_id 这个属性来声明——同一个商品的所有变体填同一个item_group_id,Google Merchant Center才知道它们是一家人。 这件事和自然搜索是一体两面:自然搜索靠ProductGroup schema表达变体关系,购物feed靠item_group_id表达。两边都对齐了,你的商品才能在购物广告和AI选品里以“一个产品,多个可选规格”的完整面貌出现,而不是一堆互相不认识的孤立SKU。关于产品feed该怎么当成SEO资产来经营,可以看产品feed到底该谁管 (https://zhangwenbao.com/product-feed-seo-asset-organic-ai-ownership.html)那篇的系统拆解。 ## AI搜索时代:变体schema让AI看懂你有什么可选 变体治理这件事,在AI搜索时代的价值不降反升。 当用户问AI购物助手“有没有适合两个人露营、能带电饭煲的便携电源”,AI需要理解的不只是“你有一款储能电源”,而是“这款电源有300W、500W、1000W三个容量可选,1000W那个能带电饭煲”。这种“一个产品、多个变体、各有参数”的结构化信息,正是ProductGroup schema在表达的东西。 反过来,如果你的变体URL一片混乱、schema缺失,AI看到的就是几十个内容雷同、关系不明的页面,它根本拼不出一个完整的商品画像,自然也难把你推荐给用户。Search Engine Land在那篇规范化指南里特意点了一句:清晰的规范信号对生成式搜索引擎同样重要,因为当AI摄入多个版本时,干净的信号能确保它存储和总结正确的那一个。一句话——AI时代,把变体关系讲清楚的商品更值钱,噪声更要清。 ## 怎么验证治理做对了 改完之后别急着收工,得验证信号真的理顺了。三个动作交叉验证。 看GSC页面索引报告。治理前那批“Duplicate, Google chose different canonical than user”的URL,治理后应该逐步减少;你希望被索引的父页和独立变体页,应该稳稳待在“已索引”里。 翻日志看抓取分布。对比治理前后Googlebot的抓取去向,理想状态是花在近重复变体页上的额度明显下降,更多额度流向了主产品页和新品页。 用site: 抽查。拿几个治理过的商品,用 site:你的域名 商品词 搜一下,看搜索引擎收的是不是你希望的那条父URL或独立变体页,而不是一堆参数变体。 三个口径对上了,才算治理到位。任何一个对不上,回头查canonical、sitemap、内链这三处信号是不是又打架了。 ## 一个户外储能站的真实复盘 保哥手头一个做户外储能电源的出海客户,正好踩过这套坑。这站当时三千多个SKU,每个产品都有容量(5档)、颜色(3档)、是否带太阳能板(2档)这几个维度,系统给每个组合都生成了独立URL。算下来,三千个商品在搜索引擎眼里膨胀成了好几万个页面,新品上架经常两周还收不进去。 治理就是按上面那张决策表走的。颜色和“是否带板”这两个维度,没有任何独立搜索量,全部合并——单页选择器加canonical收口到父URL。容量维度是关键:拉关键词工具一看,“1000W户外电源”“500W便携电源”这些都有实打实的月搜索量,于是把每个容量档做成了独立着陆页,各自写了针对性的使用场景内容、配了变体图片和自引用canonical,并补上ProductGroup schema把它们和父组拴在一起。排序、分页这些参数页则统统屏蔽。 结果是两头都赢:膨胀的几万个变体URL收口到合理规模,新品收录从两周压到了三天上下;同时几个容量变体的独立着陆页,反而吃到了过去完全没覆盖的容量长尾词。这印证了那个反直觉的道理——变体不是越多越好,是该合的合、该立的立,整体表现才上得去。 ## 5个常见误区 - 误区一:变体越多、URL越多,SEO越好。恰恰相反,未经治理的变体URL是负担不是助力,它们稀释权重、制造重复、吃抓取预算。 - 误区二:加了canonical就万事大吉。canonical只是约20个信号之一,且不省抓取预算。它要和sitemap、内链、robots配合,单靠它收不干净。 - 误区三:所有变体一刀切,要么全合并要么全独立。正确做法是按搜索需求分两堆——绝大多数合并,少数高需求变体独立。 - 误区四:独立变体页就是父页改个颜色词。没有独特内容、图片和搜索意图支撑的“独立页”,本质还是重复页,给它URL是帮倒忙。 - 误区五:自然搜索和购物feed两套各管各的。ProductGroup schema和item_group_id必须对齐,变体关系两边讲一致,商品才能完整露脸。 ## 常见问题解答 ## 产品变体到底该不该每个都有独立URL? 绝大多数不该。颜色、尺码这类低差异、低搜索量的变体,应该用单页选择器收口到一条父URL。只有自带独立搜索量、又能补上独特内容和图片的变体(比如某个热门容量、热门型号),才值得做成独立URL。判断依据就两条:有没有人这么搜,你能不能给它加独特价值。 ## 变体页的canonical应该指向哪里? 该合并的变体页,canonical统一指向不带任何变体参数的主产品页,让权重回流。需要独立索引的高需求变体页,用自引用canonical指向自己。注意canonical必须是包含协议和域名的绝对URL,每页只能有一个,HTTPS站点的canonical也得是HTTPS。 ## GSC报告里出现Google选了不同canonical这条警告怎么办? 这在电商站多半是变体引起的,意思是Google没采纳你指定的canonical。先查变体页内容是不是太像,要么合并要么补独特内容;再查canonical有没有形成链条或循环;最后确认sitemap里没有收一堆又被canonical收口的变体URL。把这几处矛盾信号理顺,Google一般会回到你指定的canonical。 ## ProductGroup结构化数据是必须的吗? 不是强制,但强烈建议。它用productGroupID、variesBy、hasVariant这些属性把变体组织成一个产品组,让Google理解“这是一个商品的多个变体”,从而在商品列表体验里展示可选颜色、尺寸,提升点击率。注意每个变体要有唯一的sku或gtin,且尽量服务端渲染,别靠JS动态生成以免拖慢Shopping爬虫。 ## Shopify的变体SEO需要我手动处理吗? 大多数情况不需要。Shopify默认一个产品一条URL,变体走参数,并自动canonical到基础产品页,这对九成店铺都是对的。需要警惕的是你自己自定义变体URL,或装了把变体拆成独立页的App,那会绕过自动canonical制造重复内容。非必要别动它的默认行为。 ## 变体治理和分面导航治理是一回事吗? 不是。变体是单个商品内部的规格选择(颜色、尺码、容量),分面是分类页上的筛选过滤(价格区间、品牌、排序)。两者都会产生大量URL,但来源和处置逻辑不同。变体重点在canonical收口和ProductGroup schema;分面重点在按搜索需求决定哪些筛选组合值得索引、哪些用robots屏蔽。 ## 权威参考资料 ## 电商sitemap怎么做?百万SKU的分片、进出场与lastmod诚实度实战 - URL:https://zhangwenbao.com/ecommerce-product-sitemap-strategy-sharding-lastmod-image-index.html - 分类:电商SEO - 发布:2026-06-25 | 更新:2026-06-25 - 摘要:电商sitemap怎么做?讲清sitemap index分片与50000/50MB硬限、产品集合分库监控收录率、缺货下架配合301与410进出场、变体与canonical保持一致、lastmod须诚实可验证、图片sitemap驱动购物,并厘清sitemap与产品feed的区别。 - 关键词:电商SEO,电商,Sitemap > **TLDR**:摘要:博客站的sitemap是一张薄薄的目录,电商站的sitemap是一座随时在塌方和重建的城市地图。几十万SKU、每天上架下架、一个商品裂成几十个变体URL、库存价格分钟级抖动——这些都不是博客会遇到的问题。这篇把电商sitemap当成一项工程来拆:先记死50000 URL/50MB/sitemap index三条硬红线,再讲清楚按内容类型分库、产品页的进出场、变体到底进不进、lastmod的诚实度、图片sitemap这条被忽略的购物通道,最后给一份能直接照着跑的体检清单。priority和changefreq这两个老古董,Google和Bing都明说忽略了,别再浪费时间填。 > 摘要:博客站的sitemap是一张薄薄的目录,电商站的sitemap是一座随时在塌方和重建的城市地图。几十万SKU、每天上架下架、一个商品裂成几十个变体URL、库存价格分钟级抖动——这些都不是博客会遇到的问题。这篇把电商sitemap当成一项工程来拆:先记死50000 URL/50MB/sitemap index三条硬红线,再讲清楚按内容类型分库、产品页的进出场、变体到底进不进、lastmod的诚实度、图片sitemap这条被忽略的购物通道,最后给一份能直接照着跑的体检清单。priority和changefreq这两个老古董,Google和Bing都明说忽略了,别再浪费时间填。 做内容站的人聊sitemap,三句话能聊完:装个插件、自动生成、提交到搜索后台,收工。做电商的人聊sitemap,能从产品架构吵到抓取预算,从库存系统吵到CDN缓存,最后发现没一个人能说清自己站里那几个sitemap文件到底装了什么、漏了什么。 差别不在sitemap这个格式本身,而在它要描述的东西。内容站的URL是相对稳定的——文章发出去就躺那儿了。电商站的URL是活的:今天上架2000个新品,明天清仓下架800个,后天某个爆款裂出40个颜色尺码变体,每个变体一个URL。你的sitemap如果还停留在装插件自动生成的水平,它要么在拼命告诉Google一堆早就404的死链,要么把真正该被收录的新品晾在外面没人管。 ## 电商站的sitemap是另一个物种 先把规模感建立起来。一个中等独立站,光产品页就轻松过万;做铺货或多SKU品类(服装、3C配件、汽配)的,几十万URL是常态;平台级的,百万起步。这个量级下,sitemap不再是一个文件,而是一套需要分片、分库、调度更新的子系统。 更麻烦的是动态性。电商页面的状态在不停切换:有货→缺货→补货→永久下架。每一次切换都牵动sitemap该不该收录这条URL、该用什么lastmod、要不要配合301还是410。内容站一年改不了几次的东西,电商站一天要处理成千上万次。 还有变体爆炸。一件T恤5个颜色4个尺码,理论上20个组合,如果每个组合一个独立URL,单品就是20条。这种结构如果不加治理直接全塞进sitemap,等于主动把抓取预算往火坑里推。变体到底该合还是该拆,保哥在产品变体SEO那篇 (https://zhangwenbao.com/product-variant-seo-url-canonical-indexation-strategy.html)里讲透了,这里只谈它在sitemap层面的取舍。 所以电商sitemap的核心命题,从来不是“怎么生成一个sitemap”,而是“在一个URL不断生灭的系统里,怎么让搜索引擎拿到一份准确、新鲜、不浪费的地图”。 ## 2026年了,sitemap到底还管不管用 每隔一阵就有人喊sitemap没用了、Google早就靠链接自己爬了。这话对一半。对小站确实如此——几百个页面,内链做好,Google闭着眼睛都能爬完,sitemap锦上添花而已。但对电商大站,sitemap是刚需,不是可选项。 原因很简单:大站一定有Google靠内链爬不到、或者爬得很慢的角落——深层分类下的长尾商品、刚上架还没被任何页面链接的新品、季节性下架又重新上架的SKU。这些页面如果不在sitemap里明确告诉搜索引擎“这条存在、这条刚更新”,它们可能几周都进不了索引。对电商来说,一个商品晚收录一周,就是一周的自然流量和销售凭空蒸发。 sitemap这个格式本身是一套开放协议。从 维基百科的Sitemaps词条 (https://en.wikipedia.org/wiki/Sitemaps)能看到,它从2005年起就被Google、Bing、Yahoo等主流引擎共同支持,是搜索引擎抓取的通用语言——不是某一家的私货。而AI搜索时代,这套老协议反而更重要了。Bing在2025年7月那篇 AI搜索时代如何让内容保持可发现 (https://blogs.bing.com/webmaster/July-2025/Keeping-Content-Discoverable-with-Sitemaps-in-AI-Powered-Search)的官方博客里说得很直白:即便搜索在往AI驱动演进,sitemap依然是确保URL覆盖完整性的基础信号,和IndexNow这类实时推送互补。换句话说,AI概览也好、AI购物也好,模型要先能“看见”你的商品页,才谈得上把它们拉进答案里。 ## 三条硬红线先刻进脑子 不管你用什么平台、什么生成方式,下面三个数字是协议级的死规矩,违反了搜索引擎直接不认或截断处理: 限制 | 数值 | 触发后果 | 单个sitemap文件URL数 | ≤ 50000条 | 超出部分被忽略 | 单个sitemap文件大小 | ≤ 50MB(未压缩) | 文件被拒绝解析 | sitemap index引用的子sitemap数 | ≤ 50000个 | 超出部分被忽略 | 这两个50000不是我编的。sitemaps.org的协议规范 (https://www.sitemaps.org/protocol.html)写得明明白白:每个sitemap文件不得超过50000条URL、不得大于50MB(精确到字节是52428800),而sitemap index文件同样最多列50000个子sitemap。Google在构建并提交sitemap的官方文档 (https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)里重申了完全一样的上限:所有格式都限制单个sitemap不超过50MB(未压缩)或50000条URL。 有意思的是上限之上还有上限。Google关于大型sitemap的官方指引提到,一个站点在Search Console里最多能提交500个sitemap index文件。算一下:500个index × 50000个子sitemap × 50000条URL,理论容量是天文数字,Bing那边干脆给了个具体说法——单个index支撑25亿URL,多index叠加可达2.5万亿。所以容量从来不是电商站的瓶颈,组织方式才是。 ## 单文件装不下:sitemap index的正确分片姿势 一旦你的URL总数过了50000,就必须上sitemap index。这东西本质是一个“sitemap的sitemap”——它不直接列URL,而是列一堆子sitemap的地址,搜索引擎先读index,再逐个去读子文件。 分片有个容易踩的坑:目录层级。Google的sitemap index官方文档明确要求,被引用的子sitemap必须和index文件在同一目录或更深的目录,且必须托管在同一站点上。也就是说,如果你的index放在 /sitemap_index.xml,那它能引用的子文件得在根目录或子目录里,不能指到别的域名去(除非你专门配了跨站提交)。这个规矩很多人自建sitemap时栽过跟头:把图片sitemap扔到CDN域名上,结果index引用不生效。 分片的颗粒度怎么定?两条经验: - 别贴着50000装满。留出余量,单个子sitemap控制在20000~40000条,方便增量更新时不至于一条新品就触顶重切。 - 按业务逻辑切,不要按生成顺序机械切。下面这一节专门讲——按内容类型分库,远比按“前5万条一个文件”有用。 ## 按内容类型分库:产品、集合、博客、静态页各管各的 这是电商sitemap最关键、也最被低估的一招。与其把所有URL不分青红皂白塞进一串编号文件(sitemap-1、sitemap-2……),不如按内容类型拆成独立的子sitemap: - sitemap-products.xml(或分片成products-1、products-2……)——所有商品详情页 - sitemap-collections.xml——集合页/分类页 - sitemap-pages.xml——关于我们、政策页等静态页 - sitemap-blog.xml——内容营销文章 - sitemap-images.xml——图片sitemap(后面单讲) 为什么值得这么折腾?因为Search Console的sitemap报告是按你提交的每个sitemap文件分别统计“已提交vs已收录”的。如果全混在一起,你只能看到一个笼统的收录率;分库之后,你能立刻看出“产品页收录率92%、集合页收录率只有40%”这种结构性问题,诊断一下子就精准了。先分桶,才能看清抓取资源到底花在了哪一类页面上。 主流平台其实早就这么干了。Shopify帮助中心查找并提交sitemap的页面 (https://help.shopify.com/en/manual/promoting-marketing/seo/find-site-map)写得很清楚,店铺会自动生成一个sitemap.xml主索引,下面挂着产品、集合、博客、网页各自独立的子sitemap,当某个子sitemap超过5000条URL时,会自动再裂出新的子文件来守住50000的上限。WordPress这边的Yoast、Rank Math同样是按内容类型(文章、页面、各种自定义类型)分组成一个index,并随你的增删改实时更新。 ## 产品页的进出场:上架、下架、缺货怎么处理 这是电商sitemap区别于一切内容站的命门。商品有生命周期,sitemap必须跟着这个生命周期同步进出,否则就是在给搜索引擎喂假地图。 分四种状态说: 商品状态 | 页面处理 | 是否进sitemap | 正常在售 | 200,正常索引 | 进,lastmod反映真实更新 | 临时缺货(会补货) | 保留页面200,标注缺货 + 推荐替代品 | 进,保持收录 | 永久下架(有替代品) | 301跳到最相关的在售品或分类 | 立刻移出 | 永久下架(无替代品) | 410 Gone(比404更明确) | 立刻移出 | 核心原则就一句:sitemap里只放你希望被收录的、返回200的活页面。一旦一个商品转成301或410,它必须在下一次sitemap更新时被剔除。如果你的sitemap还在列一堆301/410的URL,等于反复告诉Google“这条还在、快来爬”,浪费抓取预算不说,还显得整个站的地图不可信。 缺货是最容易拍脑袋的环节。很多人一缺货就把页面noindex或者直接404,这是大错。临时缺货的爆款,它积累的排名和外链是资产,补货后想再爬回来成本极高。正确做法是页面留着、保持200、保持在sitemap里,只在页面上诚实标注缺货并导流到替代品。永久下架才走301/410的决策树——这块的完整决策逻辑,保哥在Magento缺货下架SEO收尾那篇 (https://zhangwenbao.com/magento-2-out-of-stock-discontinued-product-seo-301-410-soft-404.html)里按状态机画过流程图,可以配合着看。 ## 变体URL到底进不进sitemap 回到变体爆炸的问题。一件商品几十个变体URL,进sitemap的原则取决于你的canonical策略: - 变体共用一个canonical(指向主商品页):只把那个canonical主URL放进sitemap,变体URL全部不进。这是绝大多数服装、配件类目的正解。 - 变体各自独立可索引(有独立搜索需求,比如不同容量的硬盘、不同型号的配件):每个变体作为独立canonical进sitemap,但前提是它们内容差异足够大、不会互相蚕食。 判断标准很简单:去搜一下用户是不是会针对这个变体单独搜索。“iPhone手机壳”是商品级搜索,颜色不用各自开页;“512GB移动硬盘”是变体级搜索,容量值得独立。sitemap是canonical决策的下游——你不该在sitemap里塞一堆被canonical指走的非规范URL,Google官方一贯建议sitemap里放的应该是你认可的规范URL。变体和分面页的边界(变体是单商品多SKU、分面是分类页筛选)别搞混,分面那一类URL的治理完全是另一套打法,见分面导航SEO治理那篇 (https://zhangwenbao.com/faceted-navigation-seo-crawl-budget-index-control.html)——简单说,分面筛选产生的URL基本不该进sitemap。 ## lastmod的诚实度——电商站最爱作弊的地方 lastmod是sitemap里唯一真正影响抓取调度的标签,也是电商站最容易作弊、且作弊代价最高的地方。 先说它的本意。Google的官方说明讲得很清楚:lastmod应该反映页面最后一次“重大更新”的时间,而不是版权年份这种鸡毛蒜皮的改动;而且Google只在这个值“持续且可验证地准确”时才会采信它。Bing那边说法几乎一样,强调lastmod要反映页面内容的真实修改时间,而不是sitemap文件本身的生成时间,并建议用ISO 8601时间戳来帮搜索引擎优先抓取真正更新过的页面。格式这块,sitemap协议要求用W3C Datetime格式,年月日或带时分秒都行。 电商站的作弊有两种典型姿势,都是自毁长城: - 每次重新生成sitemap就把所有lastmod刷成今天。很多自建脚本图省事这么干。后果是Google发现你“全站每天都在大更新”,但爬过来发现内容根本没动,几次之后直接判定你的lastmod不可信,整个站的lastmod信号全部作废——以后你真更新了它也不信。 - lastmod永远停在某个老日期不动。另一个极端,模板写死了从不更新。这样Google永远不知道你哪个商品改了价、换了描述、补了货,新鲜内容得不到优先抓取。 正确姿势是:lastmod跟着页面内容的实质变化走。商品改了标题、描述、主图、规格,更新lastmod;纯粹的库存数字抖动、价格小幅波动,可以不算重大更新(这个有争议,保守做法是价格变动也更新,毕竟价格是电商页的核心内容之一)。关键是“诚实”二字——你的lastmod要能被Google反复验证,它才会长期把它当回事。这和站内文章更新时间要带真实分秒、不能造假是同一个道理。 ## priority和changefreq:可以删掉的两个老古董 如果你的sitemap里还在认真填 ,可以停了。这两个标签是sitemap协议早期的设计,搜索引擎早就不看了。 Google在官方文档里明确写道:忽略priority和changefreq的值,这两个标签不会影响抓取或索引。Bing那篇博客里也是同样的话——changefreq和priority被Bing忽略,不影响内容如何被抓取或排名。连sitemap协议本身都把changefreq描述成“仅供参考的提示,不是命令”,priority也只是站内相对优先级、不影响跨站比较。 所以这两个字段的真实价值约等于零。留着不会扣分,但填它们花的时间,不如去把lastmod搞准。把工程精力放在真正有信号价值的地方,这是电商技术SEO的基本判断力。 ## 图片sitemap:被忽略的购物流量通道 电商站有一类被严重低估的sitemap:图片sitemap。商品图是电商的核心资产,而Google图片、Google购物、AI购物答案都极度依赖图片信号。一张图能不能被Google发现、能不能进图片搜索结果,图片sitemap是一条直通车。 XML sitemap是可扩展的,Google官方文档里就提到sitemap支持图片、视频、新闻等扩展数据。图片sitemap的做法是在每个URL条目下用 标签列出该页面的关键图片地址。对电商,这意味着你可以把每个商品页的主图、细节图、场景图都明确告诉Google,而不是指望它自己从HTML里扒。 几个电商专属的注意点: - 主图优先。一个商品几十张图,sitemap里突出主图和最具代表性的几张,不必把缩略图、UI图标都塞进去。 - 图片URL必须是可抓取的(别被robots.txt挡了,别要求登录)。 - 图片sitemap同样吃50000/50MB的上限,大站要分片。 - 图片改了(换了新主图)要更新对应页面的lastmod,让Google重新来取图。 这条通道做好了,等于在自然搜索和购物结果里多开了一个曝光面。很多电商把全部精力放在文字SEO上,图片sitemap一片空白,相当于守着金矿不挖。 ## 视频sitemap:有就用,没有别硬凑 如果你的商品页有真实的产品视频(开箱、演示、3D展示),视频sitemap同样值得做。它用 扩展告诉Google视频的标题、缩略图、时长、播放地址,能帮你进视频搜索和富媒体结果。 但别为了做而做。如果你的“视频”只是个自动播放的banner动图,或者全站就三五个视频,那这条投入产出比很低,把图片sitemap做扎实更划算。视频sitemap是锦上添花,不是必选项。 ## sitemap和抓取预算的联动 大站绕不开抓取预算这个词。Google分配给你站的抓取资源是有限的,几十万URL的电商站,如果让爬虫把预算浪费在301链、参数URL、分面组合、早就死掉的旧品上,真正该被频繁抓取的新品和爆款就轮不上。 sitemap在这里扮演的是“调度建议书”的角色。一份干净、准确、lastmod诚实的sitemap,相当于告诉Google:“这些是我所有该收录的活页面,这些是最近真的更新过的,优先来这里。”反过来,一份塞满死链、lastmod全是今天的脏sitemap,会让Google对你的全站调度信号产生怀疑,抓取效率不升反降。 所以sitemap治理和抓取预算优化是一体两面。把分面URL挡在sitemap外、把死品及时剔除、把lastmod喂准,本质都是在帮Google把有限的抓取预算花在刀刃上。这套组合拳的全貌,抓取预算优化2026那篇 (https://zhangwenbao.com/google-crawl-frequency-optimization-guide-2026.html)里有12项实操,sitemap是其中绕不开的一环。 ## GSC sitemap报告:submitted vs indexed的诊断打法 提交完sitemap不是结束,是诊断的开始。Search Console的sitemap报告里,每个sitemap文件都有“已发现URL数”,再配合“网页索引编制”报告,你能算出每一类内容的收录率。这是电商技术SEO最值钱的一块仪表盘。 典型的诊断场景: - 产品sitemap提交了5万、只收录了3万。那2万去哪了?大概率是重复内容、薄内容、被canonical指走、或者抓取预算不够。这时候分库的价值就出来了——你能精确定位是哪一批产品出了问题。 - 集合页收录率异常低。可能是集合页内容太薄(只有商品列表没有描述)、或者大量空集合页被收进了sitemap。 - 新品迟迟不收录。检查sitemap更新是否及时、lastmod是否正确、新品有没有内链支撑。 把submitted和indexed的缺口当成一个持续监控的指标,按内容类型分别看,比盯着全站一个笼统数字有用一百倍。这也是为什么前面反复强调要分库——不分库,这张仪表盘就是糊的。 ## 动态生成还是静态缓存:百万级sitemap的工程实现 到了百万URL量级,sitemap怎么生成本身就是个工程问题。两种路线: 动态实时生成——每次爬虫来请求sitemap,服务器现查数据库现拼XML。好处是永远最新,坏处是大站每次生成都要扫几十万行数据,爬虫一频繁请求就能把数据库拖垮。这条路只适合中小站。 静态预生成 + 增量更新——定时任务(比如每小时或每次商品状态变化时)把sitemap生成成静态XML文件存好,爬虫来直接读文件。大站标配。关键是增量:别每次全量重生成几十万条,而是只更新发生变化的那个子sitemap分片。这就是前面强调“单个子sitemap别贴着50000装满”的原因——留余量才好做增量。 两个工程细节: - 用gzip压缩。50MB是未压缩上限,但传输时可以gzip,大幅省带宽。Google支持读取 .xml.gz格式的sitemap。 - sitemap文件本身要能稳定访问。别放在会被CDN缓存到过期、或者偶尔500的路径上。爬虫几次拉不到sitemap,会降低对它的信任。 定时生成这类运维活,挂个cron就能自动化,不用人盯。具体怎么把sitemap生成、缓存清理、推送都交给定时任务,是另一个话题了,这里不展开。 ## 平台现实:Shopify、WooCommerce、Magento的默认行为 大部分人不是从零写sitemap,而是在平台默认行为上做改造。三大平台的现状: - Shopify:自动生成,按资源类型分子sitemap,超5000条自动再分片。优点是省心,缺点是几乎不给你控制权——你没法手动把某批URL排除出sitemap,也改不了分片逻辑。想精细控制只能靠app或在robots/canonical层面间接干预。 - WooCommerce(WordPress):靠插件,Yoast或Rank Math都自动生成index + 分类型子sitemap,并自动排除noindex页面。Yoast的说明 (https://yoast.com/what-is-an-xml-sitemap-and-why-should-you-have-one/)里讲到它会随内容增删改实时更新sitemap index和各子文件。可控性比Shopify高,能按内容类型开关。 - Magento:原生sitemap功能可配置度最高——能设分片大小、能控制图片是否包含、能调lastmod逻辑,适合大型复杂目录。代价是要自己懂得配,配错了一样出问题。 不管哪个平台,第一步都一样:去看一眼你站现在实际生成的sitemap到底长什么样。打开 yoursite.com/sitemap.xml,看它分了几个库、每个库多少条、lastmod是不是真的在动。八成你会发现一些意外——比如某批测试商品也在里面,或者下架了半年的品还赖着不走。 ## sitemap不是产品feed,别搞混 这是电商人最容易混淆的一对概念。XML sitemap和Google Merchant Center的产品feed是两个完全不同的东西,服务两套系统: | XML sitemap | 产品feed | 目的 | 告诉搜索引擎“我有哪些页面” | 告诉购物系统“我有哪些商品及其属性” | 消费方 | Google/Bing自然搜索爬虫 | Merchant Center、Google购物、AI购物 | 内容 | URL + lastmod | 价格、库存、GTIN、品牌、图片、规格等结构化属性 | 格式 | XML(sitemap协议) | XML/TSV/API(feed规范) | 简单说:sitemap管的是“页面被不被收录”,feed管的是“商品在购物和AI选品里露不露脸”。两者都要做,互不替代。很多人以为提交了sitemap,Google购物就有数据了,这是误会——购物系统读的是feed,不读你的XML sitemap。产品feed该谁管、怎么管、在AI购物时代为什么是核心资产,是另一个独立的大话题,和sitemap配合着看才完整。 ## sitemap之外:IndexNow这条实时通道 sitemap是被动的——你挂在那儿,等爬虫来读。对上架速度敏感的电商,光等不够,得有主动推送。IndexNow就是这条实时通道:商品一上架或更新,你的服务器立刻ping一下IndexNow API,把这条URL推给Bing(以及接入了IndexNow的其他引擎),通常24小时内就会被抓取。 前面提到的Bing那篇官方博客把sitemap和IndexNow定位成互补关系:sitemap保证覆盖的完整性,IndexNow保证更新的实时性。对电商,这个组合特别合适——大盘靠sitemap兜底,新品和促销变价靠IndexNow抢时效。需要提醒的是,IndexNow主要服务Bing和Yandex一系,Google至今没正式接入,所以Google那边还是得靠sitemap + 内链 + 抓取预算这套老办法。 ## 一份电商sitemap体检清单 把上面所有东西收成一张能直接照着跑的清单。拿你自己的站对照打钩: - ☐ 打开 /sitemap.xml,确认是index结构,且按内容类型分了库(产品/集合/页面/博客/图片) - ☐ 每个子sitemap的URL数都在50000以内,且留了余量(建议 ≤ 40000) - ☐ sitemap里没有任何301/404/410的URL,全是返回200的活页面 - ☐ 缺货商品(会补货的)保留在sitemap里,没有被误删或noindex - ☐ 永久下架商品已从sitemap移出,并配了301或410 - ☐ 变体URL的进出与canonical策略一致,没塞一堆非规范URL - ☐ lastmod跟着内容实质变化走,不是每天全刷成今天,也不是写死不动 - ☐ priority和changefreq不再花精力维护(删不删随意,别投入) - ☐ 有独立的图片sitemap,覆盖商品主图 - ☐ 大站用静态预生成 + 增量更新,且gzip压缩 - ☐ sitemap文件访问稳定(不被CDN缓存到过期、不偶发500) - ☐ Search Console里按sitemap分别监控submitted vs indexed收录率 - ☐ 区分清楚sitemap和产品feed,两套都在维护 - ☐ 上架/更新接了IndexNow实时推送(至少覆盖Bing) 这张清单里能打满钩的电商站,凤毛麟角。多数站卡在第三条(sitemap里全是死链)和第七条(lastmod造假)上。把这两条先修好,收录率往往就能肉眼可见地往上走。sitemap不是炫技的地方,它是地基——地基歪了,上面盖再多内容营销和外链都是事倍功半。 ## 常见问题解答 ## 小电商站(几百个商品)也需要这么折腾sitemap吗? 不需要全套。几百个商品,单个sitemap文件就装得下,平台默认生成的基本够用。你要做的只有三件事:确认sitemap里没有死链、确认新品能及时进去、提交到Search Console。分库、分片、增量生成这些是为几万、几十万URL准备的,小站上这套属于过度工程。但lastmod诚实和死链清理这两条,无论站多小都该做。 ## 下架的商品到底该从sitemap删掉,还是留着配301? 页面层面配301或410,但sitemap层面必须删掉。这是两回事:301/410是给那些已经收录了这条URL的爬虫和用户看的,告诉他们“这页搬走了/没了”;sitemap是你主动推荐去抓的清单,里面只该放活的200页面。一条URL一旦转成301/410,就立刻从sitemap移出,但301/410本身要在服务器层面长期保留。 ## 商品价格或库存每天变,lastmod要不要跟着每天更新? 有争议,保守做法是更新。价格是电商页面的核心内容,价格变了算得上实质变化。但要警惕一种情况:如果你的库存数字每分钟都在抖、你也每分钟刷lastmod,那Google会觉得这页变化太频繁反而不可信。折中方案是把lastmod的更新粒度定在“每天最多更新一次”,反映当天有没有发生过实质变化,而不是分钟级跟着库存跳。 ## 图片sitemap真的有用,还是又一个鸡肋功能? 对电商真有用,对内容站才鸡肋。电商的图片是商品本身,Google图片和购物结果带来的流量不容忽视,图片sitemap是让这些图被发现的明确信号。内容站的配图大多是装饰性的,做不做无所谓。判断标准就一条:你的图片本身是不是用户搜索和决策的对象——电商是,所以值得做。 ## 提交了sitemap,为什么很多URL还是不被收录? sitemap是“邀请”不是“命令”。它告诉Google这些页面存在、建议来抓,但收不收录是Google根据页面质量、重复度、抓取预算综合决定的。提交了不收录,八成是页面本身的问题:内容太薄、和别的页面重复、被canonical指走、或者整站抓取预算不够分给这些长尾页。这时候要去查“网页索引编制”报告里给出的具体原因,而不是反复重新提交sitemap——重新提交对收录率毫无帮助。 ## Shopify不让我控制sitemap,怎么排除不想被收录的页面? Shopify的sitemap确实改不了,但你可以从别的层面间接控制。想让某类页面不被收录,用 noindex 元标签或在主题里加robots控制——被noindex的页面虽然还在sitemap里,但Google会尊重noindex不收录它。想更彻底的,用第三方sitemap管理app接管生成逻辑。但说实话,多数情况下你想排除的页面(比如购物车、账户页)Shopify默认就没放进sitemap,真要操心的反而是别让该收录的页面被误noindex了。 ## 权威参考资料 ## 电商重复内容怎么治?8类成因地图加诊断与canonical全清单 - URL:https://zhangwenbao.com/ecommerce-duplicate-content-causes-diagnosis-canonical-strategy.html - 分类:电商SEO - 发布:2026-06-24 | 更新:2026-06-24 - 摘要:电商重复内容怎么治?讲清8类电商特有成因(变体、分面、集合页、分页、参数、样板描述、缺货、跨站),配site抽样加爬虫加GSC加相似度四步诊断、canonical与301和noindex决策树,以及Shopify、Woo、Magento三大平台默认行为。 - 关键词:canonical,电商SEO,重复内容,产品变体 > **TLDR**:摘要:电商网站几乎天生就是重复内容的重灾区,但根子不在“被Google惩罚”——Google官方早就说过,重复内容本身不是处罚项。真正的代价是权重稀释、抓取预算被白白烧掉、还有商品页之间自己跟自己抢排名。这篇把电商场景下产生重复的8类特有成因画成一张地图:产品变体、分面筛选、集合页交叉、分页排序、参数噪音、厂商样板描述、缺货跳转、跨站跨区,每一类都给出怎么诊断、怎么治理。再配上四步诊断工具箱、一棵“合并还是拆分还是拦截”的决策树,以及Shopify、WooCommerce、Magento三大平台的默认行为。读完你能拿着清单,把自己站里那些悄悄漏水的重复URL一个个堵上。 > 摘要:电商网站几乎天生就是重复内容的重灾区,但根子不在“被Google惩罚”——Google官方早就说过,重复内容本身不是处罚项。真正的代价是权重稀释、抓取预算被白白烧掉、还有商品页之间自己跟自己抢排名。这篇把电商场景下产生重复的8类特有成因画成一张地图:产品变体、分面筛选、集合页交叉、分页排序、参数噪音、厂商样板描述、缺货跳转、跨站跨区,每一类都给出怎么诊断、怎么治理。再配上四步诊断工具箱、一棵“合并还是拆分还是拦截”的决策树,以及Shopify、WooCommerce、Magento三大平台的默认行为。读完你能拿着清单,把自己站里那些悄悄漏水的重复URL一个个堵上。 ## 先把话说清楚:电商重复内容不是惩罚,是慢性失血 每次有客户火急火燎找保哥,说“我的站重复内容太多,是不是被Google降权了”,我都得先给他降降温。重复内容在绝大多数情况下不是一项处罚。Google官方的合并重复网址文档讲得很直白:站点上存在一些重复内容是正常的,并不违反垃圾内容政策,Google会通过去重,在搜索结果里只挑一个版本展示出来。真正会触发处罚的,是抄别人的内容原样发布、或者搬运后不加任何附加价值这种行为。 所以电商站的重复内容,更像一种慢性失血,而不是一刀致命。它的代价藏在三个地方:一是权重稀释,同一个商品被切成五六条URL,外链和点击信号也被摊薄到每一条上,没有哪一条够强;二是抓取预算被浪费,爬虫忙着抓一堆几乎一样的页面,真正重要的新品和热销款反而排队等着被抓;三是自相蚕食,几条近乎雷同的页面在同一个词上互相压制,谁也排不上去。 重复内容的通用机制和六类排查,站内有一篇重复内容SEO怎么治 (https://zhangwenbao.com/content-duplicate-issue.html)已经讲透了同域、跨域、参数变体的底层逻辑。这篇不重复那些,只钻进电商这个特殊场景——为什么一个卖货的站,天生就比博客更容易长出重复内容。 ## 电商为什么天生重复成灾?三个结构性原因 博客是一篇文章一条URL,结构干净。电商完全是另一套逻辑,它从娘胎里就带着三个会冒重复的基因。 第一,一个商品天然有多个“状态”。同一件T恤,有红色、蓝色、S码、XL码,还能从首页进、从分类进、从搜索进、从某个促销集合进。每一种状态、每一条进入路径,平台都可能给它生成一条不同的URL,内容却八九不离十。 第二,平台会自动生成海量URL。你点一下筛选、换一种排序、翻一页、改一次每页显示数量,系统就在地址后面接一串参数,吐出一条新URL。这些动作组合起来,一个分类页能裂变成成百上千条地址。 第三,批量上架逼着你用样板文案。一个站几千个SKU,没人有精力给每个产品写独一无二的描述,结果就是大段大段地抄原厂文案、或者用一个模板套着填,几百个产品页的正文相似度高得吓人。这几个基因决定了:电商站的重复内容治理,不是“出了问题再修”,而是从建站第一天就要规划的工程。 ## 成因地图:8类电商特有的重复内容(先看全景) 把保哥这些年在出海独立站上踩过、修过的重复内容归一归类,电商场景下基本逃不出这8类。先用一张表看清全景,后面再一类一类拆。 成因 | 典型表现 | 主要危害 | 首选治理手法 | 1产品变体 | 同款多颜色多尺码各一条URL | 互相蚕食、权重稀释 | canonical收口到父,少数拆独立 | 2分面筛选 | ?color=red&size=l海量参数URL | 抓取预算爆炸 | noindex或参数拦截,按需求放行 | 3集合页交叉 | 一批商品挂在多个集合里 | 分类页互相重复 | 差异化集合内容,弱集合noindex | 4分页排序 | ?page=2、?sort=price近似页 | 稀释、抓取浪费 | 自引用canonical,价值低的noindex | 5参数噪音 | session、UTM、打印版、大小写 | 同一页N个地址 | 统一规范URL,canonical收口 | 6厂商样板描述 | 几百页抄同一段原厂文案 | 薄内容、被判低质 | 重写正文,补独特价值 | 7缺货下架 | 软404、旧URL残留空壳页 | 抓取垃圾、信号混乱 | 301或410,状态管理 | 8跨站跨区 | 多店多语言自己打自己 | 跨域重复、被抄袭 | hreflang、跨域canonical | 这8类不是平均用力的。按实战经验,真正烧抓取预算、最容易失控的是前两类——变体和分面;最伤内容质量、最容易被算法判低质的是第六类样板描述。下面挨个拆。 ## 成因一:产品变体——同一商品几十个URL互相蚕食 这是电商重复内容的头号源头。一件冲锋衣,5个颜色乘以4个尺码,就是20个变体;如果平台给每个变体配一条独立URL,你就有了20个内容几乎一模一样、只有色号尺码不同的页面。它们用的关键词高度重叠,于是在“男士冲锋衣”这种词上自己跟自己打,谁也排不上去。 处理变体的核心原则是按搜索需求分两堆。绝大多数变体(比如同款的不同尺码)没有独立的搜索量,就把它们的canonical统一收口到父商品页,让权重往一处汇。少数变体如果确实有人专门搜(比如某个爆款的特定配色),并且你能给它补上独特的内容,才值得拆成独立着陆页。这个“该合还是该拆”的完整判断,站内有一篇产品变体SEO怎么做 (https://zhangwenbao.com/product-variant-seo-url-canonical-indexation-strategy.html)专门讲了三种URL形态和决策树,这里就不展开了。记住一句话:变体URL默认收口,例外才独立。 ## 成因二:分面筛选——一个分类页裂变成上千个URL 分面导航就是商品列表左边那一排筛选器:颜色、尺码、价格区间、品牌、材质。用户体验上它是好东西,SEO上它是个无底洞。每勾选一个筛选条件,系统就往URL后面接一串参数,几个维度自由组合下来,一个分类页能炸出几千甚至上万条参数URL,内容彼此高度重叠。 Ahrefs在他们的重复内容指南 (https://ahrefs.com/blog/duplicate-content/)里直接点名:分面导航实现得不好,会在电商站上生成成百上千页的重复内容;文章还援引Google的Gary Illyes的说法,约60%的互联网内容本就是重复的——重复是常态,关键看你管不管得住。分面的治理思路是默认拦截、按需放行:绝大多数参数组合用noindex或robots参数规则挡在索引之外,只把真正有搜索量的组合(比如“红色连衣裙”这种本身就是热门词的)放出来做成可索引的着陆页。完整的抓取预算保护打法,站内那篇分面导航的SEO怎么治理 (https://zhangwenbao.com/faceted-navigation-seo-crawl-budget-index-control.html)讲得很细。 ## 成因三:集合页与分类交叉——同一批商品挂在好几个集合里 这是Shopify店主特别容易忽略的一类。同一批商品,你可能既挂在“新品上架”集合、又挂在“夏季热卖”集合、还挂在“满199包邮”集合里。这几个集合页列出来的商品高度重叠,标题和描述如果再偷懒套模板,三个页面在Google眼里就是三个近似重复页。 治理的关键是给每个集合页一个存在的理由。如果“夏季热卖”和“新品上架”商品几乎一样、文案也雷同,那其中价值低的那个就该noindex掉,别让它跟主力分类页抢。如果你想保留多个集合,就得给每个集合页写不同的导语、不同的选购建议、不同的内链结构,让它们各自承接不同的搜索意图。集合页本身的机制和冷启动,可以参考站内的电商类目页优化思路,这里强调一点:集合不是越多越好,每多一个空泛重复的集合,就多一处漏水点。 ## 成因四:分页与排序——?page=2和?sort=price制造的近似页 商品多了就得分页,于是有了?page=2、?page=3;用户想换个看法就排序,于是有了?sort=price、?sort=newest。这些URL列出的商品集合彼此重叠,正文模板又完全一样,是典型的近似重复。 排序参数的处理相对简单:?sort=这类只是换了个排列顺序、内容没有实质变化的页面,统一用canonical指回不带参数的默认版本就行。分页要稍微讲究一点——曾经Google建议用rel=“next”/rel=“prev”标注分页关系,后来官方明确说这套标记已经不再使用了。现在主流做法是:每个分页用自引用canonical(第二页的canonical就指向第二页自己,而不是第一页),让Google把每页当成独立可发现的内容入口去抓取,同时确保每个商品在某一页里能被爬到;价值特别低、纯粹是翻页噪音的,可以noindex但保留follow,让权重还能往下流。 ## 成因五:参数噪音——session、UTM、打印版、大小写、斜杠 除了筛选和排序,电商站还有一大堆“噪音参数”会凭空生出重复URL。最常见的几种:会话ID(老旧系统会在URL里塞一段sessionid)、营销追踪参数(UTM、广告平台的点击ID)、打印版页面、甚至同一个地址因为大小写不同(/Shoes和/shoes)、结尾斜杠有无(/shoes和/shoes/)、http和https混用,都会被当成不同的URL。 Semrush在他们的重复内容指南 (https://www.semrush.com/blog/duplicate-content/)里把这类参数URL列为重复内容的主要来源之一,并给出标准解法:能不生成就不生成,必须生成的就用canonical收口到那条干净的规范URL。这里要特别提醒一句——给站内链接加UTM参数是个常见的自残操作,会平白制造重复URL还污染流量分析,内链该用干净地址。把全站统一到一套规范URL(统一小写、统一斜杠、强制https、规范参数顺序),是治理参数噪音的地基。 ## 成因六:厂商样板描述——几百个产品页抄同一段原厂文案 这一类不制造多余URL,但它制造的是更危险的“薄内容”。出海卖标品的独立站尤其容易中招:供应商给一份产品资料,你几百个SKU直接把原厂那段描述复制粘贴上去,于是几百个产品页的正文相似度奇高,而且这段文案很可能在全网几十个卖同款的站上一字不差地出现。 Yoast在7个常见的电商技术SEO错误 (https://yoast.com/seven-ecommerce-seo-mistakes/)里把这类薄而重复的产品描述列为典型坑。它的危害不在于“被罚”,而在于你的页面没有任何独特价值,Google没理由把你这条排到那几十个同款页前面。更别说主体内容占比也是个信号——如果产品页正文就那么两句套话,剩下全是导航、推荐、页脚这些模板件,整页的主体内容占比太低,质量评估直接吃亏(这个稀释机制站内有专文讲过)。解法没有捷径:把高价值、高流量的核心产品先重写,加上真实的使用场景、选购建议、参数解读、常见问题,让正文有血有肉;长尾低流量的SKU可以批量优化,但至少要做到不跟全网雷同。 ## 成因七:缺货下架与跳转——软404和旧URL残留的空壳重复 电商商品有生命周期,上架、缺货、永久下架,每一次状态变化都可能留下重复或垃圾URL。最常见的坑是软404:商品下架了,页面还在,只是正文变成一句“该商品已下架”,几百个下架商品就是几百个内容雷同的空壳页,既浪费抓取又是一堆近似重复。 处理思路要按状态分清楚:临时缺货、以后还会补货的,页面保留、保持可索引,把库存状态如实标出来就行;永久下架、不再卖了的,如果有合适的替代品或上级分类,就301跳过去把权重接住,如果没有任何替代、就是要彻底删除,那就返回410让Google尽快移除。最忌讳的是一刀切——要么全删(权重全丢),要么全留(攒一堆空壳)。商品的进出场是一套需要规则的工程。 ## 成因八:跨站跨区重复——多店多语言自己跟自己打 做大了的出海品牌常踩这一类。同一套货,你开了美国站、英国站、澳洲站,三个站都是英文,商品描述几乎一样,Google一看:这不就是同一批内容挂在三个域名上吗?三个站于是在同一个词上互相稀释。还有一种是被动重复——你的原创产品描述被竞品或铺货站原样抄走,全网出现好多份。 同语言多地区站的解法是hreflang,明确告诉Google每个地区版本服务哪个市场,让它在对应市场展示对应版本,而不是把它们当重复内容去重。跨域的合法内容同步(比如你授权某个分销站转载),可以用跨域canonical指回原始来源。至于被抄,先把自己的原创性信号做扎实(首发时间、结构化数据、内链权重),让Google有足够依据判断谁是正主。 ## 诊断工具箱:四步把站里的重复揪出来 知道了8类成因,接下来是动手把自己站里的重复一个个找出来。保哥常用的是这套四步诊断法,不用买贵工具也能跑起来。 第一步,site:抽样。用site:yourdomain.com配合inurl:参数名(比如inurl:sort=、inurl:sessionid),快速看Google到底收录了多少带噪音参数的URL,心里先有个量级。注意site:出来的数字只是估算,当趋势看别当真账。 第二步,爬虫按参数分组。用Screaming Frog这类工具全站爬一遍,按URL参数、按页面标题、按内容相似度分组,哪些URL扎堆、哪些标题完全重复,一目了然。这是定位重复最直接的手段。 第三步,GSC收录率核对。打开Search Console的“页面”报告,重点看“重复,Google选择的规范网址与用户不同”和“备用网页(有适当的规范标记)”这两类——前者说明Google不认你指定的canonical、自己选了别的,是重灾信号;后者是canonical正常生效。 第四步,相似度比对。把疑似重复的产品描述拿去做文本相似度计算,量化到底有多像。站内有一篇电商SEO语义优化实战 (https://zhangwenbao.com/cosine-similarity-ecommerce-seo-semantic-optimization.html)讲了用余弦相似度压商品蚕食的8种应用,把“看着像”变成可量化的分数,特别适合大批量SKU的体检。四步跑下来,一张“重复URL清单”就出来了,按成因归类,对照前面的治理手法挨个处理。 ## 治理决策树:合并、拆分,还是拦截? 找出重复之后,每一处都要做一个三选一的决策:合并、拆分、还是拦截。可以用一棵简单的决策树来判断。 先问第一个问题:这个页面有没有独立的搜索需求?没有——直接收口或拦截,往下走合并路线;有,并且你能补上独特价值——那就拆成独立可索引的着陆页,认真做内容。合并路线再细分:如果是同一个内容的不同地址(参数、大小写、变体),用canonical收口到规范版本,这是“软合并”,权重汇聚但页面还在;如果是旧URL要彻底让位给新URL,用301硬跳转;如果是纯噪音、根本不该被收录的(无限的筛选组合、打印版),用noindex或robots参数规则拦在索引外。 四件套各管各的:canonical管“这几条是同一个东西,请认这一条”;301管“这条永久搬到那条了”;noindex管“这条别收录但可以爬”;robots/参数处理管“这类URL干脆别爬”。选错工具会出乱子——比如对要彻底删除的页面用canonical而不是410,Google可能还会留着它;对临时缺货页用noindex,补货后又忘了撤,白白丢掉一个能排名的页。先想清楚这一处属于哪种情况,再下手。 ## canonical到底能不能信?它是建议,不是命令 很多人把canonical当成开关,以为加上去Google就一定听。这是最大的误解。Google的官方文档 (https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)白纸黑字写着:指定规范网址只是一个强烈的暗示,而不是强制规则,Google会综合多种信号自己决定最终的规范版本。Ahrefs甚至统计过,Google判断规范版本用了大约40个信号,你的canonical标记只是其中之一。 所以才会出现GSC里那个让人抓狂的提示——“重复,Google选择的规范网址与用户不同”。这通常意味着你的信号给得自相矛盾:canonical指向A,内链却大量指向B,sitemap里放的又是C,Google一看你自己都没拿定主意,干脆按它的判断来。治理的关键是让所有信号一致:canonical、内链、sitemap、301,全都指向同一个你想要的规范版本,别给Google留下“二选一”的空间。顺便说一句,rel=canonical并不是什么新发明,它早在2009年2月就由Google、Yahoo和微软共同宣布支持 (https://en.wikipedia.org/wiki/Canonical_link_element),是个用了十几年的成熟机制,用对了非常可靠,关键在于别发出互相打架的信号。 ## 三大平台的默认行为:Shopify、WooCommerce、Magento 治理重复内容,得先搞清楚你用的平台默认帮你做了什么、又留了什么坑。 Shopify相对省心。Shopify官方关于修复重复内容的指南 (https://www.shopify.com/blog/duplicate-content)说明:Shopify主题自带canonical,会自动把变体、把从集合进入的商品URL(/collections/xxx/products/yyy)规范化到主产品页(/products/yyy)。坑在于:如果你换了个不规范的第三方主题,或者装了某些会改canonical的App,这套默认机制可能被破坏,得手动检查、必要时用metafield覆盖。 WooCommerce默认不给变体生成独立URL(变体靠下拉选择,URL不变),这点天然规避了变体重复;但它的分类、标签、属性归档页很容易交叉重复,分页和参数也需要靠Yoast这类插件来管canonical。 Magento最灵活也最容易出事。它的configurable product(可配置商品)底层是一堆simple product,配置不当会把底层的simple product URL也暴露出来,制造变体重复;好在Magento后台对canonical、对URL重写的控制粒度是三家里最细的,配得好能压得很干净,配不好就是重复内容的温床。一句话:平台默认只是起点,每个平台都有它专属的那几个雷,得对着排查。 ## AI搜索时代:重复内容怎么拖垮你的AI可见度 过去说重复内容,主要是担心传统排名被稀释。到了AI搜索时代,这事的权重更高了。AI概览、AI购物这类功能,是从已经被索引的网页里整块召回内容、再判断引用谁。如果你的商品信息被切成一堆重复的薄页,每一条都不完整、不权威,AI在挑“引用哪个版本”时就很难选中你;而那个被Google判为规范版本、内容最完整的页面,才是AI优先看的那一个。 更现实的一点是信息增益。AI更愿意引用能提供新信息的内容。如果你几百个产品页都是同一段原厂文案,信息增益约等于零,AI凭什么从全网几十个一模一样的页面里挑你?所以治理重复、把内容做出独特价值,在AI时代不是锦上添花,是能不能被AI看见的地基。收口规范版本、消灭样板描述这两件事,等于同时在为传统SEO和AI可见度打底。 ## 实战复盘:户外储能站三千SKU的重复内容治理 去年保哥手上有个做户外储能和便携电源的出海独立站,Magento建的,三千多个SKU,自然流量卡了大半年不涨。爬虫一爬,问题全暴露了:分面筛选炸出了将近两万条参数URL被收录,占了抓取量的一大半;产品描述清一色复制供应商资料,相似度普遍在85%以上;还有几百个停产型号的页面没处理,全是软404空壳。 治理分了三刀。第一刀砍分面:把没有搜索量的参数组合全部noindex,只放行“便携电源+容量段”这种本身有人搜的组合做成着陆页,两万条参数URL两周内收录量掉到三千以内,抓取预算一下子腾出来了。第二刀重写描述:先挑出贡献八成流量的两百个核心SKU,逐个补上真实的使用场景(露营、应急、自驾)、容量换算、充电时长、常见问题,把相似度从85%压到40%以下。第三刀清场:停产型号有替代款的301到替代款,彻底没了的返回410。三刀下去,三个月后核心款的收录从两周缩到三天,自然流量重新爬坡。这个案例最大的体会是:重复内容治理不是修修补补,是腾地方——把爬虫和权重从一堆垃圾URL上解放出来,还给真正能赚钱的页面。 ## 建一套监测节奏:重复内容会反复长出来 这里要泼一盆冷水:重复内容治理不是一锤子买卖。电商站每天都在上新品、改分类、加促销、下架旧款,每一个动作都可能悄悄长出新的重复URL。今天清干净了,下个月运营加了几个新集合、技术上线了一版带新参数的筛选器,重复又冒出来了。所以治理之后必须配一套监测节奏,否则等于白做。 落地的监测节奏可以分三档:每月扫一遍GSC的页面报告,盯死“重复,Google选择的规范网址与用户不同”这一类的数量有没有异常上涨——这是最灵敏的预警灯;每季度用爬虫全站爬一次,按参数和标题分组,看有没有新的URL扎堆;每次大改之后(换主题、上新筛选器、批量导商品、迁移平台)必须立刻补一次专项检查,因为大改最容易一次性炸出一批重复。把这套节奏写进运营和技术的SOP里,重复内容才不会卷土重来。一句行话送给你:重复内容像院子里的杂草,拔一次不算完,得定期巡。 ## 五个常见误区 最后把见得最多的五个误区列一下,对照着别踩。 误区一:以为重复内容会被Google罚。不会。它的代价是稀释和浪费,不是处罚(抄袭和无附加价值的搬运除外)。把焦虑放对地方,重点是省抓取、聚权重,而不是怕被罚。 误区二:加了canonical就万事大吉。canonical是暗示不是命令。如果内链、sitemap跟canonical指的不是同一个地方,Google会自己选,你的标记等于白加。 误区三:变体一律拆独立URL,觉得页面越多越好。恰恰相反,绝大多数变体没有独立搜索量,拆开只会互相蚕食。默认收口,例外才拆。 误区四:用robots.txt屏蔽来解决重复。robots.txt只是不让爬,被屏蔽的页面如果已经被收录、或者有外链指过来,照样可能留在索引里,而且因为爬不到,连canonical信号都传不进去。该用noindex或canonical的场合,别用robots挡。 误区五:只盯着技术URL,忽略内容重复。样板描述这种内容层面的重复,URL再干净也救不了。两条腿都要走:URL层面收口规范化,内容层面做出独特价值。 ## 常见问题解答 ## 电商网站有重复内容,会被Google降权吗? 一般不会。Google官方明确表示,站点上有一些重复内容是正常的,本身不违反垃圾内容政策,Google会通过去重在结果里只展示一个版本。真正会招致处罚的是抄袭别站内容、或搬运后不加任何附加价值。电商重复内容的实际代价是权重稀释、抓取预算浪费和商品页自相蚕食,而不是降权处罚。 ## 产品变体应该每个都做独立URL吗? 绝大多数不应该。同款的不同尺码、颜色通常没有独立的搜索需求,做成独立URL只会让它们在相同关键词上互相蚕食。默认做法是把变体的canonical统一收口到父商品页;只有当某个变体确实有人专门搜、并且你能给它补上独特内容时,才值得拆成独立着陆页。 ## 分面筛选产生的海量URL该怎么处理? 默认拦截、按需放行。绝大多数筛选参数组合用noindex或robots参数规则挡在索引外,避免抓取预算被炸光;只把本身有搜索量的组合(比如“红色连衣裙”)放出来做成可索引的着陆页。核心是别让无限的参数组合自由进入索引。 ## canonical标签Google一定会遵守吗? 不一定。canonical只是一个强烈的暗示,不是强制命令,Google会综合大约40个信号自己决定最终的规范版本。如果你的内链、sitemap、301指向跟canonical不一致,Google很可能选一个跟你指定的不同的版本,这就是GSC里“Google选择的规范网址与用户不同”的由来。让所有信号保持一致才靠谱。 ## 商品下架后页面应该删除还是保留? 看情况。临时缺货、以后还补货的,保留页面、保持可索引,如实标注库存状态即可;永久下架且有合适替代品或上级分类的,用301跳转把权重接住;彻底删除、没有任何替代的,返回410让Google尽快移除。最该避免的是留着一堆“该商品已下架”的软404空壳页。 ## Shopify会自动处理重复内容吗? 会处理一部分。Shopify主题自带canonical,会自动把变体和从集合进入的商品URL规范化到主产品页。但如果你用了不规范的第三方主题,或装了会改canonical的App,这套默认机制可能被破坏,需要手动检查、必要时用metafield覆盖。平台默认只是起点,不能完全甩手。 ## 权威参考资料 ## 分面导航的SEO怎么治理?筛选过滤产生的海量URL别拖垮抓取预算 - URL:https://zhangwenbao.com/faceted-navigation-seo-crawl-budget-index-control.html - 分类:电商SEO - 发布:2026-06-16 | 更新:2026-06-16 - 摘要:电商独立站分面导航怎么不拖垮SEO?本文拆解组合爆炸的四笔账,逐个讲清canonical收权重却不省抓取、noindex挡索引挡不住抓取、robots先noindex再Disallow的顺序坑,给出按搜索需求处置每类facet的决策树,并讲Shopify/Woo/Magento落地与验证。 - 关键词:电商SEO,抓取预算,Faceted Navigation,分面导航,URL参数 > **TLDR**:摘要:分面导航是电商独立站最实用的功能之一,让用户在分类页上叠加颜色、尺寸、价格、品牌等筛选条件快速找货。但同一套筛选器在URL层面能生出成千上万、甚至上百万个近重复地址,这些地址会悄悄吃光抓取预算、撑爆索引、把内链权重稀释到一堆没人搜的组合页上。治理的核心不是一上来就堵,而是先用搜索需求把筛选分成值得索引和纯属噪声两堆,再针对性地用canonical、noindex、robots.txt和AJAX各管一段。这篇把分面导航为什么是SEO黑洞、每件治理工具到底能干嘛不能干嘛、一棵可以照着走的决策树,连同平台落地和验证方法一次讲透。 > 摘要:分面导航是电商独立站最实用的功能之一,让用户在分类页上叠加颜色、尺寸、价格、品牌等筛选条件快速找货。但同一套筛选器在URL层面能生出成千上万、甚至上百万个近重复地址,这些地址会悄悄吃光抓取预算、撑爆索引、把内链权重稀释到一堆没人搜的组合页上。治理的核心不是一上来就堵,而是先用搜索需求把筛选分成值得索引和纯属噪声两堆,再针对性地用canonical、noindex、robots.txt和AJAX各管一段。这篇把分面导航为什么是SEO黑洞、每件治理工具到底能干嘛不能干嘛、一棵可以照着走的决策树,连同平台落地和验证方法一次讲透。 ## 先把话说清楚:分面导航到底是什么 很多人把分面导航(faceted navigation)和普通的分类导航混为一谈,其实差得挺远。分类导航是单一维度的层级,比如“男装 → 上衣 → T恤”,一条路走到底;分面导航是多维度的叠加筛选,用户进了“跑鞋”分类页之后,还能同时勾选“红色 + 42码 + 300元以下 + Nike品牌”,每勾一个条件,列表就实时收窄一次。 按维基百科对分面搜索(faceted search)的定义 (https://en.wikipedia.org/wiki/Faceted_search),它的本质是把每个信息元素沿着多个互相独立的维度(也就是facet)分类,让用户能从任意维度的任意组合去访问内容,而不是被困在一条预先定好的单一目录顺序里。对用户体验来说这是好事,找货效率高;可一旦这些筛选状态被写进URL,麻烦就来了。 说人话:分面导航是给用户用的放大镜,问题是这台放大镜每照一个角度,都顺手在你网站上多生了一个网页地址。用户只看到一个收窄后的列表,搜索引擎看到的却是一个不断膨胀的URL宇宙。 ## 一组筛选能生出多少URL?先算笔账 组合数学在这里是会咬人的。假设一个分类页挂了5个筛选维度,每个维度平均5个可选值,光是“选或不选 + 选哪个”的组合,理论上就能逼近几千个变体;维度再多一点、值再丰富一点,配合排序方式(按价格、按销量、按上新)和分页(第1页、第2页……),URL总量轻松冲到几万、几十万。 Ahrefs在分面导航的SEO指南 (https://ahrefs.com/blog/faceted-navigation/)里把这件事说得很直白:分面导航会制造出“近乎无限数量的筛选组合和可索引URL”。这不是夸张修辞,而是大型目录站的日常——一个三五万SKU的独立站,分面导航生成的URL比真实产品页多出一两个数量级,是很常见的事。 更阴险的是,这些地址里绝大多数是近重复内容:红色42码的跑鞋页和红色41码的跑鞋页,正文骨架、模板、推荐位几乎一模一样,只有列表里的几个商品略有出入。搜索引擎得真的去抓一遍才知道“哦,又是一个差不多的”。这一抓,就是真金白银的成本。 ## 这些URL为什么是SEO黑洞:四笔账 分面导航失控,损失不是单一的,而是四笔账一起亏: - 抓取预算被吞:Googlebot把时间花在抓成千上万个近重复的筛选页上,留给新品页、博客文章的抓取份额就少了,新内容收录变慢。Oncrawl在规模化治理分面导航的文章 (https://www.oncrawl.com/technical-seo/managing-faceted-navigation-scale/)里打的比方很到位:如果Googlebot忙着抓你男鞋分类那上千个几乎一样的版本,它就可能错过你刚上架的新品。 - 重复与近重复内容:海量相似页面摊薄了主分类页的排名信号,本该集中在一个权威页上的权重,被分散到一堆变体上。 - 索引膨胀(index bloat):低质筛选页被收录后,整站在Google眼里的“平均内容质量”被拉低,这对站点级的质量评估不是好事。 - 内链权益稀释:每个筛选链接都是一条内链,它们把PageRank一层层导向没有搜索价值的组合页,真正该被喂权重的产品页和主分类页反而饿着。这一点和关键词蚕食的处置逻辑 (https://zhangwenbao.com/keyword-cannibalization-content-site-diagnosis-consolidation.html)是同源的——内部互相抢食,谁也排不上去。 把这四笔账叠起来,你就明白为什么技术SEO老手看到一个没治理的分面导航会眉头一皱:它不是某一处的小毛病,而是从抓取、索引到权重分配的整条链路都在漏。Search Engine Land在分面导航SEO最佳实践指南 (https://searchengineland.com/guide/faceted-navigation)里也把这些问题归成一类系统性风险——孤立地补某一处,往往按下葫芦浮起瓢,得当成一套组合拳来打。 ## URL长什么样,决定了治理难度 分面状态写进URL,主要有三种形态,治理手法各不相同: 形态 | 例子 | 抓取行为 | 治理要点 | 查询参数 | /shoes?color=red&size=42 | 会被抓取和索引 | 主流形态,靠robots/canonical/参数规范治理 | 路径静态化 | /shoes/red/42/ | 会被抓取和索引 | 看着干净,但组合一多更难控,需严格白名单 | URL片段 | /shoes#color=red | 井号后内容不参与抓取 | 天然不产生新可抓URL,但对可索引着陆页不友好 | 这里有个常被忽略的细节:Google官方在管理分面导航URL抓取的文档 (https://developers.google.com/search/docs/crawling-indexing/crawling-managing-faceted-navigation)里明确说,搜索引擎一般不抓取URL里井号(#)后面的内容,所以如果你的筛选机制是基于片段实现的,它对抓取既没有正面也没有负面影响。Oncrawl也确认了同一点:Googlebot会忽略 # 之后的一切。换句话说,片段式筛选是“对搜索引擎隐身”的——好处是不污染抓取,坏处是这些组合永远成不了能带流量的着陆页。 另外,Google还提醒:URL参数请老老实实用行业标准的 & 做分隔符,别用逗号、分号或方括号,那些字符爬虫很难识别成参数边界,容易把URL解析乱。这种地基级的规范,比你后面堆多少canonical都重要。 ## 第一步不是技术,是搜索需求 治理分面导航,最容易犯的错是上来就一刀切——要么全堵,把有价值的着陆页也误伤了;要么全放,让垃圾组合泛滥。正确的起手式是先问一个问题:这个筛选组合,有人真的在搜吗? 判断标准很朴素: - “红色连衣裙”“防水登山鞋”“1000瓦便携储能电源”这类有明确搜索量的组合,是宝贝,应该被索引,甚至单独做成优化过的着陆页去抢长尾流量。 - “红色 + 42码 + 周二上新 + 按价格倒序 + 第7页”这种没人会搜的多重叠加,是噪声,应该被挡在索引之外。 怎么验证有没有需求?用关键词工具拉一遍筛选维度的组合词,看搜索量;再翻Google Search Console的效果报告,看哪些筛选页已经在拿展示和点击。有数据支撑的留下、放大,没数据的果断屏蔽。这一步做对了,后面的技术动作才有的放矢,否则就是凭感觉乱堵。 保哥给出海客户做技术SEO诊断时,几乎每次都要先拉这张“筛选组合vs搜索需求”的对照表,因为它直接决定了哪些URL该进白名单、哪些该进黑名单,是整个治理方案的地基。 ## 动手前先盘一次家底:你的筛选到底生成了什么 按搜索需求分堆的前提,是你得先知道自己到底有多少堆。现实里太多站连自家筛选生成了几种参数、铺出多少个URL都没数过,就照搬别人的robots规则,结果要么没堵住、要么误伤了有价值的页。动手治理前,花半天做一次家底盘点,能省掉后面一大堆返工。 盘点分三步走: - 第一步,爬一遍全站。用Screaming Frog、Sitebulb这类爬虫工具按URL参数分组,看每个参数(color、size、sort、page等)各生成了多少地址、抓取深度有多深。这一步能直观揪出哪个维度是URL膨胀的元凶——往往就是那一两个被忽视的筛选项在疯狂造页。 - 第二步,翻服务器日志。统计Googlebot实际在抓哪些参数URL、频率多高。爬虫工具告诉你“理论上铺了多少”,日志告诉你“Google实际在浪费多少”,两者一对照,轻重缓急立刻清晰。 - 第三步,列一张facet清单。把每个筛选维度、它的取值数量、有没有搜索需求、当前URL形态、当前是否被索引,逐行填进一张表。这张表就是你后面决定下canonical、noindex还是Disallow的作业本。 没有这张家底表,治理就是盲人摸象,改完也说不清动了什么;有了它,每个动作都有据可依、可回溯。这半天投入,是分面治理里性价比最高的一步,别省。 ## 治理工具箱之一:canonical能干嘛,不能干嘛 rel=“canonical” 是最常被误用的工具。它的作用是告诉搜索引擎“这些近重复页面里,请把权重和排名归到我指定的那个主页面上”。对于排序变体、轻微的参数差异,让筛选页canonical指回干净的主分类页,确实能把重复内容的权重收拢回去。 但请记住它的天花板:canonical是一个提示而非指令,而且它根本不省抓取预算。搜索引擎要先抓到这个页面、读到canonical标签,才知道“哦这是个副本”——抓取的成本一分没省。所以canonical适合解决“权重稀释”,对解决“抓取浪费”几乎无能为力。把这两个问题混为一谈,是分面治理翻车的头号原因。 ## 治理工具箱之二:noindex挡得住索引,挡不住抓取 noindex这个meta标签(或HTTP头)告诉搜索引擎“别把这个页面收进索引”。它比canonical更强硬,能把已经被收录的低质筛选页慢慢挤出索引。 可它和canonical共享同一个软肋。Botify在分面导航最佳实践 (https://www.botify.com/blog/faceted-navigation-best-practices-seo-tips)里一句话点破:noindex标签发出的信号是不要索引这个页面,但它不阻止爬虫抓取这个页面,所以它解决不了抓取预算浪费的问题。爬虫还得先抓进来,才能读到那句“别索引我”。 所以noindex的正确定位是:当某些筛选页确实需要被爬虫发现并传递一点内链信号、但你不想让它出现在搜索结果里时,用noindex,follow。如果你的核心痛点是抓取预算被吃光,光靠noindex是治标不治本的。 ## 治理工具箱之三:robots.txt是省抓取的核武器,但有两个坑 真正能从源头省下抓取预算的,是robots.txt的Disallow。Google官方文档直接建议:通常没有理由允许抓取这些筛选后的页面,因为那只会消耗服务器资源、换不来什么收益,所以可以用robots.txt把分面URL的抓取禁掉。Ahrefs给的写法也很具体,比如用 Disallow: /*size=* 一条规则就能把所有带size参数的URL拦在抓取门外。 但robots.txt有两个坑,踩中了比不治理还糟: - 坑一:Disallow不会让已经索引的页面掉出去。robots只是禁止抓取,不是禁止索引。一个已经被收录的URL被你Disallow之后,Google抓不进去了,反而读不到你后加的noindex,结果它可能继续挂在索引里(有时显示为“已编入索引,但被robots.txt屏蔽”)。正确顺序是:要清的页面先放noindex让它掉出索引,等掉干净了,再用robots Disallow省抓取。 - 坑二:robots会切断链接权益。Botify提醒,robots.txt彻底挡住爬虫的同时,也意味着这些页面如果有外链,那份链接权益传不进来了。所以只对“零搜索需求、确实在浪费抓取”的facet下重手,别误伤可能有外链的页面。 ## 治理工具箱之四:nofollow与AJAX,从源头不生URL 前面三件工具都是“URL已经生出来了再补救”,更高明的做法是从一开始就不生成可抓取的URL。 第一种是给筛选链接加rel=“nofollow”,少给这些链接传递抓取信号。不过nofollow如今只是个提示,效果被Google弱化了不少,单靠它不保险。 第二种才是Ahrefs推崇的理想方案:用AJAX实现筛选,筛选动作不带 链接,列表在前端动态刷新,URL压根不变。这样Google连可抓的地址都发现不了,自然谈不上浪费抓取。代价是这些筛选状态没法被单独收录——所以它要和下面这招搭配:对那些有长尾搜索价值的高价值筛选,单独建静态可索引的分类页,配好内链,让它们正常参与排名。一句话,噪声用AJAX藏起来,宝贝用静态页亮出来。 ## 别再找URL参数工具了,它退役了 有些老教程会教你去Google Search Console的“URL参数”工具里配置参数行为。打住——这个工具早在2022年3月就被Google正式退役了。官方给的理由是:这些年Google自己猜参数用途的能力大幅提升,工具里只有约1%的配置还真正派得上用场,价值太低,索性下线。 这意味着今天治理参数,得靠站点自己的结构化信号说话:规范的参数分隔符、清晰可被算法识别的URL模式、canonical、robots.txt、以及前面说的AJAX。指望在控制台里点几下让Google听话的时代,已经过去了。照着过时教程白忙活一通,是很多人没意识到的隐性坑。 ## 给你一棵决策树 把上面的工具串成一套可执行的判断流程,每遇到一类facet,照着问下去: 这类facet的情况 | 处置动作 | 有明确搜索需求(如“防水跑鞋”) | 静态化成独立着陆页 + 可索引 + 配内链 + 优化TDK | 近重复、无搜索需求,但可能有外链 | canonical指回主分类页(保住权重) | 零搜索需求、确认在浪费抓取、无外链 | 先noindex清出索引,再robots Disallow省抓取 | 排序方式、每页数量等纯展示参数 | canonical指回默认视图,或直接AJAX不入URL | 多重叠加的长尾组合(3个以上facet叠加) | AJAX实现,不生成可抓URL | Botify把这套逻辑归纳成两条主线,很值得记:如果你的主要问题是抓取预算被撑爆,就侧重robots.txt、nofollow和参数处理这类“堵”的手段;如果主要问题是链接权益被稀释,就从canonical和noindex入手,robots.txt只留给那些被证实纯浪费抓取、且零搜索需求的facet。先诊断你到底亏在哪笔账上,再决定下哪味药。 ## 排序、分页、价格区间这类,基本永远别索引 有几类参数几乎不存在被索引的理由,可以直接划进黑名单: - 排序参数(sort=price_asc、sort=newest):同一批商品换个顺序,内容完全重复,没有任何独立搜索价值。 - 分页之外的展示参数(每页显示24件还是48件、网格还是列表视图):纯交互偏好,不该产生独立索引页。 - 开放式价格区间(price_min=137&price_max=489):用户随手拖出来的任意区间能生成无穷无尽的组合,是抓取黑洞的重灾区。 - 会话ID、追踪参数(sid=、utm_):跟内容无关,必须规范掉。 对这些,最干脆的做法是在前端就用AJAX或POST处理掉、不写进URL;退一步也要canonical指回干净版本。分页本身要不要索引是另一个话题,处理逻辑和分类页分页SEO的几种方案各有取舍,这里不展开。 ## 把有需求的facet静态化成着陆页 治理不全是做减法。分面导航真正的SEO红利,在于把有搜索需求的筛选组合升级成正经的着陆页。比如“女士防水冲锋衣”这个组合明明有不小的搜索量,那就别让它停留在一个动态参数URL上自生自灭,而是: - 给它一个干净、静态、语义清晰的URL(如 /womens-waterproof-jackets/); - 写一段独有的分类描述,别只甩个商品列表,加上选购要点、材质科普,制造信息增益; - 在主分类页、相关产品页用描述性锚文本主动链向它,把内链权重喂过去; - 让它进sitemap,确保被发现。 这样一来,原本会变成噪声的筛选组合,反过来成了捕获长尾的资产。选哪些组合值得这么做,回到前面那张“组合vs搜索需求”的对照表——有量的才上,没量的别硬造,否则又造出一批薄页面,得不偿失。这套“哪些深做、哪些收口”的取舍,本质上和独立站网站架构里抓取深度的权衡 (https://zhangwenbao.com/ecommerce-website-architecture-flat-vs-deep-crawl-depth-seo.html)是一脉相承的。 ## 平台落地:Shopify、WooCommerce、Magento分头说 原理通用,落地要看平台脾气: - Shopify:集合页(collection)的标签筛选默认会生成 ?constraint= 之类的参数URL。新版主题多用AJAX刷新,但仍要检查标签链接是否产生可抓地址;有价值的组合建议用单独的智能集合(automated collection)做成静态集合页,这和Shopify集合页要主动优化去抢AI购物推荐的思路一致。 - WooCommerce:默认的属性筛选靠 ?filter_color= 这类查询参数实现,量一大就容易失控,通常要配合robots.txt规则 + canonical,并谨慎决定哪些属性归档页放开索引。 - Magento:分层导航(Layered Navigation)是分面治理的硬骨头,涉及EAV属性、URL Rewrite和参数白名单,水很深。这块保哥单独写过Magento分层导航治理的完整方案 (https://zhangwenbao.com/magento-2-layered-navigation-seo-eav-url-rewrite-parameter-whitelist.html),要做Magento的可以直接对着抄。 不管哪个平台,第一件事都是先搞清楚“我这套筛选到底生成了什么样的URL”,再谈治理。很多人连自家筛选产生几种参数都没数过,就开始照搬别人的robots规则,结果要么没堵住、要么堵错了。 ## 怎么验证治理生效 方案上线不等于生效,得有监测闭环: - GSC收录覆盖报告:看“已抓取 - 尚未编入索引”“已编入索引,但被robots.txt屏蔽”这些状态的URL数量是涨是跌,定位治理有没有按预期走。 - 服务器日志:这是最实诚的证据。直接看Googlebot还在不在大量抓那些本该被Disallow的参数URL——日志不会骗人,它告诉你抓取预算到底花在了哪。配合抓取预算优化的整体打法 (https://zhangwenbao.com/google-crawl-frequency-optimization-guide-2026.html)一起看,效果更清楚。 - site: 抽查:用 site:yourdomain.com inurl:sort= 这类指令粗略估一估垃圾参数页还在不在索引里,作为快速体检(注意site: 是估算值,别当精确数)。 治理是个持续过程,不是一锤子买卖。新增了筛选维度、改了主题、上了新功能,都可能让URL宇宙重新膨胀,得定期回头复查。 ## AI搜索时代:宝贝更值钱,噪声更要清 有人问,都AI搜索了,还纠结这些参数URL干嘛?恰恰相反,AI时代两头都被放大了。 一头是,AI搜索的查询扇出机制会把一个购物意图拆成更细的子查询去检索,有需求、结构清晰的分面着陆页更容易被命中和引用——一个优化好的“500瓦便携储能电源”集合页,在AI购物推荐里的露脸机会,比埋在参数堆里的同款组合高得多。 另一头是,AI爬虫和传统爬虫一样有抓取上限,你那几十万个垃圾筛选页只会让它更快地耗尽耐心、更难抓到你真正想被引用的核心页。所以分面治理在AI时代不是过时了,而是更要紧了:把宝贝亮出来、把噪声藏起来,这条原则在GEO语境下同样成立。换个角度看,一个结构干净、该索引的索引、该屏蔽的屏蔽的站,本身就是在向AI表明“这家的内容值得信任、值得抓”,这种信号在AI决定引用谁时,分量只会越来越重。 ## 一个出海独立站的真实复盘 说个保哥手边的切片。一家做户外储能的出海独立站,产品线不算特别大,三千多个SKU,但分类页挂了容量、功率、电池类型、适用场景、价格五个筛选维度,全用查询参数实现,且每个筛选链接都是带href的普通链接。 问题表现是新品收录奇慢——上架两周还没被收录,而抓取日志里Googlebot每天大把时间在抓 ?capacity=*&power=*&scene=* 这类三四重叠加的组合页,GSC里“已抓取 - 尚未编入索引”的数字一路飙到六位数。这就是典型的抓取预算被分面URL吃光。 治理动作分三步:先拉关键词数据,确认只有容量和场景两个单维度筛选(如“1000Wh储能电源”“房车储能电源”)有真实搜索量,把这十几个组合静态化成可索引着陆页、配上内链;其余多重叠加组合一律改AJAX加robots Disallow,已收录的先挂noindex清出去;排序和价格区间参数全部canonical指回默认视图。两个多月后,新品平均收录时间从两周压到三天内,那十几个着陆页里有几个开始稳定吃长尾流量。账算下来,省下的抓取预算全回流到了真正能赚钱的页面上。 这个案例的关键不在用了多高深的技术,而在先用搜索需求把筛选分成两堆,再分别下手——这正是前面反复强调的那一步。很多人一上来就纠结该用canonical还是robots,工具选型反倒成了次要矛盾,真正决定成败的是前面那张家底表和需求判断有没有做扎实。 ## 五个常见误区 - 误区一:canonical能省抓取预算。不能。canonical只收拢权重,爬虫照抓不误。省抓取得靠robots.txt或干脆不生成URL。 - 误区二:robots Disallow能让已索引的垃圾页掉出去。不能。Disallow后Google反而读不到noindex,页面可能继续挂在索引里。要先noindex清干净,再Disallow。 - 误区三:GSC的URL参数工具还能用。它2022年就退役了,别再到处找它。 - 误区四:所有筛选页都该被索引,多多益善。恰恰相反,绝大多数筛选组合是噪声,索引得越多越拖累整站质量评估。该索引的是少数有搜索需求的精华。 - 误区五:用nofollow给筛选链接做权重雕刻就够了。nofollow如今只是提示,靠它单打独斗既挡不住抓取也清不掉索引,必须和canonical、noindex、robots组合使用。 ## 常见问题解答 ## 分面导航和分类导航到底有什么区别? 分类导航是单一维度的层级路径,比如“男装 → T恤”,一条路走到底;分面导航是多维度叠加筛选,用户能在分类页上同时勾选颜色、尺寸、价格、品牌等多个条件。前者结构稳定、URL可控,后者每多一个筛选维度,URL组合就指数级膨胀,治理难度天差地别。 ## 分面导航生成的URL,到底是该用robots.txt还是noindex? 看你的主要痛点。如果是抓取预算被吃光,robots.txt Disallow才省抓取;如果只是想让低质页不出现在搜索结果、又想保留一点内链信号,用noindex。两者的关键顺序是:要清掉已收录的页面,先用noindex让它掉出索引,等掉干净了再robots Disallow省抓取,反过来做会让页面卡在索引里出不来。 ## 用canonical把所有筛选页指回主分类页,是不是就万事大吉了? 不是。canonical能把重复内容的权重收拢回主页面,解决“权重稀释”,但它根本不省抓取预算——爬虫得先抓到页面才能读到canonical。如果你的站很大、抓取预算紧张,光靠canonical解决不了根本问题,还得叠加robots.txt或AJAX从源头控量。 ## 哪些筛选组合值得单独做成可索引的着陆页? 有明确搜索需求的组合,比如“女士防水冲锋衣”“1000Wh储能电源”这类有搜索量的词。判断方法是用关键词工具拉组合词看搜索量,再翻GSC效果报告看哪些筛选页已经在拿展示点击。有量的静态化、配内链、优化描述去抢长尾;没量的多重叠加组合直接屏蔽,别硬造薄页面。 ## Google Search Console的URL参数工具去哪了? 2022年3月被Google正式退役了。官方说这些年自己识别参数用途的能力大幅提升,工具里只有约1%的配置还有用,价值太低就下线了。今天治理参数得靠站点自身的结构化信号:规范的 & 分隔符、清晰的URL模式、canonical、robots.txt和AJAX,没有控制台里点几下就让Google听话的捷径了。 ## 都AI搜索时代了,分面导航治理还有必要吗? 更有必要。一方面,AI搜索的查询扇出会把购物意图拆得更细,有需求、结构清晰的分面着陆页更容易被命中和引用;另一方面,AI爬虫同样有抓取上限,满站垃圾筛选页只会让它更快耗尽耐心、抓不到你真正想被引用的核心页。把宝贝亮出来、把噪声藏起来,这条原则在AI时代只会更重要。 ## 权威参考资料 ## 别再纠结接ACP还是UCP,小商家接入AI购物代理其实是道配置题 - URL:https://zhangwenbao.com/agentic-commerce-platform-config-guide.html - 分类:电商SEO - 发布:2026-06-16 | 更新:2026-06-16 - 摘要:独立站要接入AI购物结账,不必研究ACP、UCP、AP2这些协议本身。按你用的电商平台逐项配置、补齐Product和Offer结构化数据,再附四步落地清单、防忽悠测试与AI流量验证法。 - 关键词:跨境电商SEO,Agentic Commerce,AI购物代理 > **TLDR**:摘要:AI购物代理替用户比价、加购、下单,已经从演示走进真实流量。但很多独立站老板一上来就纠结该接ACP、UCP还是AP2,方向就偏了。在商家这一层,接入agentic commerce是个配置题不是工程题——协议由你用的平台去实现,你要做的是打开后台勾选项、把产品数据喂干净。这篇按主流建站平台和直连支付逐个讲清怎么配,再给四步落地清单、一个识破销售套路的笨办法,以及验证AI流量值不值钱的方法。 > 摘要:AI购物代理替用户比价、加购、下单,已经从演示走进真实流量。但很多独立站老板一上来就纠结该接ACP、UCP还是AP2,方向就偏了。在商家这一层,接入agentic commerce是个配置题不是工程题——协议由你用的平台去实现,你要做的是打开后台勾选项、把产品数据喂干净。这篇按主流建站平台和直连支付逐个讲清怎么配,再给四步落地清单、一个识破销售套路的笨办法,以及验证AI流量值不值钱的方法。 最近后台收到的提问,有一类特别集中:ChatGPT、Google AI模式里开始能直接下单了,我的独立站要不要接?接的话是接ACP、UCP,还是那个AP2?要不要请个开发?预算大概多少? 问得越细,越说明一件事——大家被这堆协议缩写吓住了,以为这是一项需要啃规范、写代码的大工程。但真相挺反高潮的:对绝大多数中小商家来说,这压根不是工程题,而是一道在平台后台里点几下的配置题。 这篇就把这件事彻底讲透:哪个协议跟你有关、哪个跟你没关,你用的平台该怎么配,真正费工夫的地方在哪,以及怎么不被人忽悠着花冤枉钱。看完你大概会松一口气。 ## 为什么“我该接哪个协议”这个问题,一开始就把方向带偏了? 先把最关键的判断放在最前面:协议规范是写给平台和支付公司看的,不是写给商家看的。你纠结ACP和UCP的技术差异,就像纠结你家用的是哪家快递公司的分拣算法——那是人家的事,你只要把包裹打包好、地址写对。 这套AI结账的底层链路,是由你的电商平台、你的支付处理方去对接和维护的。Shopify、Stripe、PayPal这些角色已经替你把协议实现好了,你这一层要做的,是确认它有没有被打开、以及把喂给AI的商品信息整理干净。 所以正确的问题不是“我该接哪个协议”,而是“我用的平台帮我接好了没有,我还差哪一步配置”。答案不在任何一份技术规范里,而在你天天登录的那个管理后台里。把这个认知掰正,后面一切都会变简单。 这不是说技术细节不重要,而是说该操心它的人不是你。平台和支付公司有整支工程团队在啃这些规范、保障合规与安全,那本就是他们的核心竞争力。你作为商家,把有限的精力投到他们替你扛不了的地方——也就是你的商品本身和你的客户——才是真正划算的分工。越早认清这条分工线,越能少花冤枉钱、少熬冤枉夜。 这波转变的来龙去脉,以及它对电商战略意味着什么,之前在ChatGPT购物从重磅功能到战略收缩的复盘 (https://zhangwenbao.com/chatgpt-instant-checkout-agentic-commerce-strategy-analysis.html)里聊过,这里不重复战略层,只解决最实操的“怎么配”。 ## ACP、UCP、AP2、MCP到底谁是谁?哪个才真跟你有关? 不必研究规范,不代表名词都不用认。认清它们各自归谁管,恰恰是判断“这事跟我有没有关系”的前提。用一张表先分清楚: 协议 | 谁牵头 | 解决什么 | 跟小商家的关系 | ACP(Agentic Commerce Protocol) | OpenAI与Stripe | 定义AI代理在网站上替用户完成购买的标准,已在ChatGPT结账里启用 | 间接相关:由平台或Stripe实现,你只需启用 | UCP(Universal Commerce Protocol) | Google与Shopify | 面向AI代理购物的开放标准,支撑Google AI模式与Shopify的代理店面 | 间接相关:用Shopify基本默认覆盖 | AP2(Agent Payments Protocol) | Google牵头,后捐给FIDO联盟 | 代理支付的授权标准,属于支付公司这一层 | 基本无关:这是你支付处理方的责任 | MCP(Model Context Protocol) | Anthropic提出 | 让AI模型与外部工具、数据源对话的通用接口 | 基本无关:偏开发侧,商家配置层用不到 | 这张表里,真正落到商家头上的动作其实只有一个词:启用。ACP和UCP是你的店面与AI代理对话的两套“普通话”,但说这两套话的是你的平台,不是你本人。 AP2更典型。它在2026年4月被Google捐给了FIDO联盟,交由万事达等支付行业一起治理,解决的是“AI代理刷卡时怎么证明这笔钱用户真授权过”。按Google官方关于AP2捐赠FIDO的说明 (https://blog.google/products-and-platforms/platforms/google-pay/agent-payments-protocol-fido-alliance/),这是支付服务方那一层的安全标准——你刷的是哪套授权协议,跟你卖货的人没关系,就像你不会去研究POS机走的是哪家清算网络。 真要往技术里钻,想看懂这几套协议怎么改写SEO玩法,可以读Google六大AI协议矩阵的拆解 (https://zhangwenbao.com/google-agent-webmcp-agentic-web-seo.html)。但对今年的中小商家而言,认到“ACP/UCP是平台的事、AP2是支付方的事”这个深度,就够用了。 ## 这套AI购物,和我一直在做的Google购物广告是一回事吗? 很多电商老板第一反应是:这不就是我早就在投的购物广告(Shopping Ads)换了个壳?两者确实有交集,但本质不同,混为一谈容易做错动作。 购物广告是你付费买位置,把商品推到搜索结果的广告位上,预算停了曝光就停。而这一波里的AI购物,更多是AI代理在自然结果里替用户挑选、比较、甚至直接下单,靠的是你的商品事实够不够清楚、够不够可信,而不是你出价多高。 它俩的最大共同点,是都极度依赖一份干净的产品数据——价格、库存、标题、图片。所以你过去为购物广告打磨过的商品feed,恰好是这波AI购物的现成弹药,这是个好消息,不用从头来。 但区别也很要命:广告位可以用钱砸出来,AI代理的信任砸不出来,只能靠把商品信息做扎实一点点挣。想清楚这层,你就不会指望靠加预算解决AI购物的可见度,也不会因为暂停了广告,就误以为自己从AI购物里彻底消失了。两套逻辑并行,但发力点完全不同。 ## 怎么三分钟判断你的店“接没接上”AI结账? 与其研究协议,不如直接去后台看状态。判断你的店有没有接上AI购物,就三种可能:已经默认开了、需要你手动勾选、平台还没支持。 动作很简单:登录你的电商平台后台,在设置或销售渠道里搜一搜agentic、AI、代理、checkout这类字眼,看有没有相关的开关或渠道设置。找到了,看它是开着、关着、还是“可选择加入”;找不到,说明你这套平台暂时还没把这功能放出来。 三种状态对应三种动作,别搞混了。如果显示“已开启”,恭喜,你这块活儿基本只剩把产品数据做好;如果是“可选择加入”,那就手动把它打开,这是目前最常见的情形,很多平台为了稳,默认是关着的;如果压根找不到相关设置,先别急着下结论,去平台的帮助中心或更新公告里搜一下agentic、AI checkout这类词,确认到底是真没有,还是只是藏在某个新模块里、你一时没找到。 就这么一个动作,比读十篇协议解读都管用。它把一个看起来玄乎的技术问题,变成了一次后台巡检。下面就按平台分别说,每种情况具体看哪里、点什么。 ## 你用的平台到底该怎么配?逐个对号入座 下面按主流建站方案分开讲。找到你自己用的那一种,照着做就行,其余的可以跳过。 有个共性先说在前头:不管你用哪家平台,真正由平台替你扛的,是协议对接和支付链路的技术实现;真正留给你自己的,永远是确认开关、理顺产品数据这两件事。所以下面每一种平台你都会发现,动作惊人地相似——区别只在那个开关藏在哪、要不要额外装插件、以及你能自己改的自由度有多高。看懂这条主线,再去对号入座就轻松了。 ## Shopify:基本是平台默认帮你开好的 用Shopify的,运气最好。它在这件事上覆盖最全,通过Stripe支持ACP,又和Google共同开发了UCP,对符合条件的美区商户,代理店面(Agentic Storefronts)往往是默认启用的。 你要做的,是登录Shopify后台,到销售渠道或代理相关的设置里,确认这个开关处于打开状态,然后把重心放回到产品数据本身。换句话说,Shopify用户的工作量,九成在选品页和产品信息,而不在协议对接。 顺带一提,Shopify还默认上线了agents.md这类给AI代理读的说明文件,它和AI可发现性的关系,之前在Shopify默认上线agents.md的分析 (https://zhangwenbao.com/shopify-agents-md-agentic-discovery.html)里专门拆过,想深挖Shopify侧细节的可以接着看。 ## BigCommerce、Wix、Squarespace:勾一个Stripe托管集成 这几家路子很像,基本都是借道Stripe的代理商务套件(Agentic Commerce Suite)来支持ACP。BigCommerce这条线已经有Wayfair、A&F这类大商户在跑,部分还能叠加PayPal的渠道同步。 对你的动作而言,三家可以归成同一套:在后台启用Stripe的托管集成,把产品目录清理干净,再留意分析后台里有没有AI来源的流量渠道。技术对接是Stripe在背后扛,你负责勾选和理货。 ## WooCommerce:自由度最高,也最得自己上手 WooCommerce是自托管的,好处是灵活,代价是没人替你兜底。它通常通过Stripe的插件来支持ACP,但插件的安装、配置、后续更新,都得你自己或你的技术伙伴来管。 实操上,这活儿常常是一个下午能搞定的量级,但多半要拉上一个懂Woo的开发。如果你站点已经装了Stripe相关插件,先去看插件有没有更新到支持代理商务的版本,再按文档把开关打开,别自己从零造轮子。 另外提醒一句,Woo是自托管的,意味着安全和更新也归你管。代理商务相关的插件要及时更新,别让一个长期没人维护的支付插件,变成你结账链路上的隐患。自由度高的另一面,永远是责任也更大。 ## 直连Stripe或PayPal:没有平台层时的两条路 有些独立站没套标准建站平台,是自己开发、直接对接支付的。这种情况自由度最大,要做的决策也最多。 走Stripe的,核心是启用共享支付令牌(Shared Payment Token)。按Stripe关于共享支付令牌的官方文档 (https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens),它是一种限定额度、限定时效、限定卖家的支付授权——代理拿着令牌发起支付,但真正扣款的是你这个卖家而非代理,且不会把用户的卡号暴露给代理。对开发者来说,接入往往就是很轻量的一段代码。 走PayPal的更省事。PayPal的Agent Ready计划会自动把大量现有商户纳进来,几乎不需要额外技术投入,你只要去PayPal的商业仪表板里,找到Agent Ready相关的设置面板确认一下状态就行。 ## 以上都不是:先别急着写代码 如果你发现自己的平台压根没在这场里,先别冲动去定制开发。对小商家来说,迁移到一个原生支持的平台,往往是比自研更便宜、更省心的路;其次才是给现有站点加上Stripe或PayPal这类支付选项。 定制开发是最贵的一条路,也最容易把后端捅出窟窿。除非你有明确的、平台满足不了的特殊需求,否则把这条排在最后考虑。 ## 真正占九成工作量的,为什么是产品数据而不是协议? 把协议这层的焦虑卸下来之后,得把注意力放到真正决定成败的地方——你的产品数据。可以这么说,今年agentic commerce对小商家的要求,九成的工作量在产品数据,剩下那一成才是后台点几下加一次schema自查。 道理不难懂。AI代理不会像人那样去欣赏你的页面设计,它要的是干净、结构化、不打架的商品事实:这件商品叫什么、多少钱、什么币种、有没有货、谁在卖。这些信息得用机器读得懂的方式标出来,它才敢把你的商品端给用户。 具体到技术,每个商品页至少要备好两块结构化数据:一块是Product,描述名称、图片、SKU、品牌;一块是嵌套在里面的Offer,描述价格、币种、库存状态、卖家。按Google关于产品结构化数据的官方文档 (https://developers.google.com/search/docs/appearance/structured-data/product),正是这些标记让价格、库存、评分这类信息能直接呈现在搜索与AI结果里。 这里的Offer尤其关键。按schema.org对Offer类型的定义 (https://schema.org/Offer),它承载price(价格)、priceCurrency(币种)、availability(库存状态)、seller(卖家)这些字段——少一项、或者和页面上显示的对不上,AI代理就可能直接跳过你的商品,因为它没法确信这笔交易能成。 更隐蔽的坑是“多处价格对不上”。页面写一个价、结构化数据里另一个价、产品feed里又是第三个价,AI一看信息打架,宁可不选你。产品数据这摊事到底该谁管、怎么对齐,是个常被丢给投放部门、其实关乎自然和AI双重露脸的大问题,专门拆在产品feed到底该谁管的复盘 (https://zhangwenbao.com/product-feed-seo-asset-organic-ai-ownership.html)里,强烈建议配合这一节一起看。 ## 产品数据除了Product和Offer,还有哪些容易被忽略的对齐点? 把Product和Offer结构化数据补齐,只是及格线。真正拉开差距的,是几个常被忽略、却直接影响AI敢不敢选你的细节。 - 唯一商品标识(GTIN):条形码、UPC、EAN这类全球通用编号,是AI把你的商品和全网同款对上号的硬通货。缺了它,代理很难确认你卖的到底是不是用户要的那一款。 - 库存与变体的映射:颜色、尺码这些变体,每一个的库存状态都要单独标清楚。笼统标一个有货,结果用户挑的那个色号其实断货,AI一旦发现,会连带降低对你整站的信任。 - 图片不是装饰:主图要干净、能被机器识别出商品主体,别套一堆促销角标和水印。AI代理是会读图来判断这是不是用户想要的东西的。 - 促销价怎么标才不打架:原价、现价、促销有效期,都要在结构化数据里标清楚,别让页面显示一个价、数据里又是另一个价。 这些细节有个共同的敌人,叫“多处不一致”。你的网站页面、结构化数据、产品feed这三个地方,只要价格或库存对不上,AI就会判定信息不可靠,宁可绕开你。把这三处当成一个必须时刻对齐的整体来维护,是产品数据这摊事里最该立起来的纪律。 这也是为什么前面反复强调,真正的工作量在产品数据。协议是平台一次性帮你接好的,而产品数据的对齐,是一项要长期维护的日常功课——上新、改价、调库存,每一次都可能让这三处重新错位。功夫不在一时,在每天。 ## 一套能照着做的四步清单长什么样? 把前面的判断收成一份可执行清单,照着走一遍,今年这件事基本就齐活了。 - 确认平台状态(约10分钟):登录后台,找到agentic commerce或AI渠道相关的设置面板,看清楚它是开着、关着、还是待你选择加入。这一步对应前面的逐平台说明。 - 自查产品schema(一个下午):随机挑三个商品页,确认每页都有完整的Product和嵌套Offer结构化数据,且价格、库存这些字段和页面显示一致,可以用Google的富媒体结果测试工具跑一遍验证。 - 启用平台集成(点几下):在后台把对应开关打开,通常三五次点击。开完之后,自己去ChatGPT、Google AI模式或Perplexity里搜一搜自己的商品,看看能不能被正常找到、报价。 - 监测AI流量(持续做):在分析后台单独建一个AI来源的流量分段,把AI带来的访问和成交单独拎出来追踪,和普通流量分开算转化。 四步里,第二步最花时间,也最值得花。前三步是把门打开,第二步才是决定AI愿不愿意把客人往你这儿领的关键。门开了货不行,照样没人进。 还有个容易被跳过、却很关键的习惯:把这四步排进一个固定的复查节奏。AI购物这套东西还在快速演进,平台今天默认关、下个月可能就默认开了;你这个月schema明明是齐的,一场大促改一轮价,又可能让页面、结构化数据、产品feed三处价格悄悄错位。建议至少每个季度,把平台开关状态和几个主力商品页的结构化数据重新扫一遍,别配一次就当成一劳永逸的事。 ## 怎么识破“帮你接ACP”这类销售话术? 这件事一旦变热,就一定会有人来卖服务。最常见的话术是上门推销“ACP接入服务”“agentic commerce改造方案”,开价不低,听起来很高深。 教你一个一戳就破的笨办法,可以叫它“销售员测试”。如果有人来卖你ACP接入服务,而你用的是Shopify,你就反问一句:那你能给我讲讲什么是代理店面(Agentic Storefronts)吗? 如果对方支支吾吾、讲不清楚,基本可以断定,他想卖给你的,是你平台早就默认做好的事——换句话说,是在拿一件免费的事向你收费。真正懂行的服务商,会先问你用什么平台、现状如何,而不是上来就给你套一个吓人的改造方案。 把这个测试记在心里,能帮你省下相当一笔冤枉钱。判断标准很朴素:凡是不先搞清你用什么平台、就笼统说要给你“接协议”的,大概率是在收平台已经替你交过的那份费用。 当然,这不是说所有外部服务都不值得买。如果你的需求确实超出了平台默认能力——比如要做复杂的多市场定价、要把代理商务和自有ERP打通——找专业的人帮忙完全合理。关键是分清楚:你付的钱,要花在平台没替你做的增量上,而不是花在它早就免费给你做好的存量上。 ## 哪些看着相关的事,今年其实可以先放一放? 信息焦虑很大一部分,来自分不清什么该管、什么不该管。给中小商家划几条今年可以暂时不碰的线,把注意力省下来用在刀刃上。 第一,还在草案阶段的购物车管理规范。围绕代理购物车有不少新规范在讨论,但它们大多还没稳定下来,现在投入精力跟进,很可能跟到一半标准就变了。等它落地、平台支持了再说不迟。 第二,AI代理替企业采购云服务这类协议。市面上有些代理商务标准,针对的是AI去购买服务器、CDN这种企业基础设施,和你卖实物或零售商品基本不沾边,看个热闹就好,别误以为自己也得跟。 第三,平台级巨头之间的诉讼和博弈。大平台和AI公司之间会有各种关于代理流量的法律拉锯,这些事在“整个市场会怎么走”那一层很重要,但对你今年“怎么把店接上AI购物”这个具体问题,几乎没有直接影响。 把这几样放一放,不是让你不关心行业,而是提醒你:作为执行层,今年真正该投入的,就是后台配置加产品数据这两件事。其余的宏大叙事,知道有这回事就行,别让它占用你本该用来理货的时间。 ## AI来的流量真的更值钱吗?怎么验证到自己店里? 做完这些配置,一个自然的疑问是:值得吗?AI带来的这点流量,真比普通流量更能转化? 从大盘数据看,确实值得期待。按Adobe关于AI流量的报告 (https://business.adobe.com/blog/ai-traffic-surge-retail-sites-not-machine-readable),到2026年3月,AI来源流量在美国零售站的转化率比非AI流量高出约42%,是一次历史性的反转;但同一份报告也点出,很多零售网站还没把自己做成机器可读的样子,白白接不住这波高意向流量。这恰好和前面那句话对上了——工作量在产品数据,不在协议。 但别人的数字只是参考,你得验证到自己店里。最直接的办法,是给AI引荐流量单独打标。比如来自ChatGPT的访问通常会带上utm_source=chatgpt.com这样的来源参数,你在分析后台据此建一个分段,就能把AI流量单独看。 然后分开算两笔账:AI引荐流量的转化率,和人工引荐流量的转化率,各是多少。如果你这边AI流量明显不如大盘那么能打,问题大概率不在AI,而在上游——你的产品数据、价格展示,还没让代理足够放心地把你推出去。数据会诚实地告诉你,地基补到哪了。 这套监测还有个长期价值:它让你能第一时间感知AI渠道的变化。哪天某个AI入口的流量突然涨了或断了,分段数据会先给你信号,你才能及时去查,是平台改了规则,还是你的产品数据出了岔子。把AI流量纳入日常看板,等于给这条新渠道装了个仪表盘,而不是等季度复盘时才后知后觉。 ## 国内卖家接这套,会比海外多踩哪几个坑? 前面讲的配置逻辑全球通用,但国内做出海的卖家,会比海外本土商户多几道现实的坎,得提前心里有数。 第一道是开户与主体资格。很多AI结账能力默认只对美区或特定地区的商户开放,你的店是不是符合条件,往往卡在收款账户的主体、地区这些前置资格上,而不在技术。这一步过不了,后面的开关你根本看不到。 第二道是支付与收款的可达性。AI把高意向用户领到你的结账页,结果支付环节因为风控、币种、或本地支付方式缺失而掉链子,前面的功夫就全白费。接入前先确认你的收款链路在目标市场是顺畅的。 第三道是测试工具的可达性。要验证商品能不能被AI找到,得真的去ChatGPT、Google AI模式里搜一搜,而这些工具在国内访问本身就有门槛。把测试环节安排好稳定的访问条件,否则很容易误判成“没接上”,白白折腾。 保哥团队帮一个做家居出海的客户排查过类似情况:技术明明全配好了,AI却一直不推它的商品,查到最后发现,是产品feed里的地区和货币设置和目标市场对不上,AI据此判定这店服务不了当地用户。改过来之后,AI引荐的曝光才慢慢起来。坑往往不在协议,而在这些跨境特有的细节里。 ## 接上之后,怎么让AI更愿意把客人领给你,而不是对手? 把店接上AI购物,只是拿到了入场券。真正的竞争是:当用户让AI代理“帮我买双适合越野跑的鞋”,同样接入的几十家店里,它凭什么选你?这一步,拼的是信任信号。 AI代理替用户做决定时,会综合很多它能读到的信号来给自己降风险。这些信号大致分几类,每一类都值得认真对待: - 真实评价:足够数量、且结构化标注好的用户评价,是AI判断商品靠不靠谱最直接的依据。把评价做真、做结构化,远比刷一堆假好评有用。 - 履约可信度:发货时效、退换货政策写清楚,并和实际一致。AI不愿意把用户推给一个可能让人退货无门的卖家。 - 品牌一致性:你在全网呈现的名称、定价、产品描述前后一致,AI才会把你当成一个稳定可信的实体,而不是一个来路不明的页面。 这套逻辑,和过去做SEO攒权威、做转化攒口碑其实一脉相承,区别只在于现在多了一个会读这些信号、并替用户做决定的中间人。你过去在E-E-A-T、在用户体验上下的功夫,会以一种新方式,转化成AI愿不愿意推荐你的概率。 所以别把目标停在“技术上接通了”。接通之后,把评价、履约、品牌这些慢功夫一点点做厚,才是让AI持续把客人往你这儿领的真正护城河。这部分快不了,但也正因为快不了,才是肯下笨功夫的小商家能凭认真胜出的地方。 ## 保哥的判断:小商家在这波里该用什么心态? 保哥这两年陪不少出海独立站走过类似的技术浪潮,从结构化数据到GEO再到现在的agentic commerce,每一波都有人焦虑得睡不着,也有人冷静地把该做的做完就接着卖货。回头看,后一种人活得明显更好。 这一波的心态,保哥的建议就一句:别被缩写吓住,把它当成一次例行的后台体检,而不是一场需要砸钱的技术军备竞赛。协议是平台和支付公司的战场,你的战场永远是产品本身——把商品信息做干净、价格做一致、库存做准确,这些是你十年前就该做、现在更不能省的基本功。 换个角度看,这其实是个利好。当接入这件事被平台抹平成几次点击,真正的竞争就回到了谁的产品数据更扎实、谁的商品事实更值得AI信任。这恰恰是认真做事的小商家能扳回一城的地方——大厂的协议红利人人都有,但把每个商品页都打磨到经得起机器审视,是肯下笨功夫的人才做得到的。 所以别急着请开发、买方案。先花一个下午,按上面的清单把自己的店巡检一遍,你多半会发现,这件听起来很吓人的事,离你并没有那么远。 ## 常见问题解答 ## 我用Shopify,到底还需不需要专门去接ACP或UCP? 基本不需要你亲自去接。Shopify通过Stripe覆盖了ACP,又和Google共同开发了UCP,对符合条件的美区商户,代理店面常常是默认启用的。你要做的是登录后台确认这个开关开着,然后把精力放回产品数据。如果有人上门要收费帮你“接ACP”,先用销售员测试问他什么是代理店面,问不清楚的多半是在卖平台已经免费做好的事。 ## AP2这个支付协议,我作为商家需要自己去对接吗? 不需要。AP2是Google牵头、后来捐给FIDO联盟的代理支付授权标准,解决的是AI代理刷卡时怎么证明用户授权过这笔钱,属于支付公司那一层。你刷的是哪套支付授权协议,跟你卖货没关系,就像你不会去研究自家POS机走的是哪条清算网络。把它交给你的支付处理方就好。 ## 不用电商平台、自己开发的站,怎么接入AI购物? 主要看你的支付走谁。走Stripe的,核心是启用共享支付令牌,代理拿令牌发起支付、你来扣款,用户卡号不暴露给代理,接入通常是很轻的一段代码。走PayPal的更省事,它的Agent Ready计划会自动纳入大量现有商户,你去商业仪表板确认一下相关设置即可。两条路都比从零定制便宜得多。 ## 接入AI购物,最花时间的环节到底是什么? 是产品数据,不是协议对接。今年这件事对小商家的要求,九成工作量在把商品信息整理干净——每个商品页都备好完整的Product和Offer结构化数据,价格、库存、币种、卖家这些字段齐全且和页面显示一致。后台点开关那几步反而最快。门开了货不行,AI照样不会把客人往你这儿领。 ## 怎么知道AI带来的流量到底有没有转化? 给AI引荐流量单独打标再分开算账。比如ChatGPT来的访问常带utm_source=chatgpt.com这样的来源参数,你在分析后台据此建一个流量分段,就能把AI流量单独拎出来,和人工引荐流量分别算转化率。如果你的AI流量转化明显偏低,问题大概率在上游的产品数据和价格展示,而不在AI本身。 ## 这些协议名词太多记不住,最低限度我得搞懂什么? 只需记住归属:ACP和UCP是平台帮你说的“普通话”,用主流平台基本被默认覆盖;AP2是支付公司那层的授权标准,跟你无关;MCP偏开发侧,配置层用不到。换句话说,规范本身你可以完全不读,只要会去后台确认状态、会把产品数据做干净,就抓住了全部要点。剩下的,交给平台和支付方。 ## 权威参考资料 ## 免费产品收录怎么做?不投广告也能让商品免费上Google购物 - URL:https://zhangwenbao.com/google-free-product-listings-merchant-center.html - 分类:电商SEO - 发布:2026-06-13 | 更新:2026-06-13 - 摘要:免费产品收录是不花广告费进入Google购物生态的自然通道。覆盖feed与站内结构化数据两条进场路、标题优化最高杠杆、用Search Console与GA4正确归因、优质商店徽章,以及AI购物时代它为何成了被ChatGPT推荐的前置条件。 - 关键词:结构化数据,电商SEO,Merchant Center,Google购物 > **TLDR**:摘要:很多出海卖家默认一件事:想上Google购物,就得掏广告费。这个念头从2020年起就过时了。那一年Google把购物标签页几乎整个改成了免费,你的产品不花一分广告费,也能出现在搜索、图片、Lens、购物标签乃至Gemini里——这就是“免费产品收录”(free listings)。它不是广告的平替,而是另一条独立的自然曝光通道,靠的是商家中心的产品数据和站内结构化数据,而不是竞价。到了AI购物这一年,它的分量又变了:ChatGPT、Gemini给用户推荐商品时,背后大量借道Google购物的自然结果,没进这套体系的产品,连被AI念到名字的资格都没有。这篇把免费收录讲透——它是什么、能出现在哪、怎么开通、必填门槛、数据怎么归因、AI时代怎么卡位,一路到出海独立站的落地清单。 > 摘要:很多出海卖家默认一件事:想上Google购物,就得掏广告费。这个念头从2020年起就过时了。那一年Google把购物标签页几乎整个改成了免费,你的产品不花一分广告费,也能出现在搜索、图片、Lens、购物标签乃至Gemini里——这就是“免费产品收录”(free listings)。它不是广告的平替,而是另一条独立的自然曝光通道,靠的是商家中心的产品数据和站内结构化数据,而不是竞价。到了AI购物这一年,它的分量又变了:ChatGPT、Gemini给用户推荐商品时,背后大量借道Google购物的自然结果,没进这套体系的产品,连被AI念到名字的资格都没有。这篇把免费收录讲透——它是什么、能出现在哪、怎么开通、必填门槛、数据怎么归因、AI时代怎么卡位,一路到出海独立站的落地清单。 先说个保哥常遇到的场景。一个做户外储能的独立站老板问:我在Google上搜自己的产品,看到一排带图带价格的商品卡,可我从没投过购物广告,这些是哪来的?答案就是免费产品收录。他一直以为那是竞争对手花钱买的位置,其实那里面很可能就有他自己被动收录进去的商品,只是没人帮他把数据喂好,露出得七零八落。 这事的尴尬在于:免费收录是个默认开着、却没人主动经营的渠道。广告要花钱,所以有人盯;免费的东西不花钱,反而成了没人负责的三不管地带。结果就是一大批出海卖家把一条能白捡流量的路,硬生生放在那里荒着。 ## 先把概念掰清楚:免费产品收录到底是什么 免费产品收录,官方叫free listings,中文语境里也常被叫成“免费商品列表”“自然购物列表”。它指的是:你的商品以图片、标题、价格、库存状态的形式,免费出现在Google的各个购物相关位置,用户点一下直接进你的独立站,你不为这次曝光和点击付一分钱。 它跟购物广告(Shopping Ads,也就是那套Performance Max里的产品广告)用的是同一套底层数据——商家中心里的产品feed,但走的是两条完全不同的分发逻辑。广告靠竞价,你出价高、质量好就排在前面,按点击扣钱;免费收录靠匹配,Google根据你提供的数据判断你的商品跟用户搜的东西有多相关,相关就展示,不相关就沉底,全程不收费。 打个不太严谨但好懂的比方:购物广告像是在商场门口花钱租的黄金展位,免费收录则像是把商品如实登记进商场的公共导购系统——只要信息填得全、填得准,顾客问到相关的东西,系统就有可能把你的货指出来。两者不冲突,很多成熟的站是两条腿一起走。 ## 一段被很多人忘掉的历史:从付费墙到2020年的免费回归 要理解免费收录为什么值得认真做,得先知道它是怎么来的。早年的Google购物(当时叫Google Product Search)本来是免费的,2012年前后Google把它改成了纯商业模式——想在购物结果里露脸,只能通过产品广告(Product Listing Ads)花钱买。这套付费墙立了将近八年,也养成了整整一代电商人的思维定式:Google购物=要花钱。 转折点在2020年。根据Google在Google官方博客那篇《现在可以免费在Google上销售》的公告 (https://blog.google/products/shopping/its-now-free-to-sell-on-google/),2020年4月21日,时任商务总裁Bill Ready宣布:“从下周开始,Google购物标签页的搜索结果将主要由免费列表构成。”公告里那句关键定调是,要让商家能触达消费者,“无论他们是否在Google上投放广告”。当时正值疫情,实体店关门,Google的算盘是把这条免费通道打开,帮那些有货却在线上不好找的零售商续命,顺带也拉住卖家不被亚马逊虹吸走。同一时期,Google还跟PayPal、Shopify、WooCommerce、BigCommerce搭了伙,把接入门槛压低。 而且这事没停在2020年那一步。当年下半年,免费收录从购物标签页往外扩,开始渗进美国主搜索结果里的商品位;此后几年,图片、Lens、乃至如今的Gemini,一个接一个被纳进这套免费分发的版图。趋势很清楚:Google在把越来越多的购物相关流量,从纯付费改成“免费打底、付费加码”的混合结构。 换句话说,免费收录不是Google一时兴起发的福利,而是它跟亚马逊抢电商入口的战略动作。理解这一层,你就明白:这条通道Google有动力长期维护,值得当成一个稳定的自然流量来源来经营,而不是当成随时会关的临时活动。对预算有限、又想在Google生态里长期占位的出海独立站来说,这条不花钱的路几乎是必修课,早经营早占坑。 ## 免费收录能出现在哪些地方:七个不花钱的曝光面 很多人以为免费收录就只在“购物”那个标签页里。其实它铺得比想象中广。按Google商家中心帮助中心关于免费产品收录的说明 (https://support.google.com/merchants/answer/13889434?hl=en),商品可以免费出现在这些位置:Google搜索、Google地图、Gemini、YouTube、购物标签页、Google图片、以及Google Lens。具体的展现形态还包括富结果、热门商品轮播(目前主要在美国移动端的服装品类)、购物知识面板、YouTube的商品清单等等。 把这几个面拆开看,你会发现免费收录其实在悄悄接管越来越多的搜索结果: - 主搜索结果里的商品网格:搜一个具体商品词(比如“红色长袖开衫”),结果页顶部或中段那排带图带价的产品卡,很多是免费收录的自然位,而非广告。 - 购物标签页:这是免费收录的主场,2020年后这里以自然结果为主。 - Google图片:用户在图片搜索里看到的可购物商品,背后也接着这套数据。 - Google Lens与圈图搜:用户拍一张图或圈一块屏,机器要认出“这是什么、哪买”,靠的正是收录进购物生态的商品数据。 - Gemini与AI购物:这是最新也最关键的一面,后面单独展开。 注意Google那句冷静的免责声明:“我们无法保证你的商品一定会在Google上展示,因为我们依赖你提供的数据来把商品与用户可能搜索的内容做匹配。”翻译成人话:进场是免费的,但露不露脸、露多少,取决于你数据的质量。这句话基本定下了免费收录优化的全部命门——喂好数据。 ## 免费vs付费购物:到底差在哪 既然底层数据同源,那免费收录和购物广告的差别到底在哪?一张表说清楚: 维度 | 免费产品收录 | 购物广告 | 成本 | 零,不为曝光和点击付费 | 按点击竞价扣费 | 排序逻辑 | 相关性匹配,Google说了算 | 出价×质量,你能主动加码 | 展示位置 | 多在广告位下方、结果页中段 | 结果页最顶部黄金位 | 可控性 | 低,只能优化数据间接影响 | 高,能控预算、出价、受众 | 见效速度 | 慢,靠数据积累和匹配 | 快,钱一投就有量 | 适合谁 | 预算紧、要长期自然流量的独立站 | 要快速起量、能算清ROAS的站 | 关于位置有个现实要认清。Shopify在Shopify官方博客那篇Google购物指南 (https://www.shopify.com/blog/google-shopping)里说得挺实在:“即便在购物标签页里,最显眼的位置依然是付费的,免费列表出现在下方。”它还提醒,免费列表不会让你的生意脱胎换骨,但能带来实打实的增量,也是一个低成本试水、看要不要加投广告的方式。这个定位很中肯——免费收录是地基和长尾,不是让你彻底不投广告的银弹。但对预算有限的出海新站来说,先把这条不花钱的通道吃干净,本来就是最划算的第一步。 ## 两条进场通道:商家中心feed,还是站内结构化数据 让商品进入免费收录,其实有两条路,很多人只知道一条。 第一条,商家中心产品feed。这是最主流也最完整的路子:注册一个Google Merchant Center账户,把你的商品数据(标题、价格、库存、图片、GTIN等)以feed的形式传进去。Shopify、WooCommerce、Magento这些平台都有现成的接入应用,能把店里的商品自动同步进商家中心,不用手动维护表格。 第二条,站内Product结构化数据。这条路很多做SEO的人反而更熟:在产品页上打好Product schema标记,把价格、库存、GTIN、运费、退货这些信息用结构化数据标出来,Google的爬虫抓取时就能读懂,从而让商品有资格进入图片、Lens等富结果体验。 那到底用哪条?Google搜索中心的产品结构化数据文档 (https://developers.google.com/search/docs/appearance/structured-data/product)给了明确答案:“在网页上同时提供结构化数据和商家中心feed,能最大化你进入各类体验的资格,也帮助Google正确理解和核验你的数据。”文档还点明,有些体验会在两者都存在时把结构化数据和商家中心feed的数据合起来用。 所以正解不是二选一,而是两条腿都上:feed负责把完整商品目录喂进购物生态,站内结构化数据负责让每个产品页在自然搜索里也能被读懂、被核验,两者互相印证、互相补位。对已经在认真做SEO的独立站来说,产品页的结构化数据本来就该做,顺手把免费收录这条通道也打通了,等于一份活干两件事。这套结构化数据的取舍,站内那篇讲哪些结构化数据该做别再凭感觉堆类型 (https://zhangwenbao.com/schema-org-usage-statistics-priority-guide.html)的文章可以配着看。 ## 三步开通:从零到商品进场 操作层面,开通免费收录并不复杂,核心就三步: 第一步,建一个配置正确的商家中心账户。关键在“配置正确”——账户的国家/地区、业务类型要跟你的实际经营对上,网站要完成验证和认领。这一步没做对,后面数据再全也进不去。 第二步,把产品数据传进去。用平台应用自动同步是最省心的方式。Shopify的Google & YouTube应用、WooCommerce和Magento的对应插件,都能把店里的SKU连同价格、库存、图片一起推进商家中心,并保持同步更新。手动上传表格也行,但SKU一多就成了苦力活,而且容易过期。 第三步,确认免费收录已开启。好消息是,按官方说法,“大多数情况下,免费列表功能对你是默认开启的”。你要做的往往不是去打开它,而是去商家中心里核对一下它确实开着、你的商品状态是“已批准”(approved)而不是“已拒登”(disapproved)。如果被拒登,去看拒登原因,多半是数据缺失或政策问题,一条条修就是。 这里插一句:默认开启是好事,但也正因为默认开启,很多卖家的商品早就被动进了免费收录,只是数据烂、露出差,白白浪费了资格。开通从来不是终点,喂好数据才是。 ## 必填项与硬门槛:数据缺一块,资格就掉一块 免费收录能不能露脸,说到底是数据说了算。几个绕不过去的硬门槛: 商品标识符,尤其是GTIN。GTIN就是商品条码(UPC、EAN、ISBN这类),Google用它把你的商品跟全球商品目录做匹配、核验身份。有有效GTIN的商品,免费收录的可见度明显更高。没有GTIN的商品不是完全不能收,但匹配会吃亏。GTIN怎么申请、跨境卖家怎么处理,站内那篇讲跨境电商GTIN怎么申请从商品条码到谷歌购物收录 (https://zhangwenbao.com/cross-border-product-gtin-guide.html)的文章讲得很细,这里不重复。 价格与库存必须准。页面上的价格、有货/缺货状态,要跟feed里报的一致。价格对不上、明明缺货却报有货,是最常见的拒登和降权原因。 政策合规。Google要求商家“遵守我们在Google上免费展示商品的相关政策”。违禁品、误导性内容、夸大宣传(描述里堆“全网最低”“史上最强”这种超级词)都可能触发拒登。 运费和退货信息。在指定的一些国家,运费是必须配置的——要么设置Shipping运费规则,要么用shipping属性把运费标出来。退货政策官方建议在商家中心里补上。这些信息越全,商品越有竞争力。 把这些门槛列出来你会发现,免费收录的优化跟产品页SEO是高度重叠的——都是在追求数据的完整、准确、合规。做好一头,另一头基本也顺了。 ## 产品数据优化:标题是回报最高的那根杠杆 门槛过了之后,真正拉开差距的是数据优化,而其中回报最高的单一动作,是产品标题。 免费收录里的商品标题不是拿来给人看的文案,而是给机器做匹配的关键字段。一个好标题会把品牌、型号、核心属性、以及用户真实会搜的说法都装进去。举个对比: - 差标题(照抄厂商命名):便携电源X200 - 好标题:某品牌X200便携式户外电源300W 512Wh露营应急锂电池 好标题里,品牌、型号、功率、容量、使用场景全齐了,机器能把它跟一堆不同说法的搜索词对上号。标题优化几乎是免费收录里性价比最高的一件事,动一动就能明显影响露出。 标题之外,还有几个抓手:描述控制在500到1000字符,讲清材质、规格、卖点,别堆促销词;图片用干净、主体清晰、无水印无促销文字的白底或场景图;分类、品牌、属性字段尽量填满,因为商品属性越完整,跨各个曝光面被展示的概率越高。你喂给Google的数据,本质上就是在替机器回答“这是什么、给谁用、什么场景”这三个问题——回答得越清楚,被匹配到的机会越多。 ## 最容易被忽略的坑:免费收录的数据怎么归因 这一节是很多教程不讲、但真正做起来最头疼的地方——你怎么知道免费收录到底给你带来了多少流量? 坑就出在报表上。据Search Engine Land那篇总结Google免费收录八条洞察的文章 (https://searchengineland.com/organic-shopping-insights-google-free-listings-458062),新版商家中心(Merchant Center Next)里的自然(organic)报表其实是会误导人的:它显示的是“到你网站产品页的流量”,但这个数据跟你在产品feed和免费收录上具体做的努力并不直接对应。你盯着那个数字优化,很可能优化了个寂寞。 正确的归因方式是换数据源:用Google Search Console里的“商家listing”(Merchant Listings)过滤器,看免费收录带来的展示、点击、CTR、排名;再用GA4里的“自然购物”(Organic Shopping)渠道,看这部分流量进站后的转化。这两个源才是真正对得上免费收录效果的。这套思路跟站内讲产品feed到底该谁管这份数据决定你在自然搜索和AI购物里露不露脸 (https://zhangwenbao.com/product-feed-seo-asset-organic-ai-ownership.html)的文章是一脉相承的:feed和免费收录是SEO资产,就该用SEO的量尺去衡量,而不是丢给投手用广告后台看。 这篇文章还点出另外几条实战洞察,值得记下:一是免费收录的单元(热门商品、优惠、门店有货这些)会占掉搜索结果页的显眼位置,把你自己的品牌词自然链接往下挤,也就是说免费收录有时会蚕食你的品牌词点击,这个账要会算;二是别把付费和免费的feed拆成两套,统一一套feed基本就够,拆开很少有好处,反而可能因为某套feed里的政策问题触发账户级的排除;三是有些商品会因为限制性购买(只面向B2B、按地区限制内容)或竞价式定价模式被排除在免费收录之外,而Google在后台并不会明确告诉你这一点,得自己排查。 ## Top Quality Store徽章:把体验也纳入排序 如果你想在免费收录里更进一步,Google还有个“优质商店”(Top Quality Store)徽章。拿到它意味着你在几个维度上都做到了位:配送体验、退货体验、浏览体验(包括Core Web Vitals这些网页体验指标)、购买体验、以及商店评分。 这个徽章的意义在于,它把“商品数据准不准”之外的“购物体验好不好”也纳入了考量。换句话说,免费收录到后期比的不只是feed,而是整个从搜索到下单的体验链——页面快不快、退货省不省心、评分高不高,都会反过来影响你在购物生态里的分量。这跟做站内体验优化的方向是完全一致的,等于又是一份活干两件事。 ## AI购物这一年:免费收录成了被AI推荐的前置条件 如果说前面这些是免费收录的常规价值,那这一节讲的是它2026年最要命的新身份——被AI念到名字的入场券。 逻辑是这样的:当用户在ChatGPT、Gemini这类AI助手里问“帮我推荐几款500美元以内的户外电源”,AI并不是凭空编,而是要去某个商品数据库里捞真实的、可购买的商品。而这个数据库,很大程度上就是Google的购物生态。据Semrush关于ChatGPT借道Google购物做推荐的研究 (https://www.semrush.com/blog/chatgpt-searches-google-shopping/),ChatGPT推荐的头部商品,有75%的情况会出现在Google购物的前三个结果里,与第二、第三个结果也有大量重叠。研究直接下了结论:“优化你的Google购物结果,是让你出现在ChatGPT商品轮播里最重要的因素之一。” 把这条链路捋直:你的商品进不进免费收录 → 决定它在不在Google购物的自然结果里 → 决定它有没有机会被ChatGPT这类AI捞出来推荐给用户。没进免费收录的商品,在AI购物这一层基本等于隐身,被AI推荐的概率约等于零。这背后是Google那张收录了几百亿商品的Shopping Graph在支撑,它既喂着Google自己的购物结果,也正越来越多地成为外部AI获取商品信息的底层。关于这张商品知识图谱怎么优化,站内讲Google Shopping Graph优化6策略实战 (https://zhangwenbao.com/google-shopping-graph-ecommerce-seo-optimization.html)的文章展开得更深。 所以2026年再看免费收录,它的价值被重估了:它不再只是一条省广告费的自然流量通道,更是你的产品进入AI购物推荐池的地基。地基没打,上面盖什么AI可见度都是空中楼阁。 ## 怎么衡量效果:三块表盘一起看 做了这么多,效果怎么看?三块表盘配合着用: - 商家中心的Performance仪表盘:看免费收录的展示、点击、CTR、以及哪些商品表现最好。这是最直接的运营视图。 - Google Search Console的商家listing过滤器:看免费收录在搜索侧的展示和点击真相,这是归因最可靠的一块。 - GA4的自然购物渠道:看这部分流量进站后的行为和转化,把曝光一路追到成交。 三块一起看,你才能把“进了多少场、被看了多少次、点进来多少人、最后成交多少单”这条完整链路串起来。只盯商家中心那个会误导人的自然报表,很容易得出错误结论。 ## 出海独立站的落地清单 把上面的东西收成一份出海卖家能直接照做的清单: - 建对账户:商家中心账户的国家、业务类型配置正确,网站完成验证认领。 - 用平台应用接feed:Shopify用Google & YouTube应用,WooCommerce/Magento用对应插件,把全量SKU自动同步。 - 补齐GTIN和标识符:能有GTIN尽量有,匹配吃亏的坑先填上。 - 产品页做好Product结构化数据:feed和站内标记两条腿一起走,最大化资格。 - 标题重写:把品牌、型号、属性、场景词装进标题,这是回报最高的一步。 - 价格库存对齐、政策合规、运费退货填全:这些是拒登和降权的高发区。 - 用GSC+GA4归因:别信商家中心那个自然报表,换Search Console的商家listing过滤器和GA4的自然购物渠道。 - 多市场分开配:不同国家的价格、货币、运费、语言分别配置,别一套feed通吃所有市场。 出海的特殊之处在于多市场和多语言。同一件商品卖到不同国家,价格、货币、运费、甚至标题语言都不一样,feed要按市场分开配,才不会因为价格货币对不上被拒登。这块跟做国际化SEO的hreflang、多货币逻辑是一套思路。 ## 一个真实感很强的案例:户外储能站的免费收录翻身 回到开头那个户外储能站。保哥带他们做的时候,第一件事不是加投广告,而是先把免费收录这条被荒废的通道捡起来。 当时的情况是:商家中心账户早就建了,商品也被动同步进去了,但标题全是照抄厂商的型号命名(“X200便携电源”这种),一半SKU没有GTIN,产品页的Product结构化数据只标了价格、连库存和运费都没标,商家中心里一堆商品是“已拒登”状态没人管。免费收录露出稀稀拉拉,自然购物流量几乎可以忽略。 改动分三块:一是标题全部重写,把品牌、功率、容量、场景词装进去;二是补齐GTIN、把价格库存运费退货信息在feed和站内结构化数据里都填全、把拒登商品一条条修复;三是换用Search Console的商家listing过滤器盯效果,而不是看那个会骗人的自然报表。判断依据很朴素——先让商品拿到“已批准”资格,再让匹配数据尽量完整,剩下的交给Google去匹配。 几周之后,免费收录的展示和点击起来了,自然购物成了一个稳定的、不花广告费的流量来源。更意外的收获是,当他们后来在ChatGPT里测“推荐平价户外电源”时,自家产品开始零星出现在推荐里——这正是免费收录喂进AI购物池的连带红利。整个过程没多花一分广告费,动的全是数据。 ## 五个常见误区 误区一:想上Google购物必须投广告。2020年就过时的老黄历。免费收录是独立的自然通道,不花广告费也能进。 误区二:开通了就等于露出了。默认开启只是拿到资格,露不露、露多少取决于数据质量。商品是“已批准”还是“已拒登”,得自己去核。 误区三:免费收录和SEO是两码事。恰恰相反,两者高度重叠——都在追求数据完整、准确、合规,产品页结构化数据两边都要用。当成两套活来干,纯属重复劳动。 误区四:看商家中心的自然报表就能知道效果。那个报表会误导人。真要归因,换Search Console的商家listing过滤器和GA4的自然购物渠道。 误区五:AI购物时代免费收录不重要了。正好反过来。ChatGPT、Gemini大量借道Google购物的自然结果做推荐,免费收录成了被AI推荐的前置条件,比以前更重要。 ## 常见问题解答 ## 免费产品收录真的完全不花钱吗 是的,免费收录的曝光和点击本身不收费,这也是它区别于购物广告的核心。你要付出的是把商品数据做全、做准的功夫,以及建站、做结构化数据这些本来就该做的活。它省的是广告预算,花的是运营心思。 ## 没有GTIN的商品能进免费收录吗 能,但会吃亏。GTIN是Google用来跟全球商品目录做匹配和核验身份的关键标识符,有有效GTIN的商品免费收录可见度明显更高。自有品牌、定制品这类天然没有GTIN的商品,可以按Google的规则申请豁免或用其他标识符,但能有GTIN还是尽量有。 ## 免费收录和购物广告会互相打架吗 不会,反而互补。两者用同一套商家中心数据,但分发逻辑不同:广告靠竞价占顶部黄金位,免费收录靠匹配占下方和长尾位。官方也建议把付费和免费的feed统一成一套,别拆开。很多成熟的站是两条腿一起走,广告快速起量,免费收录托底长尾。 ## 开通免费收录多久能看到效果 比广告慢。广告钱一投就有量,免费收录要等Google抓取、审核、匹配,还得靠数据积累,通常要几周才能看出稳定的展示和点击趋势。它是个长期通道,别指望立竿见影,把它当地基而不是应急手段。 ## 免费收录对做AI购物可见度有什么用 用处很大。ChatGPT、Gemini这类AI给用户推荐商品时,大量借道Google购物的自然结果。研究显示ChatGPT推荐的头部商品有很高比例出现在Google购物前几名。你的商品没进免费收录,就基本进不了Google购物的自然结果,也就基本没机会被AI推荐。免费收录是AI购物推荐池的地基。 ## Shopify/WooCommerce/Magento怎么接免费收录 都有现成的官方或成熟第三方应用。Shopify用Google & YouTube应用,能把商品自动同步进商家中心并列为免费列表;WooCommerce和Magento也有对应的Google购物插件。核心是让商品数据自动、准确、及时地同步进商家中心,再配上站内产品页的结构化数据,两条通道一起打通。 ## 权威参考资料 - Google商家中心帮助中心 · 免费产品收录(Free listings for products) (https://support.google.com/merchants/answer/13889434?hl=en)——官方权威说明:商品可免费出现的七大曝光面、默认开启机制、必填商品属性、政策与运费退货门槛,以及“不保证展示”的免责定调。 - Google搜索中心 · 产品结构化数据文档(Product structured data) (https://developers.google.com/search/docs/appearance/structured-data/product)——讲清站内Product标记如何让商品进入图片、Lens等富结果体验,以及“结构化数据+商家中心feed两者都做能最大化资格”的官方建议。 - Google官方博客 · 现在可以免费在Google上销售(2020-04-21,Bill Ready) (https://blog.google/products/shopping/its-now-free-to-sell-on-google/)——免费收录回归的原始公告,“购物标签页将主要由免费列表构成”“无论是否投放广告”的战略定调来源。 - Shopify官方博客 · Google购物指南 (https://www.shopify.com/blog/google-shopping)——从卖家侧讲Google & YouTube应用如何同步feed、列为免费列表,以及“最显眼位置仍是付费、免费列表在下方”的现实定位。 - Semrush博客 · ChatGPT借道Google购物做推荐的研究 (https://www.semrush.com/blog/chatgpt-searches-google-shopping/)——用数据证明ChatGPT推荐的头部商品高比例出现在Google购物前几名,“优化Google购物结果是进入ChatGPT商品轮播最重要因素之一”。 - Search Engine Land · Google免费收录的八条实战洞察 (https://searchengineland.com/organic-shopping-insights-google-free-listings-458062)——点破商家中心自然报表的归因误导、改用Search Console商家listing过滤器与GA4自然购物渠道、品牌词蚕食、优质商店徽章、feed统一等一线经验。 ## 产品feed到底该谁管?这份被丢给投手的数据,正决定你在自然搜索和AI购物里露不露脸 - URL:https://zhangwenbao.com/product-feed-seo-asset-organic-ai-ownership.html - 分类:电商SEO - 发布:2026-06-10 | 更新:2026-06-24 - 摘要:产品feed已从投放工具升级为喂养Google购物、免费列表与AI Overviews、Gemini的商品真相层。本文拆解三位一体对齐、拒登常见坑、对话式新属性与UCP,讲清feed为何该由SEO与投放共同所有。 - 关键词:GTIN,电商SEO,AI购物,Merchant Center,产品Feed > **TLDR**:摘要:产品feed早就不是投放部门的私产了。同一份商品数据同时喂给Google购物、自然免费列表、AI Overviews、Gemini和ChatGPT购物,AI推商品时大量直接抄这份数据。可大多数出海独立站的feed是插件自动同步的,投手只盯ROAS,开发只管数据库,SEO的人压根不碰——这是个正被AI放大的盲区。这篇讲清楚feed为什么成了SEO资产、三处价格对不上怎样把你整批商品拒登、标题和GTIN该怎么为自然搜索和AI改、UCP把feed从展示位变成成交入口之后该谁来管。 > 摘要:产品feed早就不是投放部门的私产了。同一份商品数据同时喂给Google购物、自然免费列表、AI Overviews、Gemini和ChatGPT购物,AI推商品时大量直接抄这份数据。可大多数出海独立站的feed是插件自动同步的,投手只盯ROAS,开发只管数据库,SEO的人压根不碰——这是个正被AI放大的盲区。这篇讲清楚feed为什么成了SEO资产、三处价格对不上怎样把你整批商品拒登、标题和GTIN该怎么为自然搜索和AI改、UCP把feed从展示位变成成交入口之后该谁来管。 ## 先说结论:feed不再是投放部门一个人的事 过去十几年,产品feed的归属几乎是默认的:谁投购物广告,谁管feed。原因也简单——feed最早就是为Google Shopping的付费广告服务的,钱在那头,转化在那头,最大的预算和营收都压在付费侧。SEO的人最多在Search Console里瞄一眼自然购物结果,feed长什么样、字段怎么填,跟他们没关系。 这套分工现在彻底失效了。同一份feed,今天同时决定四件事:你的商品能不能进付费广告、能不能进免费购物列表、能不能被自然搜索的购物卡片选中、以及能不能被AI Overviews和Gemini在回答里点名。换句话说,feed已经从“投放弹药库”升级成了一个跨渠道的商品真相层。 保哥这两年帮出海客户做电商SEO诊断,越来越多的问题最后都指回同一个地方:不是页面没优化,不是外链不够,而是那份谁都没真正在管的feed,悄悄把整批商品的可见度拖垮了。所以这篇的核心问题只有一个——产品feed到底该谁来管。 ## 产品feed到底是什么,它喂给了谁? 产品feed,说白了就是一张结构化的商品清单:每个SKU一行,标题、价格、库存、图片、GTIN、品类、变体关系……一列一列填好,提交给Google Merchant Center(商家中心)。它不是给人看的网页,是给机器读的数据库表。 关键在于它喂给了谁。Merchant Center里的这份数据,会汇进Google的Shopping Graph(购物图谱)——一个号称收录了500多亿条商品列表的庞大结构。这个图谱不只供给购物广告,它同时是免费购物列表、自然搜索购物卡片,以及AI Overviews、Gemini购物推荐的底层数据源。 这意味着一条事实:当用户在AI里问“适合下雨天通勤的双肩包推荐”,AI给出的商品卡片,很大概率不是凭空生成的,而是从这份商品数据里捞出来的。你的feed填得好不好,直接决定你露不露脸。 ## 为什么独立站的feed几乎没人“真正”在管? 出海独立站这边,情况往往比品牌大厂还糟。绝大多数Shopify、WooCommerce站点的feed是怎么来的?装个Google&YouTube渠道插件,或者一个feed同步App,勾选“自动同步”,从此再没人打开过它。 于是出现一个典型的三不管真空: - 投手只看ROAS。他优化feed标题,是为了让购物广告点击更便宜、竞价更精准,会往标题里塞品牌词、促销词、投放友好的修饰语。 - 开发只管数据库。商品字段从后台数据库导出,schema结构化数据是主题或插件自动生成的,对不对得上feed没人核。 - SEO只盯GSC。做SEO的人盯着Search Console的网页报告,Merchant Center那个后台他可能连登录权限都没有。 结果就是:一份决定自然搜索和AI可见度的核心数据,被当成纯投放工具,按付费逻辑填写,没有任何人从搜索者和AI的角度去看它一眼。这就是盲区的来源。 ## “三位一体”:feed、结构化数据、网站本身必须对齐 要理解feed为什么这么容易出事,得先认清Google判断你商品时,其实在读三套独立的系统: - 产品feed——Merchant Center里那份提交的商品清单。 - 页面结构化数据——商品页上的JSON-LD、schema.org的Product标记。 - 网站本身——真正渲染出来、用户和爬虫看到的那个页面。 这三套各有各的规则、各有各的字段格式,平时互不打扰。但Google会拿它们互相印证:feed说这个商品99美元,schema说89美元,网站页面上标着95美元——它信谁?一旦三者对不上,轻则信任打折,重则整批商品被拒登。这三套必须像三个声部一样唱同一个调,少一个对不齐,整首歌就垮。 如果你的商品页用的是Woo或Shopify插件自动生成schema,更要警惕这一层。之前那篇WooCommerce变体SEO的深度拆解 (https://zhangwenbao.com/woocommerce-product-variations-seo-schema-canonical-url-deep-dive.html)里讲过,变体的schema、canonical和URL三层一旦各说各话,就是这类对不齐的典型重灾区。 ## 三处价格对不上,会发生什么? 讲个真实会发生的场景。一个卖家具的站,同一款办公椅,四个地方写着四个价格: - 网站页面:34.80英镑 - 提交的feed:34.80英镑 - Merchant Center后台显示:33.54英镑 - 页面schema标记:29英镑(不含增值税那个数) 看起来feed和网站是一致的,问题出在schema里那个不含税的29英镑。Google有个机制叫自动商品更新(automatic item updates),它会拿页面schema的数据去校正甚至覆盖feed里的价格。于是schema里那个错误的29英镑被抓去覆盖了feed,价格和落地页一核对,对不上,商品被批量拒登。 这里的教训不是“别填错价格”这么浅。是当你的schema由插件自动生成、又没人核它和feed对不对得上时,一个不含税的历史遗留数字,就足以让你整批商品从购物结果里消失。价格是feed里最敏感的字段,一点偏差就触发拒登。 ## 数据全对了商品还是消失,可能是这个基础设施坑 更隐蔽的一种:feed、schema、网站三处的数据明明全对齐了,商品还是大面积掉。 有个站就栽在这上面。它的数据干干净净,但CDN的安全设置把Googlebot当可疑流量拦了。Google没法抓取落地页,就没法拿网站去核验feed,核验不了,干脆判定不可信,整批拒登。 这件事对出海独立站特别有警示意义——很多站为了防爬、防攻击,给CDN(Cloudflare之类)配了激进的安全规则,结果连Googlebot都一起挡了。feed填得再漂亮,落地页爬不到,照样白搭。所以排查feed问题时,别只盯数据本身,先确认Google到底进不进得来你的页面。 ## feed标题为什么不能照搬投放那套? 标题是feed里最高杠杆的字段。Google匹配商品和查询时,极度偏重feed标题里的词。问题是,投放友好的标题和搜索友好的标题,根本是两回事。 投手写标题,习惯把品牌词前置、塞满促销修饰语,因为那样竞价更精准。但自然搜索和AI要的,是贴近用户怎么说话的标题。举个对比:与其写“高品质防水材料”,不如写“防小雨、适合通勤的防水双肩包”——后者直接命中了用户嘴里那句口语化的搜索。 这就是为什么feed需要一份独立的自然策略。一份只为付费竞价优化过的标题,把高意图关键词埋在后面、堆满品牌前缀的标题,在自然搜索和AI匹配里是吃亏的。SEO的人最懂用户怎么搜,这恰恰是feed最缺的那双眼睛。 ## GTIN为什么是不能省的硬通货? GTIN(全球贸易项目代码,就是商品条码那串数字),在feed里几乎是不能省的。Google官方在商品数据规范 (https://support.google.com/merchants/answer/7052112)里反复强调:只要厂家给这个商品分配了GTIN,就该填,填了能实打实拉高表现。 具体到数据:正确匹配的GTIN,能带来多到40%的额外点击。更关键的是,GTIN是Google把同一款商品在全网的评论、价格聚合到一起的主要信号——没有它,你的商品在Google眼里就是个孤儿,没法和别家的同款打通。 但官方也有一句硬约束值得划重点:拿不准就别填,绝不要猜、不要编一个GTIN糊弄。填错的GTIN比不填还糟,会直接触发拒登。出海卖自有品牌、白牌、定制款的独立站尤其要注意——没有真GTIN的商品,按规则用对应字段标清楚,别硬塞一个假的。 ## 库存和变体怎么映射才不被拒登? 库存字段(availability)看着简单,坑不少。Google只认四个值:in_stock(有货)、out_of_stock(无货)、preorder(预售)、backorder(缺货补订)。如果你标了preorder或backorder,还得配一个availability_date告诉Google什么时候到货,缺了这个日期同样会出问题。 变体的映射更容易翻车。feed是张扁平的表,靠item_group_id这个字段把同一款的不同变体(颜色、尺寸、瓦数)串成一组。但schema那头是嵌套结构,用ProductGroup把父子关系一层层套起来。两套表达同一件事的逻辑完全不同——feed是平的、靠ID关联,schema是树状、靠嵌套。一旦feed的item_group_id和schema的ProductGroup对不上,Google就会困惑:这到底是一款的几个变体,还是几款独立商品? 做电商SEO,变体治理本来就是硬骨头。feed这一层的变体映射,必须和页面schema、canonical保持一致,否则前面说的“三位一体”就从变体这里先裂开。 ## feed里的图片,别当成无关紧要的装饰 图片是Merchant Center里最常见的拒登来源,没有之一。一张被判定为含促销文字、带水印、白底不达标或分辨率太低的主图,足以让商品直接被拒。出海独立站常踩的坑是:主图沿用了详情页那种带大字促销角标的设计,在网页上看着挺好,提交进feed就触发拒登。 除了合规,图片还直接影响表现。实测显示,同时提供标准白底主图和真实使用场景图(lifestyle image)的商品,互动明显更高——白底图帮Google识别商品本体,场景图帮用户想象用起来什么样,两者各司其职。只放一种,等于少了一半说服力。 所以盘feed时,图片这一栏别跳过:先确认主图干净合规、不带叠加文字,再补上真实使用场景图。这是个门槛低、回报却实在的动作,很多站只是把图换对,曝光就回来一截。 ## 促销和折扣价,怎么在feed里标才不自相矛盾? 出海独立站促销频繁,这恰恰是feed最容易出价格事故的地方。Google有专门的字段:price填原价,sale_price填促销价,再用sale_price_effective_date标明促销的起止时间。三者要配合好,少填或填错,Google就会拿feed价和落地页的促销价一核对,发现对不上,判你价格不一致然后拒登。 典型翻车是这样:站上挂了大促,落地页显示打完折的价格,但feed里只更新了price没用sale_price,或者促销结束了feed还停在折扣价没回滚。Google抓页面一看,feed一个价、页面另一个价,直接判价格失配。大促期间商品集体掉,往往就栽在这。 稳妥的做法:促销用sale_price加生效时间区间来表达,别直接去改price;把feed的更新频率提上来,确保价格、库存的变动能及时同步进去;大促前后专门核一遍feed价和落地页价对不对得上。促销节奏越密,这道核对越省不得。 ## 那些“对话式”新属性,是给AI准备的弹药 除了标题、价格、GTIN这些老字段,Google这两年往feed里加了一批明显是冲着AI去的新属性,独立站值得提前布局。 - product_highlight——可扫读的卖点短句,会出现在购物结果的展开视图里,相当于给商品配几句一眼能看懂的好处。 - product_detail——结构化的规格参数,Google用它来支撑那套购物筛选器(faceted filters),用户按材质、尺寸、功率筛选时,靠的就是这个字段。 这套结构化规格,和站内的筛选器治理是一脉相承的逻辑。电商筛选器URL怎么治理不爆炸 (https://zhangwenbao.com/faceted-navigation-filter-url-seo-crawl-trap.html)那篇里说过,站内faceted导航和feed里的product_detail,本质都是在帮搜索引擎理解“这件商品能按什么维度被筛出来”。 更要紧的是一批对话式商品属性:产品FAQ、使用场景、兼容配件、可替代商品。这些字段是专门设计来喂给AI购物模式、减少AI幻觉的——当AI回答“这款扫地机能配什么集尘袋”时,它要的就是兼容配件这种结构化信息,而不是去你的商品描述里瞎猜。你不填,AI就只能从别处拼凑,或者干脆不推你。 这份规范本身在2026年也悄悄收紧了几道。Google商品数据规范 (https://support.google.com/merchants/answer/7052112)里新加了一批明显冲着AI购物去的硬约束:商品主图最低分辨率提到了500×500像素,眼下还是警告期,2027年1月31日起正式强制,图太糊的SKU会被一路警告到拒登;新增的video_link视频属性(6到240秒)让AI购物结果里也能挂上你的商品视频;还多了structured_title和structured_description两个字段,配合digital_source_type子属性,专门用来如实标注哪些标题、描述是生成式AI写的——你用AI辅助写feed文案没问题,但Google要你诚实声明来源,藏着掖着反倒成了风险。这些更新单看都不起眼,可只要图片不达标、或该填的属性空着,整批商品在AI购物里的露出就先矮一截。 ## AI购物到底怎么用你的feed? 说了这么多AI,得用数据落到实处。Google官方在那份生成式AI搜索指引里,把Merchant Center的feed明确点名为AI回答里商品可见度的关键。具体怎么用?Shopping Graph那500多亿条商品,直接供给AI Overviews和Gemini。 更有意思的是跨引擎的发现。有一份实测显示:ChatGPT购物轮播里,高达83%的商品和Google Shopping的自然结果是重合的,其中60%来自购物结果的前10位。这说明连ChatGPT这种非Google系的AI,推商品时也大量依赖Google Shopping这套传统自然数据,而不是自己凭空生成推荐。 同时,AI Overviews已经出现在大约14%的购物类查询里,而2024年底这个数字才约2%。增速摆在这儿。一句话——你的feed在Google自然购物里排得好不好,正越来越直接地决定你在各家AI购物里露不露脸。想系统地测AI到底引不引用你,可以参考这篇衡量AI可见性的漏斗查询树框架 (https://zhangwenbao.com/ai-visibility-funnel-query-tree.html)。 ## 把feed当成喂给AI的“商品知识”,而不只是检索词 前面讲的字段优化,容易让人误以为feed只是“把词填对、让机器检索到”。在AI时代,得换个心智:feed是你喂给AI的一份结构化商品知识,AI靠它来“理解”你的商品,而不只是“匹配”关键词。 差别在哪?检索时代,Google看你标题里有没有那个词;理解时代,AI要搞清楚这件商品到底是什么、解决什么问题、和什么搭配、替代品是谁。你feed里的product_detail、使用场景、兼容配件、FAQ,喂的就是这套“理解”的原料。填得越结构化、越贴近真实使用语境,AI越能准确地把你的商品摆进对的那段对话里。 这和评论、问答内容的GEO联动是同一个道理。电商产品评论SEO的Schema与GEO联动 (https://zhangwenbao.com/ecommerce-product-reviews-seo-guide.html)那篇讲过,结构化的评论和问答能帮AI把商品的真实使用反馈纳进回答;feed里的结构化属性,则是从商品本体这一侧,把“它是什么、好在哪”讲给AI听。两边合起来,才凑成一件商品在AI里的完整画像。 ## UCP来了:feed正从“展示位”变成“成交入口” 如果说前面讲的是feed决定你露不露脸,那UCP讲的是feed正在决定你能不能直接成交。 UCP是Google推的Universal Commerce Protocol(通用商务协议),一个开放标准。它让AI代理能在AI Mode和Gemini里直接发现商品、组购物车、完成下单——也就是说,用户在AI对话里聊着聊着,就能点个“买”字直接成交,整个过程建在Merchant Center的数据之上。feed里新增了一个native_commerce属性,用来标记这个商品有没有资格走UCP的直接购买。 这事不是PPT愿景。Google官方的UCP开发者文档 (https://developers.google.com/merchant/ucp)已经上线,协议和AP2(代理支付协议)、A2A、MCP这些行业标准互通,2026年3月还简化了通过Merchant Center接入的流程,明摆着要把各种体量的零售商都拉进来。而且有个对独立站友好的设计:你仍然是Merchant of Record(记录商家),客户关系和数据的控制权还在你手里,不是把生意拱手交给平台。 把这条逻辑链接起来看就很清楚了:feed→Shopping Graph→自然购物→AI推荐→AI里直接成交。这条链上每一环,源头都是那份feed。它早就不是投放部门的私产,而是整条商品发现与成交链路的地基。 ## feed质量本身,就是一个信任信号 还有一层很多人忽略:feed的整体健康度,本身就被Google当成一个信任信号在用,而不只是“跑广告的门槛”。 Merchant Center账户的健康状况——拒登率高不高、有没有一堆缺字段的警告、Shop Quality这类商家质量评估给你打多少分——会影响你的商品在Google所有界面上的资格和展示。一个常年高拒登、字段残缺的账户,传递出的信号是“这家数据不靠谱”,于是不只是广告受影响,自然列表、免费列表、AI推荐一起跟着降权。 反过来说,把feed的健康度当成一项长期资产来养——字段完整、拒登率低、数据干净——本身就是在给整个域名的商品可信度加分。这是个慢变量,但复利可观。 ## 那到底该谁拥有feed? 绕了一大圈,回到那个核心问题。这个问题,保哥的答案很明确:不是把feed从投手手里抢过来,而是共同所有。 为什么SEO必须进来共管,理由很硬: - feed数据是写给数据库的,不是写给搜索者的。它需要把高意图关键词前置进标题、需要更精细的品类划分——这恰恰是SEO的专长。 - 结构化数据是个隐藏变量。它同时影响付费、自然富结果、免费列表,谁都管一点等于谁都没管。 - feed质量越来越是信号而非门槛。这条已经从投放问题,变成了影响全站商品可信度的SEO问题。 - 自然侧的赌注变了。feed现在喂养的是越来越显眼的搜索结果版位和AI回答,这块的权重早不是当年的边角料。 落到团队分工,理想的模型是三方协作:SEO出关键词理解、语义判断和AI匹配的知识;商品/运营团队管商品数据的源头和信息维护;投放团队管feed的基础设施、工具和规模化能力。三方各守一段,谁也别想独吞,谁也别想甩锅。 ## 共同所有权落地,长什么样? “共管”说着轻松,落地得有具体抓手,不然就是开会扯皮。保哥建议几件能立刻动起来的事: - 建一层跨部门的监控。把拒登告警同时路由给SEO和投手两边,别让feed出问题只有投手一个人知道。 - 每月做一次结构化对账。把feed的字段完整度、schema、网站页面三处拉出来比一遍,专门盯前面说的“三位一体”对不对齐。 - 明确商品数据的唯一真相源。建议把feed定为权威源,schema和网站都以它为准去校验,避免再出现四个价格的惨案。 - feed架构决策从一开始就拉上SEO。别等feed搭完、广告跑起来了,SEO才进来打补丁。 - 善用自定义标签。custom_label除了给投放分组竞价,也能用来给自然侧的分析打标,一份字段两边用。 这套机制的核心不是多开几个会,而是让“feed出问题”这件事,从投手一个人的暗箱,变成SEO和投放都能看见、都有责任的公开账本。 ## 一个出海案例:自然feed策略带来的变化 讲个保哥手上的例子,做出海家居照明的独立站,卖各种吊灯、台灯、户外灯串,SKU多、变体杂(色温、瓦数、灯罩材质各成一堆)。早期他们的feed是投放App一键同步的,标题全是“品牌名+型号+高品质LED节能灯”这种投放腔,没人从搜索角度碰过。 问题先从拒登暴露:一批商品因为schema里的含税价和feed对不上被批量拒登,掉得莫名其妙。我带他们做了三件事——先把feed定为唯一真相源、让schema和网站都对齐它;再把标题从投放腔改成口语化的“暖光、适合卧室的北欧吊灯”这种贴搜索的写法;最后补齐GTIN、把变体的item_group_id和页面schema的ProductGroup一一对上。 最容易被忽略的反而是最早暴露问题的那批拒登——他们一开始以为是Google抽风,差点去提申诉,幸好先做了三处比价,才揪出schema里那个不含税的历史价在背后作怪。 变化不是一夜暴富式的,但方向很明确:免费购物列表的曝光稳步回来了,自然侧的点击成本远低于投放,连AI里也开始零星出现他们的商品。这个机制层面的逻辑,和行业实测是吻合的——业内有实测显示,一个大电商品牌专门做自然feed策略后,自然列表点击率环比涨了10%、购买率提升4%;单品测试里,免费列表营收涨了92%、可见度涨83%、加购涨14%。数字会因站而异,但“专门为自然和AI优化feed,回报真实存在”这件事,是站得住的。 ## 怎么自测你的feed在自然和AI里露脸了没? 不用一上来就买贵工具,几个低成本动作就能摸清家底: - 登录Merchant Center,先看诊断页。拒登多少、缺哪些字段、有没有红牌警告——这是体检第一步。 - 挑5到10个核心商品,三处比价。网站、feed、schema,价格和库存一字一字对,看会不会出现“四个价格”。 - 拿真实问句去各家AI问一遍。用客户会问的口语化问题(“适合送礼的暖光小夜灯”),分别问ChatGPT、Gemini、Google AI Overviews,看推不推你、推的是不是你想露出的款。 - 查Googlebot进不进得来。用GSC的网址检查工具,确认落地页能被正常抓取,别栽在CDN拦爬这种暗坑上。 把这套自测每月固定跑一遍,比一年拍脑袋猜一次强得多。 ## 独立站现在就能动手的清单 把上面拆散的动作收拢成一张可执行清单,按优先级排: - 给SEO开通Merchant Center的查看权限,先让做SEO的人能看见这份数据。 - 把feed、schema、网站三处的价格和库存对齐,定feed为唯一真相源。 - 逐个商品核GTIN,有真码就填、没真码按规则标清楚,绝不编造。 - 把投放腔的标题改写成贴近用户口语和高意图词的版本。 - 补齐变体的item_group_id,并和页面schema的ProductGroup对上。 - 填上product_highlight、product_detail,以及FAQ、使用场景、兼容配件这些对话式属性。 - 关注UCP的native_commerce资格,提前为AI里直接成交做准备。 - 建立拒登告警同步给SEO和投手的机制,每月做一次三方对账。 ## 几个最容易踩的坑 - 以为feed是投手一个人的事。这是所有问题的根源,feed早就是跨渠道的SEO资产。 - schema交给插件自动生成后再不核对。一个含税/不含税的差价,就能触发批量拒登。 - 为防爬把Googlebot也挡了。数据再干净,落地页爬不到照样拒登。 - 标题照搬投放那套。品牌词前置、堆促销修饰语,在自然和AI匹配里吃亏。 - 为了凑GTIN去编一个假码。填错比不填更糟,宁可按规则标“无GTIN”。 - 只看付费数据,从不看自然和AI的露出。免费列表和AI推荐的增量,全被忽略了。 ## 写在最后:feed是地基,不是配件 把这篇的逻辑收一下:产品feed早已不是投放部门的一件工具,而是同时支撑付费、自然、免费列表和AI购物的商品真相层。它决定你的商品在Google购物里排不排得上、在AI回答里被不被点名、在UCP里能不能直接成交——这条链上每一环,源头都是它。 可现实是,这份地基级的数据,在大多数出海独立站里恰恰最没人管:投手按ROAS填、开发按数据库导、SEO压根不碰,中间的真空正被AI一天天放大。把feed当成SEO资产、拉SEO进来共管、把三处对齐和每月自测变成例行,不是什么高深操作,却是当下回报最确定的一块。地基稳了,后面UCP这些新功能才接得住。 ## 常见问题解答 ## 小独立站没有专职投手,feed也要这么折腾吗? 越是小站越该重视。小站本来就没多少付费预算,免费购物列表和AI推荐这种零成本的自然露出,对你才更宝贵。哪怕只有一个人,也该把feed当成SEO资产来管,至少把三处对齐、标题改口语化、GTIN填准这三件基础做掉。 ## 我用Shopify自动同步的feed,需要单独建一份自然feed吗? 不一定要物理上建两份,但要有“为自然和AI优化”的意识。自动同步的feed默认是按投放或平台规则填的,你至少要回头检查标题、GTIN、变体映射这些自然侧吃重的字段,必要时用feed管理工具或规则覆盖掉默认值。关键是别再把自动同步当甩手掌柜。 ## feed和页面schema到底以谁为准? 建议把feed定为权威的唯一真相源,让schema和网站页面都向它看齐校验。因为Google有自动商品更新机制会拿schema去覆盖feed,如果你的schema是插件乱生成的,就容易酿成价格被错误覆盖、整批拒登。定好真相源、定期对账,是避免“四个价格”惨案的根本办法。 ## 没有GTIN的白牌、定制商品怎么办? 按Google商品数据规范的要求,确实没有厂家分配GTIN的商品,用对应字段(品牌加MPN等)标清楚即可,不需要也不应该编一个假GTIN。填错或编造的GTIN会直接触发拒登,比留空还糟。把identifier_exists这类字段按规则处理好就行。 ## UCP现在就要接吗,还是再等等? 看体量和市场。UCP已经在简化Merchant Center接入流程、往更多国家和品类扩,AI里直接成交是明确的方向。即便现在不急着接native_commerce,也建议先把feed的基础健康度做扎实——因为UCP和所有AI成交场景,地基都是这份feed。地基不稳,新功能来了也接不住。 ## feed优化和站内SEO,资源有限先做哪个? 不是二选一,但如果你是商品多、流量主要冲着购物来的电商站,feed的优先级该往前提。原因是feed的问题往往是“整批掉”的系统性故障,一个价格失配就拖垮几百个SKU,杠杆比单页优化大得多;而且免费列表和AI购物的露出几乎零成本。先把feed的健康度和三处对齐这种地基做扎实,再回头精修单页内容,性价比更高。 ## 权威参考资料 ## 电商SEO审计逐条查网址要跑100天,改成按页面模板抽样半天就查完了 - URL:https://zhangwenbao.com/ecommerce-seo-audit-template-level-sampling.html - 分类:电商SEO - 发布:2026-05-17 | 更新:2026-05-17 - 摘要:几万行问题清单排不进开发排期,是因为报表的单位是网址、问题的产生单位是模板。用9个电商大站565个页面设计的数据讲清模板级抽样抽多少条、怎么抽,附6个自查动作与1个上线卡点。 - 关键词:Search Console,技术SEO,电商SEO,页面模板 > **TLDR**:摘要:一份电商站的技术审计报告动辄导出几万行,每行一个网址。但这些网址不是一个一个写出来的,它们出自几十个模板;同一个错误在报表上占了8000行,落到代码里只是一处判断写反了。Baymard今年发的电子与办公品类基准里,9个大站一共只被评了565个页面设计,平均每站62.8个——这就是那几十万个网址真正的形状。报表按网址计数、施工按模板计数,两个单位差三到四个数量级,于是一个能一次性改掉的问题,在优先级列表里被拆成几千件小事,永远排不进这周。 > 摘要:一份电商站的技术审计报告动辄导出几万行,每行一个网址。但这些网址不是一个一个写出来的,它们出自几十个模板;同一个错误在报表上占了8000行,落到代码里只是一处判断写反了。Baymard今年发的电子与办公品类基准里,9个大站一共只被评了565个页面设计,平均每站62.8个——这就是那几十万个网址真正的形状。报表按网址计数、施工按模板计数,两个单位差三到四个数量级,于是一个能一次性改掉的问题,在优先级列表里被拆成几千件小事,永远排不进这周。 做技术SEO久了会有个熟悉的画面:从Search Console里导出一份问题清单,几千上万行,每行一个网址。你把它发给研发,研发看一眼说,这得排期。然后这件事就搁下了。 下个季度再导一次,行数只多不少。 保哥今年翻Baymard一份电子与办公品类的体验基准时,注意到一个不起眼的计量口径。那份研究评了9个电子与办公类的大站,公布的数字里有一项是页面设计数:B&H Photo 80个,Best Buy 85个,Newegg 62个,最少的HP 52个,9个站加起来565个。 这几个站,随便哪一个的商品数量都在几十万量级。但真正被打开、被逐条打分的界面,一个站只有五六十个。 这个数字一开始看着像是研究方法的限制——毕竟人工评测做不了几十万页。但换个方向想,它其实是那几十万个页面的真实形状:几十万个网址是几十个模板渲染出来的,逐条看几十万遍,看到的东西也就那么多。 问题在于,我们平时用的所有报表、所有工单、所有优先级列表,用的都不是这个单位。 ## 一份电商SEO审计报告有几万行,落到代码上真正要改的有几处? ## 先把两个数并排放一次 拿一个中等规模的跨境电商站举例,商品4000款,每款平均4个变体,加上分类页、筛选页、内容页、账户页,被搜索引擎发现的网址大概在18000到25000之间。这是第一个数。 同一个站,主题目录下的模板文件有多少个?一个Shopify主题大概40到60个liquid模板,一个WooCommerce主题加上插件覆写大概50到80个php模板。这是第二个数。 两个数放在一起,比值是300到500。也就是说,平均每一个模板负责渲染三四百个页面。这个比值在越大的站上越夸张,百万级SKU的站能到五位数。 ## 那几万行是怎么产生的 报表之所以按网址计数,原因很实在:搜索引擎抓的是网址,索引的是网址,排名的是网址。Google的整条流水线从头到尾都以网址为单位,这一点在搜索引擎抓取、索引与排名的三段式流程 (https://zhangwenbao.com/how-search-engines-work-crawl-index-rank.html)里是明确的。 所以Search Console给你的东西必然是网址列表。页面索引报告里,每一个未被收录的网址占一行,附上一个原因;例子表最多给1000行,而且官方文档明说了,即使不足1000行也不保证列全。 这个上限本身就值得琢磨——Search Console的数据阈值与1000行取样上限 (https://zhangwenbao.com/gsc-data-hidden-limits-1000-row-url-bucket-threshold-workaround-engineering.html)是很多人踩过的坑,但大多数人的应对是想办法绕开上限拿更多行,很少有人反过来问:为什么要拿更多行。 ## 那几十处是怎么数出来的 把报表里那几千行按产生原因归类,你会发现它们不是几千个独立事件。分类页的分页参数生成了重复内容,这是一处逻辑;商品变体各自生成了独立网址却没写规范标签,这是第二处;筛选组合被爬虫展开,这是第三处。 三处逻辑,几千行报表。这个映射关系不是特例,它是模板化站点的常态。程序化SEO靠模板加数据源批量生成页面 (https://zhangwenbao.com/programmatic-seo-template-data-source-quality-scalability-mechanism.html)的时候,大家都很清楚一个模板能生出几千页;但反过来做诊断的时候,这个常识就用不上了。 为什么用不上?因为生成的时候你站在模板这一侧,看到的是一份模板加一份数据;诊断的时候你站在报表这一侧,看到的是一份网址列表,模板信息在那份列表里根本不存在。 ## 两个数一相除,得到的是什么 报表行数除以真正要改的地方数,这个比值保哥习惯叫它错位比。它衡量的不是问题有多严重,而是你手上这份材料被打散到了什么程度。 比值等于1的时候最舒服:报表上一行,代码里改一处,这是内容站或者小型企业站的常态。比值到了几百上千,你面对的就不再是一个待办列表,而是一堆碎片。 碎片有个特别不好的性质:它没法被估工时。研发看到8000行会说排期,看到商品页模板里的送达日期分支写反了会说下午改。同一件事,换了个说法,从一个季度变成一个下午。 站点规模 | 报表行数量级 | 模板数 | 错位比 | 建议 | 企业官网 | 几十 | 10到15 | 约5 | 按网址推进即可 | 内容站 | 几百 | 15到25 | 约20 | 按网址推进即可 | 小型独立站 | 一两千 | 30到40 | 约50 | 做一次归组划算 | 中型跨境电商 | 一两万 | 40到60 | 约300 | 必须换单位 | 大型电商 | 几十万 | 50到80 | 数千 | 必须换单位 | ## 这不是在说报表没用 得把话说清楚,按网址组织的报表没有任何问题,它甚至是唯一诚实的组织方式——搜索引擎确实是那样看你的站的,Search Console只是如实转述。Search Console各报告的定位与诊断路径 (https://zhangwenbao.com/google-search-console-complete-guide-diagnosis.html)该怎么用还是怎么用。 要改的是接收端。报表按网址交付,你按模板接收,中间那一次换算得有人做。现在的情况是这次换算没有归属:SEO拿到报表直接转发,研发拿到几千行直接排期,两边都没有做那次归并。 更麻烦的是,谁都没觉得少了一步。报表是官方的,转发是标准动作,排期是正常流程,链条上每一环都合规,只有结果不对。 ## 三句判据,第三句不用问任何人 判断自己是不是正踩在这个坑里,三句话就够。 第一句:这个问题在你的报表上占了几行。第二句:修好它需要改几个地方。第三句:前两个数相除等于几。 前两句都需要动手查,第三句是纯除法。而且这三个数里没有一个需要向别人索取——报表在你自己的Search Console里,模板在你自己的代码库里,除法在你自己的脑子里。这跟很多需要供应商配合才能查清的问题完全不同。 ## 跟分母被划小不是一回事 前阵子写过一类相邻的毛病:一个百分数只公布分子的性质,不公布分母的边界,读者会自动把分母补成全部。那种情况下问题出在数据发布方,他们主动把统计范围缩小了,而你从数字表面看不出来。 本文这一类不一样。没有人缩小任何范围,报表给的是全量,一行都没藏。问题出在这份全量数据的计量单位跟你要做的事对不上。 区别在哪儿最要紧?那一类的解法是追问纳入标准,问清楚了就能还原;这一类追问没有意义,因为对方给的就是全部,你追问的结果还是那几千行。要解决只能自己换单位。 ## 跟观测者进不去也不是一回事 还有一类相邻情况值得先排除掉:有些界面之所以没有数据,是因为要看到它得先付出很大代价——真下一单、真付一笔钱、真等上十几天,评测机构进不去,你自己的团队通常也进不去。那种情况下缺的是观测行为本身,报表上那一格是空的。 本文说的这件事恰恰相反:数据全都在,一行不缺,覆盖率百分之百。你能看到每一个网址,能看到每一个网址上的每一个问题,什么都没少。少的只是一次归并。 所以两者的难度也完全不同。观测不到的那一类需要额外投入才能补上,本文这一类不需要任何新投入,只需要把已经拿到的东西按另一个维度重新数一遍。从投入产出上看,它可能是技术SEO里最便宜的一次改进。 ## 为什么这件事很少被当成问题提出来 保哥想过一阵这个问题。最合理的解释是,错位比这个东西在小站上根本不存在——一个80页的企业官网,模板12个,网址80个,比值不到7,你按哪个单位数结果都差不多,两种口径给出的优先级排序几乎一致。 大多数人的SEO经验是从这种规模的站上长出来的,习惯也是。等到手里的站长到几万页,习惯不会自动切换,因为中间没有任何一个时刻会跳出来提醒你该换单位了。它是连续变化的,从7到70到700,每一步都不明显。 再加上一点:按网址读报表这件事永远不会出错。你按网址读,读到的每一条都是真的,改掉的每一条也确实改掉了。它只是慢,而慢这件事在没有对照组的时候感觉不出来。 这跟技术SEO债务越积越多拖累流量 (https://zhangwenbao.com/seo-technical-debt-audit-and-digital-asset-management.html)那一类问题的手感很像——单看每一笔都不致命,坏就坏在它们会持续挂在账上,而清账的速度取决于你用哪个单位记账。 ## 换了单位之后,待办数会突然变得很小 这里得提前打个预防针,不然下个月要挨骂。把同一份报表从网址口径换成模板口径,待办条目数会从几千掉到几十,掉两个数量级。这个数字变化跟工作量没有关系,纯粹是换了个单位。 如果这个数被当成成绩汇报上去,麻烦在后头。按模板修完一轮之后,剩下的确实是页面级的个案——某个SKU的图挂了、某条内容被误删了——这些没法归到任何模板上,条目数会重新往上爬。 到那时候再解释单位换过了,听起来全像找补。所以动手之前先用一句话说清楚:这个数会先掉一大截再回升一点,掉的那部分是被合并的,不是被修掉的。 ## 这套换算对多大的站才划算 保哥的经验是错位比过50就值得做一次,过200就必须做。低于50的站直接按网址推进反而更快,多加一层归并纯属仪式感。 还有一个更简单的判据不用算比值:如果你最近三次把问题清单发给研发,三次都听到了排期两个字,那就是该换单位了。研发说排期通常不是在推诿,是他们从那份材料里读不出工作量,读不出工作量就只能给一个最保守的答复。 换成模板口径之后,同一份材料读起来是这样的:三个模板,每个模板一处判断,其中两处在同一个文件里。这种描述是可以估工时的,而可估工时的事情才排得进这周。 ## 先别急着数模板,先确认你数的是不是模板 说到数模板,很多人第一反应是打开主题目录数文件个数。这个做法能得到一个数,但那个数经常是错的,因为文件数跟渲染形态数不是一回事:一个商品页模板里可能有五六个分支,缺货走一条、预售走一条、礼品卡走一条、带电池的走一条,每条分支渲染出来的页面在用户眼里、在爬虫眼里都是不同的东西,可它们共用同一个文件。 反过来也有:三个不同的文件可能渲染出几乎一样的页面,比如某次改版留下的旧模板还挂在两个老分类上,代码不一样但输出没差别。按文件数你会数出3,按形态数只有1。 所以正确的问法不是有几个模板文件,而是改动一处会同时影响哪一批页面。这个问法直接对应你要做的事——排期、验收、回归测试,全都是围绕改动一处展开的,而不是围绕文件展开的。 ### 组件化之后模板边界确实模糊了,还能这么数吗 能,但要换个层次数。前端全面组件化之后,一个页面是几十个组件拼出来的,模板这个词在代码里可能已经找不到对应物了。这时候该数的是页面级的组装配置,也就是路由到组件树的那一层映射,通常还是几十个量级,跟传统模板数在同一个数量级上。 组件化带来的真正变化不是模板变多了,而是一个问题可能同时落在两层:既可能出在某个组件里,也可能出在某个页面把这个组件配错了参数。前者影响所有用到它的页面,后者只影响一类页面。诊断的时候得先分清是哪一层,不然改错地方。 这跟前端工程师和SEO协作的那几个动作 (https://zhangwenbao.com/frontend-engineer-seo-collaboration-7-actions-semantic-cwv-render.html)里说的是同一件事的两面:前端很清楚自己改的是组件还是页面,SEO拿到的报表里这个信息完全不存在,两边各说各的,很多沟通成本就是这么来的。 ### 建站平台不同,数出来的东西也不同 Shopify这类平台上模板边界最清楚,template加section加snippet三层结构摆在那儿,数起来几乎不会数错,代价是你只能在平台给的槽位里改。WooCommerce和Magento灵活得多,代价是覆写层数多,同一个输出可能被三个地方改过,得顺着覆写链往下找。 自研的站两个极端都有。工程规范好的站模板清单本来就是现成的,甚至写在文档里;规范差的站可能连一份完整清单都拿不出来,这种情况下第一次数模板本身就是有价值的产出,比后面任何一条优化建议都值钱。 ## 9个电子与办公大站被评了565个页面设计,它们各自有多少个网址? ## 先把这份基准的数字原样摆出来 数据来自Baymard在2026年3月底发布的电子与办公品类体验基准 (https://baymard.com/blog/electronics-and-office-ux-benchmark-2026)。这家机构做电商可用性研究十几年,公开程度在同行里算高的,测了哪些站、评了多少条、按什么加权都写得出来。本文后面所有的推算用的都是它自己公布的数字,没有一个是往外找的。 这份基准里有9个站做了完整案例研究,每个站被记录的页面设计数分别是:Best Buy 85、B&H Photo 80、Dell 63、Newegg 62、Office Depot 58、Microsoft 56、Apple 55、Crutchfield 54、HP 52。相加正好565。 另外三个数:这9个站被跨500多条研究准则人工评估,产生了5000多个加权体验分数和3900多个最佳实践示例。9个站里只有1个拿到了良好或更好的总体评价,其余全部落在及格线附近或以下。 站点 | 页面设计数 | 被评的终端 | Best Buy | 85 | 桌面、移动、App | B&H Photo | 80 | 桌面、移动、App | Dell | 63 | 桌面、移动 | Newegg | 62 | 桌面、移动 | Office Depot | 58 | 桌面、移动 | Microsoft | 56 | 桌面、移动 | Apple | 55 | 桌面、移动 | Crutchfield | 54 | 桌面、移动 | HP | 52 | 桌面、移动 | 合计 | 565 | 20个站点终端组合 | ## 平均每站62.8个,这个数为什么这么稳 最高的85和最低的52之间只差1.63倍。放在一批规模差异极大的公司里,这个离散度低得反常——Apple和Crutchfield的营收差着好几个数量级,商品数量、技术团队、年度预算全都不在一个量级上,可它们的界面形态数一个55一个54,几乎一样。 这说明页面设计数不是跟着公司规模走的,它跟着电商这件事本身有多少种界面形态走。首页一种、分类页一种、列表页一种、商品页一种、购物车一种、结账几步各一种、账户区若干种,加起来就是五六十种,谁做都差不多。 把带App的两个站单独拿出来看更清楚:Best Buy和B&H Photo多评了一个终端,页面设计数就顶到了85和80,比其余7个站高出一截。多出来的部分不是因为它们业务更复杂,纯粹是因为多了一套界面。 ## 用它去除另外两个数,会得到什么 5000多个体验分数除以565个页面设计,约等于每个页面设计承载8.85个分数。3900多个最佳实践示例除以565,约等于6.9个。两个数都在个位数,看着不太像人工评测的工作量。 换个除法就通了:500多条准则乘以9个站等于4500多,跟5000这个数基本对得上。也就是说评分的真正单位是准则乘以站,一条准则在一个站上给一个分,跟页面设计数没有直接关系。 那565是什么?它是证据的单位。评分要落地成一句结论加一张截图,截图取自某一个具体界面,那个界面就是一个页面设计。平均每8.85个分数配一张截图,一张截图上能同时说明八九条准则,这个比例是合理的。 ## 两个单位在同一份报告里并存 这件事本身就很说明问题。一份研究报告,评分按一个单位算,证据按另一个单位算,两个单位之间没有换算关系,读者也不会觉得有什么不对。 因为它们回答的是两个不同的问题。分数回答这个站做得怎么样,页面设计数回答我们究竟看了些什么。前者是结论,后者是覆盖范围,混在一起说才会出问题。 回到自己的站上,你的报表回答的是哪一个问题?Search Console给的是覆盖范围——哪些网址有问题;你需要的是结论——哪几处该改。两者之间同样缺一次换算,而且没人替你做。 ## 博客里写9个站,研究页写的是17个 顺着这份基准往回翻,Baymard的电子与办公品类研究概览页 (https://baymard.com/research/electronics-and-office)给的数字跟博客文章不一样:那里写的是17个美国与欧洲的电子与办公站,9000多个体验分数,8000多个最佳实践示例。博客里那9个只是其中做了完整案例研究的那一批。 把17个站名逐个数一遍:Apple、B&H Photo、Best Buy、Bang & Olufsen、Crutchfield、Dell、Staples、Netonnet、MediaMarkt、Newegg、Fitbit、RTV Euro AGD、Fnac、Office Depot、GoPro、HP、Microsoft。正好17个,页面上写的数跟数出来的数对得上。 对照博客那9个,缺席的8个是:Bang & Olufsen、Staples、Netonnet、MediaMarkt、Fitbit、RTV Euro AGD、Fnac、GoPro。其中5个欧洲站——丹麦、瑞典、德国、波兰、法国各一个——一个都没进案例研究,进案例的9个全是美国站。 ## 那8个站只有分数,没有页面设计数 这个差别正好落在本文的主线上。17个站都参与了评分,所以都有分数;只有9个站被做成了案例研究,所以只有它们有页面设计数。分数这个单位覆盖了全部17个站,页面设计这个单位只覆盖了9个。 用数字看更直观:9000多个分数除以17个站,约529个每站;5000多除以9,约556个每站。两个数几乎相等,说明分数确实是按站均匀产生的,谁都逃不掉。而页面设计那一栏,另外8个站是空的。 口径 | 覆盖站数 | 总量 | 每站均值 | 体验分数 | 17 | 9000+ | 约529 | 最佳实践示例 | 17 | 8000+ | 约470 | 案例研究里的分数 | 9 | 5000+ | 约556 | 页面设计数 | 9 | 565 | 62.8 | ### 为什么欧洲站集体缺了案例这一层 最省事的解释是排期或者授权,案例研究要放大量截图,涉及的沟通比单纯打分多。这个解释大概率是对的,也没什么可指摘的。 值得留意的是它造成的后果:如果你是欧洲市场的从业者,想看看同区域的站长什么样,翻开这份研究能看到5个欧洲站的分数,但看不到它们的任何一个界面。你能知道它们考了多少分,看不到它们的卷子。 这个不对称跟本文说的错位是同一件事的另一面:分数是可以批量产生的,形态不行。前者的边际成本随站数线性增长且很低,后者要一页一页打开截图,边际成本高得多,于是它自然会覆盖得更少。 ## 9个站里只有1个拿到良好 这一项容易被读成行业整体不行,但配上前面的数字之后,它其实在说另一件事:既然9个站的界面形态数都是五六十个,那么它们的差距不可能来自形态数量,只能来自每一种形态做得怎么样。 基准里给的失分描述也支持这个读法:这些站在定位、比较和给用户吃定心丸这三类时刻上普遍掉链子——早期发现被促销噪音干扰、分类体系割裂、缺少看全部的入口,列表和商品页支撑不了同类商品并排比较,结账流程能走通但讲不清送达时间和总价构成。 每一条都不是某个页面的毛病,全是某一类界面的毛病。电商类目页与集合页的机制 (https://zhangwenbao.com/ecommerce-plp-collection-page-seo-mechanism-complete-guide.html)那套东西之所以能一篇讲完几万个页面,靠的也是这个前提:那几万个页面本来就是同一件东西。 ## 界面形态数几乎不随商品数增长 这是从那9个站身上能拿到的最有用的一条经验。Apple的在售型号按SKU算是几百,Newegg是几百万,两者的页面设计数分别是55和62。商品数差了四个数量级,界面形态数差13%。 换句话说,商品数增长带来的是同一批模板被复用更多次,不是模板变多。上架第10万个商品跟上架第100个商品,用的是同一个商品页模板,走的是同一批判断分支,出问题也出在同一个地方。 这条经验反过来用最值钱:当有人说我们站太大了、审计做不完的时候,那句话通常是错的。站大意味着每个模板背后的页面更多,不意味着要看的东西更多。要看的东西一直是那五六十个。 ### 那商品数增长真正带来的是什么 带来的是数据的多样性。10万个商品意味着10万套属性组合,其中总有一些会撞上模板里没考虑到的情况——标题特别长的、没有主图的、只有一个尺码的、价格是0的、名称里带引号的。 这些问题确实是页面级的,按模板抽样查不出来,只能靠全量扫描。但它们跟模板级问题有个明显区别:页面级问题的表现是零散的,模板级问题的表现是成片的。报表上突然多出8000行同一类问题,那几乎不可能是数据多样性造成的。 所以两条路都得走,只是分工不同:全量扫描交给爬虫,桌面爬虫做全站审计 (https://zhangwenbao.com/site-crawl-audit-desktop-crawler-screaming-frog-workflow.html)擅长的就是这个,跑一遍几万页成本很低;模板抽样交给人,人擅长的是判断这一类界面该不该是这样。 ## 把这个比例套到自己站上 拿页面设计数当参照有个直接用途:估自己站的模板清单该有多长。一个正经做的跨境独立站,界面形态数落在35到70之间是正常的,低于25通常说明有东西没数进来,高于90通常说明历史包袱不少,有一批老模板还挂着没退役。 保哥数过几个不同规模的客户站,结果比预期整齐:一个800 SKU的家居站数出41个,一个6万SKU的工业品站数出58个,一个刚上线三个月的站数出33个。SKU差了75倍,形态数差不到1.5倍。 数完之后最常见的反应是那句:原来就这么点东西。这个反应本身就有价值——在此之前,那个站在所有人心里的形状是6万个页面,一个谁也不想碰的庞然大物。 ## 页面设计这个词,到底把终端算进去没有 这个细节值得抠一下,因为它决定了62.8这个数该怎么套到自己身上。从数据本身能反推出答案:带App的两个站页面设计数明显更高,说明同一个界面在不同终端上是分开计数的。 顺着这个思路算:9个站里7个被评了桌面和移动两个终端,2个多评了App,一共20个站点终端组合。565除以20等于28.25,也就是每个终端上大约28种界面形态。 28这个数比62.8更接近做站的人的直觉。一个电商站在桌面端确实差不多就是二三十种页面,移动端再来一套。至于这两套算一套还是两套,取决于你的实现方式——响应式布局的站算一套,独立移动站或者独立App就得算两套。 ### 响应式的站省的不只是开发量 顺着上一段往下推一步:同一个业务,做成响应式的站要维护28种形态,做成桌面加独立移动端的要维护56种,加个App就是84种。 这个倍数关系落到审计上就是工作量的倍数。移动优先索引落地之后的那套机制 (https://zhangwenbao.com/mobile-first-indexing-mechanism-googlebot-rendering-evolution-survival.html)通常被讨论成收录和抓取层面的事,但从检查面这个角度看,它的价值可能更直接:形态数少一半,每一次验收、每一次走查、每一次回归的成本就少一半。 反过来,正在纠结要不要单独做一个移动站或者App的团队,可以把这一项摆进决策表里——它不是一次性的开发投入,是往后每一次改动都要多付一遍的持续成本。 ## 500条准则摊在8个主题上,为什么模板最少的那两块吃掉了44%? ## 准则是怎么分布的 Baymard那个研究概览页把500多条准则按主题拆开列了出来,这份拆分表比总数有用得多。8个主题,46个子话题,准则数分别是:首页与类目体系与主导航42条、站内搜索31条、商品列表与筛选76条、商品页111条、购物车与结账111条、账户与自助服务66条、全站功能与导航51条、忠诚度与奖励12条。 把这8个数加起来是500整。所谓500多条里的那个多,指的是同一条准则在不同终端上的变体,主干正好500条。 光看这一列已经能读出一点东西:商品页和结账各111条并列第一,两者相加222条,占了全部准则的44.4%。这两块的重要性是共识,倒不意外。 ## 再补上一列,事情就变了 意外的地方在第二列。给每个主题标上它在一个普通电商站上大致对应几个模板,表就变成了另一副样子。 主题 | 准则数 | 占比 | 典型模板数 | 每模板承载准则 | 商品页 | 111 | 22.2% | 1 | 111 | 商品列表与筛选 | 76 | 15.2% | 2 | 38 | 购物车与结账 | 111 | 22.2% | 5 | 22.2 | 站内搜索 | 31 | 6.2% | 2 | 15.5 | 首页与类目体系与主导航 | 42 | 8.4% | 3 | 14 | 账户与自助服务 | 66 | 13.2% | 9 | 7.3 | 忠诚度与奖励 | 12 | 2.4% | 2 | 6 | 全站功能与导航 | 51 | 10.2% | 横跨全部模板 | 不适用 | 最上面一行和倒数第二行差15.2倍。商品页那一个模板要同时满足111条准则,账户区9个模板分摊66条,平均每个只需要顾好7条多一点。 ## 这个差距意味着什么 意味着改动的杠杆完全不一样。花一天时间过一遍账户区里的某个页面,你能覆盖7条准则;花一天时间过一遍商品页模板,理论上能碰到111条。同样是一天,能触及的判断点差15倍。 而且这还没算网址。商品页模板背后是全站80%到90%的网址,账户区那9个模板背后是固定的9个页面(每个用户看到的内容不同,但页面就那么几个)。一个模板同时占着22.2%的准则和大约85%的网址,这是全站唯一一个两头都顶格的位置。 所以排期上的结论很直白:如果只有一段完整的时间可以投入,投给商品页模板;如果有两段,第二段给列表与筛选。这个顺序跟大多数团队的实际排期顺序不太一样——实际排期里排在前面的往往是那些被投诉得最多、最容易被感知到的地方。 ### 为什么感知顺序跟杠杆顺序对不上 因为被投诉的强度跟单个页面的糟糕程度成正比,跟这个页面有多少个副本没关系。账户区某个功能坏了,用到的人会集中反馈,声音很响;商品页上少了一句送达说明,几十万个页面同时少,但没有一个人会为这件事专门写工单。 这跟索引膨胀那类全站性毛病 (https://zhangwenbao.com/index-bloat-mechanism-sitewide-diagnosis-decision-matrix.html)的性质是一样的:单看任何一个页面都说不上错在哪,坏就坏在它是成片的。影响面越大,单点反馈反而越弱,因为用户遇到的是常态而不是异常,常态不值得写工单。 反过来说,凡是靠工单量排优先级的团队,都会系统性地低估模板级问题。工单量测的是愤怒的密度,不是损失的总量。 ## 全站功能那51条为什么标了不适用 这一栏值得单说。页眉、页脚、面包屑、全局提示、加载状态这些东西不属于任何一个页面,它们横跨所有模板。改一处,全站所有页面同时变。 从杠杆看这是最高的一档,比商品页还高;从风险看也是最高的一档,因为改错了全站一起错,没有任何一个页面能幸免。这个组合让它成了最容易被拖延的一块——收益大,但没人愿意第一个动。 实践里的办法是把它拆细:面包屑归面包屑,全局提示归全局提示,每次只动一个横切关注点,别打包成一次页眉页脚大改。面包屑的几种类型与结构化数据实现 (https://zhangwenbao.com/seo-breadcrumbs-types-schema-implementation.html)可以单独走一次上线,跟其他横切改动互不影响。 ## 再看一遍那46个子话题怎么分的 准则数之外还有一列是子话题数:商品页12个、商品列表与筛选8个、购物车与结账7个、账户与自助服务7个、首页与类目体系4个、站内搜索4个、全站功能3个、忠诚度1个,合计46个。 拿准则数除以子话题数能看出每个子话题的颗粒度:商品页9.25条一个,结账15.9条一个,账户区9.4条一个,忠诚度12条一个。结账那个数明显偏高,说明它的每个子话题都被拆得很细——一个填地址的步骤就能挂十几条准则。 这跟做过结账优化的人的直觉一致。结账弃单的那几类真实成因 (https://zhangwenbao.com/dtc-checkout-abandonment-9-real-causes.html)里,每一类往下都能再分出好几个判断点,不是一句优化结账流程能盖住的。 ## 把准则密度换算成体检时间 有个更接地气的用法:拿每模板承载的准则数去估一次人工走查该花多久。按一条准则平均3分钟看一眼算,商品页模板一次完整走查要333分钟,五个半小时;账户区某个页面22分钟。 这个估算不精确,但量级是对的,而且它解决了排期里最难的一件事——把一个模糊的动作换成一个能写进日历的时长。说走查一遍商品页没人知道要多久,说这件事要占掉一整天,排期会议上就有得谈了。 走查对象 | 准则数 | 按3分钟一条估时 | 覆盖网址量级 | 商品页模板 | 111 | 约5.5小时 | 全站80%以上 | 列表与筛选(2个模板) | 76 | 约3.8小时 | 几百到几千 | 结账全流程(5个模板) | 111 | 约5.5小时 | 5个页面 | 账户区单页 | 约7 | 约22分钟 | 1个页面 | ## 为什么结账那111条仍然要排在前面 看完上面这张表,可能会得出一个偏激的结论:结账只影响5个页面,杠杆比商品页低多了,往后排。这个结论是错的,因为它漏了一个维度。 网址数量衡量的是曝光面,不是价值密度。结账那5个页面上走过的是已经决定要买的人,每一个都比商品页上那些还在闲逛的人贵得多。模板口径解决的是怎么把工作量算准,不解决怎么把价值算准,后面这件事还得靠业务判断。 保哥的做法是两个维度都写出来再排:一列是这个模板覆盖多少网址,一列是这个模板上每千次访问值多少钱。前者从爬虫结果里数,后者从分析工具里拉,两列相乘再排序,跟只看其中一列排出来的顺序经常差很多。 ## 这张表怎么套到自己站上 Baymard那500条准则要付费才能看全,但这张表的用法不依赖具体条目。你需要的只是每一类界面上大概有多少个判断点,而这个数你自己也能估——把上次做验收时列的检查项按界面归一次类就有了。 估出来的数不用准,因为它的用途是排序不是核算。只要商品页那一栏明显高于账户区那一栏,结论就已经成立了,多几条少几条不影响。 ## 忠诚度只有12条,这算不算说它不重要 不算,它说的是这块的判断点少,不是这块的收益少。12条准则对应2个模板,每模板6条,是全表里最低的一档;但会员体系对复购的影响谁都知道不小。 这里能看出准则数这个指标的边界:它衡量的是一类界面上有多少件事可能做错,不衡量做对了能赚多少。界面越复杂、状态越多、要展示的信息越杂,可能做错的地方就越多,跟这块业务值多少钱是两回事。 所以准则密度只能用来估工作量和排查顺序,不能直接当优先级用。把它当优先级用会得出会员体系不用管这种荒唐结论,而实际情况往往是这12条里有几条一直错着,因为压根没人系统看过。 ### 如果你的站没有某一类界面呢 这个情况比想象中常见。很多跨境独立站没有站内搜索(或者只有一个几乎没人用的搜索框),没有会员体系,账户区只有登录和订单列表两页。按上面那张表,这些站直接少掉31加12加一部分账户准则,将近100条。 少掉的这些不是省下来了,是转移了。没有站内搜索意味着用户找不到东西的时候只能靠分类导航,于是首页与类目体系那42条的权重上升;账户区功能少意味着售后问题会全部涌向客服,那部分体验的载体从界面变成了人。 换句话说,界面形态数少的站,每一个形态上的压力更大。这解释了一个常见现象:小站的商品页往往塞得比大站还满,因为它得一个页面干完人家三个页面的活。 ## 主题划分本身就是一次模板划分 最后说一句可能有点绕但很要紧的话。Baymard把电商体验切成8个主题,这个切法看起来是按用户旅程切的——发现、比较、决策、支付、售后。但你把它跟模板清单摆在一起会发现,两者几乎是一一对应的。 这不是巧合。用户旅程之所以能被切成这几段,正是因为每一段都发生在一类特定的界面上;而界面之所以被做成那几类,也正是因为用户在那几个阶段需要的东西不同。模板结构是用户旅程在代码里的投影,两边说的是同一件事。 这一点在做电商用户旅程与关键词布局的对应 (https://zhangwenbao.com/ecommerce-seo-customer-journey-mapping.html)时特别有用:旅程图上的每一段,落到站上就是一到两个模板,落到关键词上就是一批意图相近的词。三者能对齐,排期才不会各说各话。 ## 这张表还有个用法:给外部报价挑毛病 找外部做审计或者做体验优化的时候,报价单上常见的写法是全站体验诊断多少钱。拿准则密度这张表去对一遍,很快能问出几个关键问题。 比如:这次诊断覆盖哪几类界面?商品页那111个判断点里打算过多少?账户区要不要做?会不会只看首页和几个大类目页?把范围问题落到界面类型上,报价里那个模糊的全站两个字就撑不住了。 反过来,如果你是提供服务的一方,主动把这张表放进方案里是很占便宜的做法——它把工作量说清楚了,也把不做什么说清楚了,后面扯皮的空间小很多。优化服务合同里那些容易含糊的条款 (https://zhangwenbao.com/seo-website-optimization-contract-model.html)大多数都栽在范围没界定清楚上,而界面类型是所有界定方式里最难被曲解的一种。 ## Search Console的两份报告,为什么一份按网址数、另一份按页面组数? ## 同一个后台,两套计量口径 这件事保哥自己也是最近才认真对照过一遍。打开Search Console,页面索引报告和网页体验核心指标报告摆在同一个菜单里,看起来是一套东西的两个视角,实际上它们数的根本不是同一种东西。 页面索引报告的单位是网址。每一个未被收录的网址占一行,配一个原因;点进某个原因,能看到受影响的网址列表,最多1000行,官方文档还专门补了一句:即使不足1000行也不保证列全。 核心指标报告的单位是网址组。这份报告的官方说明 (https://support.google.com/webmasters/answer/9205520)写得很清楚,数据按状态、指标类型和网址组三层组织,表格里每一行是一个组,展示的那个网址只是这个组的代表,整张表限200行。 ## 那句藏在说明里的提醒 核心指标报告的文档里有一句话特别容易被略过:图表上方那几个状态标签显示的是网址总数而不是网址组数。原文特意加了个括号强调这一点。 也就是说同一屏界面上,上半部分的数字按网址算,下半部分的表格按组算。上面写着4万3千个网址表现不佳,下面列出12行。两个数之间差着三个数量级,而它们描述的是同一件事。 看惯了不觉得有什么,第一次注意到会愣一下:为什么要这么设计。答案其实很实在——上面那个数是给你判断严重程度的,下面那张表是给你去修的。判断严重程度要看影响面,去修要看改哪儿,两件事天然需要两个单位。 ## Google已经替你做了那次换算 这是本文最值得留意的一处。前面说报表按网址交付、施工按模板进行、中间缺一次换算,而在核心指标这一块,Google把换算做完了才交给你。 它把4万3千个网址归并成12个组,每组给一个代表网址、一组数值、一个状态。你拿到的东西已经是模板口径的了,不需要自己再归并一次。 这也解释了为什么核心指标那块的优化通常推进得比较顺:材料一到手就是可执行的形状——12行,每行一个问题,每个问题对应一类页面。研发看到12行不会说排期。 ## 页面索引报告为什么不这么干 技术上不是做不到,Google显然有能力把索引问题也按相似页面归组。但两份报告的性质不同:性能指标是连续量,同一类页面的数值天然接近,归组之后组内方差小,代表值有意义。 索引状态是离散量,而且高度依赖单个网址的具体情况。同一个商品页模板下,一个网址被判重复、另一个被判软404、第三个被判抓取异常,三种状态没法归成一个组给一个代表。索引覆盖里那几种状态各自的判定机制 (https://zhangwenbao.com/gsc-index-coverage-states-discovered-crawled-canonical-mechanism.html)拆开看就明白,它们的成因链条完全不同。 所以这不是Google偷懒,是这一类数据本身难归组。但难归组不等于不用归——只是这次得你自己动手。 ## 自己动手归组,第一步是给网址打标 做法比想象的简单。把页面索引报告导出来,拿网址路径里的特征做匹配,给每一行贴一个模板标签:路径里带 /products/ 的归商品页,带 /collections/ 的归列表页,以此类推。 这一步靠正则就能完成,几十行脚本。做完之后原来那几千行会坍缩成十几到几十行,每行是一个模板加一个问题类型,后面跟着数量。这份归并后的表才是能拿去开会的东西。 要注意的是路径规则不总是干净的,历史遗留的网址结构经常对不上。网址结构与短链设计的那套机制 (https://zhangwenbao.com/url-structure-slug-optimization-onpage-seo-mechanism.html)做得规整的站,这一步几乎零成本;结构混乱的站得先花点时间理规则,而理规则这件事本身也是有价值的产出。 ## 两份报告的上限,含义完全不同 页面索引报告1000行,核心指标报告200行,后者的上限只有前者的五分之一。听起来后者更抠门,实际情况正好相反。 一个4万网址的站,1000行占全部网址的2.5%,剩下97.5%你看不到;同一个站的模板数假设是55,200行是模板数的3.6倍,绰绰有余,多出来的空间还够容纳同一个模板在不同终端、不同状态下的多行记录。 同一个量级的行数上限,换个单位之后,从远远不够变成绰绰有余。这不是巧合——行数上限是按人眼一次能读多少条设计的,几百行就是人的极限,而模板数恰好也在几十这个量级。两者天然匹配,网址数天然不匹配。 对比项 | 页面索引报告 | 核心指标报告 | 计量单位 | 网址 | 网址组(相似页面) | 表格行数上限 | 1000 | 200 | 每行代表 | 一个具体网址 | 一组页面的代表网址 | 4万网址站的覆盖率 | 约2.5% | 模板数的3倍以上 | 数据不足时 | 该网址不出现 | 退回整站层级 | 拿到手能不能直接排期 | 不能 | 基本可以 | ### 组员按曝光倒序,尾部你看不见 还有一条细节值得记:文档里写了,组内成员是按曝光量倒序列出的。你点开一个组,看到的是这个组里流量最大的那几个网址。 这个排序在多数时候是对的——先看重要的。但它会掩盖一类情况:同一个模板下,头部网址和长尾网址的表现可能差很远。头部商品图片被CDN缓存得好好的,长尾商品的图第一次访问要现回源,这两批页面的最大内容绘制根本不在一个水平上。 组给出的那个数是整组的分位值,头部拉得动它,但你从组员名单里翻不到反面样本。真想确认,得自己找几个长尾网址单独测。多层缓存对首字节时间的影响 (https://zhangwenbao.com/ttfb-multi-layer-cache-core-web-vitals-crawl-budget-seo.html)那套排查里,冷热路径的差异经常就是这么被漏掉的。 ## 数据不够的时候,两份报告的退路不一样 核心指标报告的文档写了一条兜底规则:某个网址组的数据量不够展示时,Search Console会往上创建一个整站层级的组,把该协议、主机和端口下的所有网址数据聚在一起。 这条规则有个副作用值得警惕。当你看到的是整站层级的数字时,界面上并不会有一个显眼的提示告诉你口径已经跳变了。你以为在看某一类页面,实际在看全站均值,而全站均值被首页和头部页面拉得相当好看。 页面索引报告没有这种退化,数据不够就是不显示。两种处理各有道理,但对读报表的人来说,退化成整站是更危险的一种——它不留空白,留了一个看起来正常的数。这跟几家工具的数据对不上时怎么核账 (https://zhangwenbao.com/seo-tool-data-reconciliation-ahrefs-semrush-gsc-discrepancy-framework.html)是同一类麻烦:数字都在,口径悄悄换了。 ## 归组结果拿到之后,先做哪一件 假设你已经把几千行坍缩成了20行,每行是一个模板加一个问题类型。这时候最容易犯的错是从数量最大的那一行开始改,因为它看起来影响面最大。 先看的应该是数量大且集中在单一模板上的那几行。数量大但横跨十几个模板的行,说明这是个横切问题,成因可能在服务器配置、在全局脚本、在某个被所有页面引用的组件里,排查路径完全不同,往往也更长。 判断方法很省事:同一个问题类型下,如果90%以上的行落在一个模板标签上,那就是模板级问题,直奔那个模板的代码;如果分散在五个以上标签上,先别碰模板,去查响应头里那几个会影响收录的字段 (https://zhangwenbao.com/http-response-headers-seo-x-robots-cache-vary-canonical-mechanism.html)和全局配置,那里藏着的东西影响面更大也更隐蔽。 ## 这次归组该谁做 保哥见过三种分工,效果差别挺大。第一种是SEO自己做,好处是他最清楚问题该怎么分类,坏处是他往往不知道代码里的模板边界在哪,标签会打得跟实际结构对不上。 第二种是研发做,好处是模板边界一清二楚,坏处是研发拿到的是一份他看不懂的报表,不知道哪些问题是真问题——收录被规范标签指向别处这件事在SEO眼里是正常,在研发眼里可能是个bug。 第三种是两个人坐在一起做一次,之后固化成脚本。这一种最费当天的时间,但只用做一次;把SEO动作接进持续集成 (https://zhangwenbao.com/seo-automation-engineering-ci-maintenance-architecture.html)之后,每次导出自动带上模板标签,后面所有人拿到的都是归好组的版本。头一次两小时,往后每次零成本。 ## 有没有不该归组的时候 有,而且值得说清楚,免得走到另一个极端。归组的前提是组内页面确实同质,一旦这个前提不成立,归组会把真问题藏起来。 最典型的是多店铺、多语言、多区域的站。同一个商品页模板,在德国站和日本站上渲染出来的东西可能差很远——字体不同、地址格式不同、税费展示逻辑不同、合规提示不同。按模板归成一组,德国站那一批的问题会被日本站的正常数据稀释掉。 这种站的正确做法是模板乘以区域当作归组单位,行数会翻几倍,但每一行仍然是可执行的。同一套模板铺十种语言时的重复内容风险 (https://zhangwenbao.com/multilingual-template-ten-languages-duplicate-content-risk.html)说的也是这件事:模板相同不代表输出相同,中间还隔着一层数据和一层配置。 ## 问题类型和模板是两个维度,别压成一维 归组的时候有个常见做法是直接按问题类型汇总:重复内容3200条、软404有800条、被规范标签排除1400条。这样确实比原始报表清楚,但它只压掉了一个维度。 正确的做法是做成一张两维表,行是模板,列是问题类型,格子里填数量。同样的数据,这张表能读出按问题类型汇总读不出的东西:某个模板在三种问题类型上都有量,说明这个模板本身有结构性毛病;某种问题类型横跨十几个模板,说明它的成因在全局配置而不在模板。 表做出来通常是十几行乘五六列,一屏放得下。而这张表可以直接当排期表用——先做那些整行数值高的模板,再做那些整列数值高的全局项。 ### 导出之后第一件事是清干净 实操上有个容易吃亏的地方:报表导出的网址里会混着一批不该参与统计的东西——带跟踪参数的重复网址、分页序列里的深层页、已经下架但还没清理的旧地址。 这些不清掉,归组结果会失真。最典型的是分页:一个分类页带出五十页分页地址,全部归进列表页模板,这个模板的数量一下子被推高十倍,看起来像是重灾区,实际上只是分页多。 清理规则不用复杂,把跟踪参数剥掉、把分页序列合并成首页、把已知的下架路径排除,三条规则能解决八成噪声。分类页分页的处理方式 (https://zhangwenbao.com/category-pagination-seo.html)本身就该有一套明确规则,做归组正好顺手把它捋一遍。 ## Google给页面分组时假设了什么,这个假设跟模板是什么关系? ## 官方文档里那一句 核心指标报告的说明里,讲网址组的那一段末尾有这么一句:这些组被假定共用同一套框架,组内出现的任何表现不佳,其原因很可能来自同一个底层成因。 这句话很容易滑过去,它读起来像一句技术说明。但它其实是整份报告成立的前提,而且是一个可以被证伪的前提——它明确说了假定两个字。 > 把它翻译成做站的人的话:同一个模板出来的页面,快慢是一回事,坏也坏在同一处。Google敢把4万个网址压成12行给你看,靠的就是这个判断。 ## 共用同一套框架,说的就是模板 Google不用模板这个词,因为它看不到你的代码。它只能从外部观察:这一批页面的结构相似、资源相似、渲染路径相似,于是推断它们出自同一处。 这个推断的准确度取决于你的站有多规整。结构干净的站,Google分出来的组跟你的模板清单会高度吻合;历史包袱重的站,同一个模板下的页面可能因为某些老数据走了完全不同的渲染分支,Google会把它们拆成两个组。 这里就出现了一个免费的好东西:Google的分组结果可以当作你模板清单的外部校验。你自己数出来55个模板,Google有数据的那部分分出12个组,把两边对一遍,对不上的地方全是线索。 ### 对不上的两种情况,各说明什么 第一种:你认为是一个模板,Google拆成了两个组。这说明这个模板里有一条分支的表现跟其余部分明显不同——可能是某类商品多加载了一个第三方脚本,可能是某个分类下的图片没走同一套处理管线。 这种情况几乎总是有价值的发现,因为你自己是数不出来的。你看代码只看到一个文件,看不到运行时那条岔路把页面变成了另一副样子。 第二种:你认为是两个不同模板,Google归成了一个组。这说明这两个模板的产出实质上没有差别,那么它们为什么是两个文件就值得问一句。多半是历史遗留,两套代码维护着同一件事,改一处忘一处的坑就藏在这儿。 ## 怎么把这次对照做出来 操作上没什么门槛。核心指标报告里点开每一个问题,能看到代表网址;把这些代表网址收集起来,用你自己的路径规则打上模板标签,然后看每个组的代表网址落进了哪个标签。 一个组的代表网址落进两个标签,说明Google认为它们是一类而你认为不是;两个组的代表网址落进同一个标签,说明你认为是一类而Google认为不是。两种情况都记下来,形成一份差异清单。 这份清单通常不长,十几条顶天,但它是全站唯一一份由外部视角产生的模板结构评估。核心指标的行业基准与投入产出测算 (https://zhangwenbao.com/core-web-vitals-ai-search-industry-benchmark.html)那类判断做完之后,接着做这一步成本几乎为零,因为数据本来就在同一屏上。 ## 这个假设什么时候会失效 失效条件挺明确:当页面的表现主要由数据决定而不是由代码决定的时候。 最常见的场景是图片。同一个商品页模板,有的商品配了12张4 MB的原图,有的只有1张压好的图,最大内容绘制能差出好几倍。这时候组内方差很大,Google给出的那个分位值对谁都不准。 另一个场景是评论。评论区在有300条评论的页面和有0条评论的页面上完全是两种负载。从六个层次拆最大内容绘制的实际路径 (https://zhangwenbao.com/woocommerce-performance-6-layer-lcp-core-web-vitals-real-path.html)里,这类由内容量驱动的差异经常比代码差异更大,也更难在模板层解决——你没法要求运营少写点评论。 ## 成因相同这个判断,比分组本身更值钱 回到那句原文。它说的其实是两件事:这批页面共用一套框架,以及它们的问题出自同一个底层成因。第一件是观察,第二件是推论,而第二件才是它敢把4万行压成12行的底气。 把这个推论借过来用在索引问题上同样成立。同一个模板下的8000个网址被判成重复内容,你不需要逐个去看这8000个——看两三个就够,因为它们重复的方式必然一样。 这就是模板口径最实用的一层价值:它把逐条核查变成了抽样核查,而抽样的合理性不是靠统计学保证的,是靠代码结构保证的。统计抽样要考虑分布和置信区间,模板抽样不用——同一段代码的输出,看一遍和看一万遍是一回事。 ## 跟随机抽样的区别在哪 这个区别值得讲清楚,因为很多人做审计时的抽样是随机的,抓一把网址看看。随机抽样在页面同质度高的时候有效,问题是你事先不知道同质度高不高。 举个具体的数:一个站有55个模板,其中3个模板出了问题,涉及网址占全站4%。随机抽20个网址,一个都不落在这4%上的概率超过四成。也就是说随机抽20条,有四成的机会得出一切正常的结论。 按模板抽,每个模板取1条,20条能覆盖20个模板,55个模板取满也只要55条。同样的成本,前者可能什么都查不到,后者一定能覆盖你抽到的每一类页面。 抽样方式 | 抽20条覆盖什么 | 漏掉整类问题的概率 | 成本 | 随机抽网址 | 随流量分布,偏头部 | 高,视问题占比而定 | 低 | 按模板各抽1条 | 20个模板 | 只漏没抽到的模板 | 低 | 按模板分支各抽1条 | 20个渲染形态 | 接近0 | 中,要先理清分支 | 全量扫描 | 全部 | 0 | 高 | ## 抽样这件事,别的领域早就想明白了 做搜索排名监控的人对这套逻辑不陌生。排名追踪的样本量、频率与设备该怎么设计 (https://zhangwenbao.com/rank-tracking-sampling-design-frequency-device-sample-cost.html)里最核心的一条就是:样本不是越多越好,关键在于样本能不能覆盖所有需要区分的类别。追1000个词但全是同一类意图,不如追200个词覆盖五类意图。 页面审计是同样的道理,只是大家一直没有把类别这个概念显式地建立起来。关键词有意图分类,页面的分类就是模板,只不过前者是SEO自己划的,后者写在别人的代码里,得去问一句才知道。 说到底,抽样设计的第一步永远是先定义总体的结构,第二步才是决定抽多少。跳过第一步直接抓一把,抓多少都是碰运气。 ## 那些没有数据的模板怎么办 核心指标报告只显示有足够数据的组,你的站上大概率有一批模板从来没在报告里出现过——冷门分类页、老活动页、只有几十次访问的帮助文档。 它们不出现不是因为没问题,是因为访问量不够门槛。而访问量低这件事跟质量差没有任何关系,甚至可能是因为质量差才访问量低。这个因果方向报告本身分辨不了。 处理办法很朴素:把模板清单跟报告里出现过的组对一遍,没出现过的那些单独列一张表,用人工或者页面速度测试逐个跑一次。这批模板通常占清单的三到五成,一次跑完能花掉大半天,但一年跑一次就够了。 ## 组的代表网址,能不能直接拿来当模板代表 能,而且这是个被严重低估的便利。你需要一份模板代表网址清单——每个模板配一条典型网址,以后所有验收、所有速度测试、所有改版回归都用它。这份清单自己整理要花时间,而核心指标报告已经替你选好了一批。 它选的依据是曝光量,选出来的通常是这个模板下最热的那个页面。这个选法有利有弊:好处是这条网址的数据最充分,测什么都测得出来;坏处是它经常是个特例,热门商品往往图更多、评论更多、加了额外的推广模块。 保哥的做法是每个模板存两条:一条热门代表,一条冷门代表。两条一起测,差值本身就是一个诊断信号——差得很小说明这个模板的表现由代码决定,差得很大说明由数据决定,后者的优化路径完全不同。 ### 组给的那个数是分位值,不是均值 这一点文档里写得很直白:报告里的组指标,说的是这个组内75%的访问达到了这个水平或更好。它不是平均数,也不是中位数。 分位值的性质决定了它对尾部不敏感。一个组里有20%的页面表现极差,只要不到25%,分位值可以完全不动。报告上那根绿条不会因为五分之一的页面很糟就变黄,它只在超过四分之一变糟时才动。 这不是设计缺陷,选75分位本来就是为了排除偶发的极端值。但读的人得知道自己在读什么:绿色说明大多数访问是好的,不说明没有一批访问是坏的。要看尾部,得换个工具单独测。 ## 没有这份外部校验的时候怎么办 不是所有站都能拿到足够的现场数据。新站、小语种站、流量集中在少数几个页面上的站,核心指标报告里可能只有一个整站层级的组,分不出任何结构。 这种情况下的替代方案是拿日志代替。服务器日志分析抓取预算与验证爬虫 (https://zhangwenbao.com/server-log-file-analysis-seo-crawl-budget-bot-verification.html)那套流程里,日志本来就带着完整的路径信息,按路径规则归类之后能得到一份完全属于你自己的分组表,而且它覆盖全部网址,不受访问量门槛限制。 日志给不了体验指标,但它能告诉你每一类页面被抓了多少次、返回了什么状态码、响应耗时多少。做模板级诊断,这三样已经够用了;至于用户那一侧的感受,等有了流量再补。 ## 组的数量本身就是一个信号 还有一个不用打开任何一行数据就能读的信息:核心指标报告分出了几个组。这个数跟你自己数出来的模板数一比,能看出站的结构状态。 组数明显少于模板数是常态,因为一多半模板没有足够数据。但如果组数只有个位数,而你的站有几万个网址、流量也不小,那多半说明大部分页面的表现太接近了——接近到Google分不出结构,或者说明数据主要来自少数几个页面。 反过来,组数比模板数还多也值得看一眼。这说明同一批页面在真实用户那里的表现分化得厉害,而分化的原因不在代码里,多半是缓存命中率、图片大小、第三方脚本加载时机这几件事在不同页面上差别太大。这类问题按模板改是改不动的,得往基础设施那一层去查。 ## 现场数据只有整站和单页两级,中间那一层去哪了? ## Chrome用户体验报告只聚合两个层次 核心指标那些数字最终都来自Chrome用户体验报告,也就是常说的现场数据。它的方法学文档 (https://developer.chrome.com/docs/crux/methodology/)把口径写得很清楚:符合条件的用户体验被聚合成页面级和源级两种分布。 页面级就是单个网址,源级就是整个站点。中间没有别的层次——没有目录级,没有页面类型级,也没有模板级。你要么看一个网址,要么看一整个站。 这个设计本身没毛病,采集端只知道用户访问了哪个网址,不知道这个网址出自哪个模板。模板这个概念只存在于你的代码库里,浏览器看不见。 ## 那句最容易被忽略的门槛说明 要进入这个数据集,页面和站点都得同时满足两个条件:能被公开发现,以及足够热门。第一个条件好理解,第二个条件的具体数字官方不公开,只说选这个数是为了保证统计分布可信。 关键在紧接着的那一句:页面和源用的是同一个最低访问人数门槛。不是页面用一个低一点的门槛、站点用一个高一点的,是同一个数。 把这句话展开就有意思了。一个网址要拥有自己的现场数据,它自己的访问人数得达到一整个网站被收录的标准。一个商品页得混成一家网站那么大,才配拥有一行属于自己的数据。 ## 这道门槛在电商站上意味着什么 电商站的流量分布是典型的长尾形状。头部几十个页面吃掉大部分流量,剩下几万个商品页各自分到很少的访问。真正能过门槛的,通常是首页、几个大类目页、少数几个爆款商品页。 算一笔粗账:一个月访问量30万的站,假设头部50个页面占60%的流量,平均每个3600次;剩下12万次分给2万个长尾页面,平均每个6次。前者可能过得了门槛,后者差着三个数量级。 结果就是你能拿到的现场数据只有两种:整站一个数,加上几十个头部页面各一个数。而你最想知道的那件事——商品页模板整体表现如何——恰好落在这两者中间,没有任何官方数据源直接回答它。 ## 整站那个数为什么不能替代 因为它被头部页面主导了。源级数据聚合的是这个站所有符合条件的用户体验,而流量是加权的,头部页面贡献的样本量压倒性地多。 首页通常是全站优化得最好的一个页面——图片压过、脚本裁过、缓存命中率最高、上线前测过三遍。它的表现进入整站均值之后,会把长尾页面的问题稀释掉。 更麻烦的是方向:你越用心优化首页,整站那个数就越好看,也就越掩盖商品页模板上的问题。投入和数据表现之间存在一个正反馈,但它反馈的不是真实体验的改善。 ### 头部页面那几个数为什么也不能替代 因为能过门槛的页面按定义就是不典型的。它们流量大,往往意味着缓存一直是热的,图片一直在边缘节点上,数据库查询命中率高。 一个长尾商品页的第一次访问要走完全不同的路径:缓存未命中、回源、可能还要触发一次图片实时处理。页面速度影响SEO的那几条路径 (https://zhangwenbao.com/page-speed-seo.html)里,冷启动和热路径的差距在电商站上经常是两三倍,而现场数据里只有热路径那一侧有样本。 这就是那个尴尬的处境:有数据的页面不需要你操心,需要你操心的页面没有数据。两者之间的分界线不是质量,是流量。 ## 门槛这件事还有个反直觉的后果 访问量门槛带来的偏差不只是覆盖不全,它还会让优化动作的反馈变形。你花两周把长尾商品页的图片处理管线改好了,现场数据里看不到任何变化,因为那些页面本来就不在数据集里。 整站那个数倒是可能微微动一下,但幅度小到分不清是不是噪声。于是一次真实有效的改进,在唯一被拿来汇报的那个指标上几乎没有痕迹。做过几次之后,团队自然会把精力转向那些能在报表上看出效果的页面——也就是头部页面,而它们本来就已经是全站最好的部分了。 这条反馈回路挺阴险,它不需要任何人做错决定,光靠指标的可见性就能持续地把资源往已经不缺资源的地方推。要打断它,只能在头部页面之外另立一套衡量方式,而这套方式目前只能自己搭。 ## 参数被剥离,两个商品可能被算成一个页面 方法学文档里还有一条处理规则值得单独拎出来:网址上的查询参数和锚点会被剥掉,同一个页面的所有访问因此被合并到一起。这条规则的用意是好的,避免同一个页面因为带了各种跟踪参数而被拆成一堆各自过不了门槛的碎片。 但文档自己加了一句提醒:在少数情况下这会把不同的页面意外地合并在一起,比如两个参数代表的是两个不同商品的时候。官方给的例子就是商品编号参数。 老一点的电商系统里,商品页网址用参数区分商品的做法并不罕见,Magento的部分配置、一些自研系统、还有相当多的B2B站都是这样。这类站在现场数据里会呈现出一个奇怪的形态:网址结构与命名的那几个设计维度 (https://zhangwenbao.com/url-structure-slug-naming-seo-design-framework-7-dimensions.html)没做好的代价,在这里以一种很隐蔽的方式体现出来——几万个商品被算成了一个页面,这个页面数据充足、指标漂亮,代表的却是几万个页面的混合体。 ## 还有一条20%的剔除规则 文档里另一条筛选规则是:某个网址或站点,如果超过20%的流量因为维度组合不合格而被排除,那么它会被整个剔出数据集。 这条规则的存在提醒了一件事:现场数据不只是有没有的问题,还有全不全的问题。一个站可能因为访客集中在某些小众设备、小众地区、小众浏览器版本上,导致相当一部分体验根本没被计入。 做小语种市场、做新兴市场的站尤其要留意这一条。跨源资源上那批被抹成零的性能字段 (https://zhangwenbao.com/cross-origin-timing-allow-origin-web-vitals-blind-spot.html)是同一类麻烦的另一个版本:报表上那个数是真的,但它代表的范围比你以为的窄。 ## 页面速度工具给的又是另一种口径 核心指标报告的文档里顺带说了一句差异:核心指标报告把数据和状态合并进网址组,而页面速度工具通常显示单个网址的数据,除非这个网址自己的数据不够。所以同一个网址在两个地方看到的数字对不上是正常的,因为一个是组的分位值,一个是这个网址自己的。 数据源 | 聚合层次 | 覆盖谁 | 能回答模板问题吗 | 现场数据源级 | 整站 | 全部访问,头部主导 | 不能,太粗 | 现场数据页面级 | 单网址 | 过得了门槛的少数页面 | 不能,不典型 | 核心指标报告的网址组 | 相似页面组 | 有足够数据的组 | 能,但只覆盖有数据的部分 | 页面速度工具实验室数据 | 单网址单次 | 任何网址 | 能,但要自己组织抽样 | 服务器日志 | 任意路径规则 | 全部请求 | 能,且不受门槛限制 | ## 把这张表读成一条建议 看完这五行,模板级诊断的路线其实已经清楚了:现场数据用来定位哪一类页面值得查,实验室工具用来查具体查什么,日志用来兜住那些前两者都覆盖不到的模板。三样东西各干各的,谁也替代不了谁。 常见的错误是只用其中一样。只看现场数据的人会以为没数据的地方就没问题;只跑实验室测试的人会对着一个自己挑的网址反复优化,而那个网址可能不代表任何东西;只看日志的人拿不到用户侧的感受。 把三样串起来的成本并不高,难的是想清楚每一样负责回答哪个问题。这跟收录、排名、流量分三层做诊断 (https://zhangwenbao.com/indexed-ranked-traffic-three-layer-seo-diagnosis.html)的思路是一致的:先分层,再选工具,别拿一个工具去回答它答不了的问题。 ## 能不能自己采一份,把中间那层补上 能,而且这是唯一一条真正能拿到模板级现场数据的路。浏览器有现成的接口可以在真实用户那边采集这几个指标,采到之后跟着一起上报的可以是任意维度——包括模板名。 关键就在这个附带维度上。官方数据集里没有模板这一层,是因为采集端不知道;换成你自己采,模板名是你渲染页面时就知道的东西,往上报里塞一个字段的事。同一份指标,多带一个字段,中间那一层就补上了。 实现上不复杂,主流分析工具都支持自定义维度,愿意自己攒的话把数据落到数据仓库里更灵活。把分析数据接进数据仓库做用户旅程分析 (https://zhangwenbao.com/dtc-ga4-bigquery-user-journey-stape-server-side.html)那套管线搭起来之后,加这一个字段几乎是顺手的事,成本主要在头一次搭。 ### 自采数据也有它的门槛,只是换了个形式 别以为自采就没有样本量问题。一个模板下如果一个月只有几十次访问,你自己采到的分位值同样不可信,跟官方数据集面临的是同一个统计学难题。 区别在于你可以自己决定门槛,也可以自己决定聚合到哪一层。官方给你两个固定层次,自采的话想按模板聚合就按模板聚合,想按模板加国家聚合也行,样本不够就往上合并一层,这个决定权在你手里。 另一个区别是时间窗。官方数据用的是滚动28天窗口,你自己采的可以看昨天,也可以看上线前后各两小时。做改版验收的时候,这个差别是决定性的——等28天窗口更新完,出问题的版本早就跑了一个月了。 ## 新站和小站怎么办 流量还没起来的站,官方数据集里可能连整站那一行都没有。这时候纠结现场数据没有意义,直接走实验室路线:按模板清单逐条跑页面速度测试,一次跑完全部模板,得到一份纯实验室口径的基线。 实验室数据的毛病是它测的是一台模拟设备在一条模拟网络上的表现,跟真实用户的分布对不上。但在没有现场数据的阶段,它至少能回答模板之间的相对好坏——商品页比列表页慢一倍这件事,实验室数据也测得出来。 等流量起来之后,前面那份实验室基线还有一个额外用处:拿它跟新拿到的现场数据对一遍,差异大的模板说明真实用户的处境跟模拟环境差很多,多半是网络条件或者设备性能的问题,而不是代码的问题。 ## 桌面和移动要不要分开数模板 这个问题的答案取决于实现方式,判据还是那一句:改一处会影响哪一批页面。响应式的站改一个模板文件,桌面和移动一起变,那就是一个模板;独立移动站改的是另一套代码,那就是两个。 现场数据这边倒是永远分开的——核心指标报告按终端拆成移动和桌面两份,同一个网址组在两边可能是完全不同的状态。这一点跟模板数怎么数无关,是数据本身的组织方式。 所以对响应式的站会出现一个有点绕的局面:一个模板,两份数据。处理办法是把终端当成分支看待,跟缺货、预售那些分支同等对待——同一个模板在移动端上的表现差,那就是移动端这条分支上的问题,改的时候多半只需要动样式而不用动结构。 ## 国际方法学怎么定样本量,页面数多和模板数多哪个说了算? ## 有一份标准专门规定了这件事怎么做 这个问题不用自己拍脑袋,W3C有一份网站无障碍一致性评估方法 (https://www.w3.org/TR/WCAG-EM/),专门规定评估一个网站时该怎么选样本、选多少、怎么验证选得对不对。它面向的是无障碍评估,但抽样这一节的逻辑跟技术SEO审计几乎完全通用。 这份文件的价值在于它把很多人凭经验做的事写成了明文步骤,而且写得相当细:先定评估范围,再探索产品结构,再选样本,再评估,最后出报告。抽样这一步排在第三,前面两步全是为它做准备的。 做过审计的人看到这个顺序会有点意外——大多数人的实际流程是打开工具就开始爬,爬完再想怎么归类。标准把探索结构放在抽样之前,等于说你得先知道这个站有几种页面,才谈得上抽多少条。 ## 标准怎么定义要区分的那几类 探索这一步里有一小节叫识别样本类型的多样性,正文第一句是这么说的:样式、布局、结构和功能各不相同的样本,往往在无障碍支持上表现不同;它们通常由不同的模板和脚本生成,或者由不同的人撰写。 这句话把模板两个字明明白白写进了国际标准。标准不认为页面类型是个玄学概念,它直接指出了物理成因——不同的模板,不同的脚本,不同的作者。 这跟本文一路在说的是同一件事,只不过标准是从评估方的角度说的:你要抽样,就得先按生成方式把页面分类,因为同一个生成方式产出的东西,看一个和看一百个没区别。这句话2014年就写在那儿了,现在读起来一点不过时。 ## 标准列了一串影响样本量的因素 决定抽多少条的时候,这份文件列了一长串要考虑的因素,其中有两条摆在一起特别有意思。 第一条是产品规模:页面或视图更多的产品,通常需要更大的样本集。第二条藏在一致性那一组里:编码风格的多样性——文件里特意加了个括号解释,这些差异通常来自生成代码的不同脚本、模板和页面作者——多样性越大,需要的样本集越大。 标准列出的因素 | 指向什么 | 在电商站上的实际情况 | 产品规模(页面数) | 页面越多样本越大 | 几万到几百万,看着吓人 | 产品年龄 | 越老样本越大 | 老站确实有历史模板堆积 | 内容生成方式 | 运行时拼装的要更大 | 电商几乎全是运行时拼装 | 样本类型多样性 | 类型越多样本越大 | 五六十种,这才是真变量 | 编码风格多样性 | 模板与脚本越杂越大 | 跟模板数直接挂钩 | 开发流程规范度 | 越规范样本越小 | 规范的站能省一大半 | ## 两条因素打架的时候听谁的 问题来了:一个有20万个页面但只有50个模板的站,按第一条要大样本,按后面几条要小样本,标准没有给出这两条谁优先。 但它在下一步里其实回答了。选结构化样本那一节的注记写着:精心挑选这些有代表性的实例,能显著减少所需的样本集规模,同时仍然保持对整个产品的适当代表性。 > 这句话等于承认了页面数这个因素在模板化产品上基本失效。20万个页面里,只要你选得准,几十条就够代表全部;选不准,抽两千条也照样漏。决定样本量的从来不是总量,是类型数。 这也解释了为什么产品规模那一条要排在最前面——它是最容易观察的因素,适合排在前面提醒评估者别掉以轻心。但真正干活的是后面那几条。 ## 标准还配了一个防自欺的装置 光按类型选样本有个隐患:万一你对类型的划分本身就是错的呢?标准考虑到了这一点,在结构化样本之外要求再抽一组随机样本,数量是结构化样本的10%。结构化样本80条,就再随机抽8条,加起来88条。 这8条不承担评估任务,它们的作用是当指示器:把随机组的评估结果跟结构化组比一遍,如果随机组里出现了结构化组没有的内容类型,或者冒出了结构化组没有的问题,说明你的类型划分不够全,得回去补,然后重来一遍。 这个设计的性价比高得惊人。多花10%的成本,换一个能告诉你前面90%白做了没有的检验。而且它检验的不是被测对象,是你自己的判断——你以为站上有50种页面,随机抽8条撞上一种你没列过的,那50这个数就有问题。 ## 把这条搬到技术SEO审计上 搬过来几乎不用改。按模板清单每类抽1到2条,得到结构化样本;再从全站网址里完全随机抽10%数量的网址,看看这批随机网址能不能都归进你已有的模板标签里。 归不进去的那几条最值钱。它可能是一个你完全不知道存在的页面类型——某次活动留下的落地页、某个插件自动生成的归档页、某个测试环境泄漏出来的地址。预发布环境被收录之后的排查与回收 (https://zhangwenbao.com/staging-preproduction-environment-index-leak-prevention-recovery.html)里那种情况,靠模板清单是永远发现不了的,因为它压根不在你的清单里。 保哥做过几次这个检验,随机组撞出新类型的概率大概三分之一。三次里有一次会发现自己漏了一整类页面,这个命中率足够高,高到值得每次都做。 ## 逐条查网址要花多久,算一下就知道该不该做 说了半天抽样,还是得回答那个最朴素的问题:不抽样、逐条查全部网址,行不行。 Google官方文档里写着网址检查接口的配额:每个站点每天2000次,每分钟600次 (https://developers.google.com/webmaster-tools/limits)。这是硬上限,加钱也没用。 一个20万网址的站,全量跑一遍要100天。一个5万网址的站要25天。就算是2万网址的小站,也要10天。而这三个数字都超过了大多数电商站的发版间隔。 ## 跑完那天的结果,还算数吗 不算数了,这才是这笔账真正的结论。 100天里,站上会上新几批商品、下架几批商品、改一到两次模板、上线几个插件、调一次导航。等你扫到第19万条的时候,第1条的状态早就变了。你拿到的不是一张快照,是一段横跨三个月的曝光——就像用一台快门开了三个月的相机拍一个每天都在装修的房子,成片上什么都有,就是没有任何一个时刻是真的。 > 这条推论可以写成一句通用的话:当一次全量扫描的周期长于被扫描对象的变化周期,你永远得不到一份内部一致的快照,扫描的完整性反而变成了不一致性的来源。这跟工具好不好、预算够不够都没关系,是两个周期的比值决定的。 按模板抽样为什么能绕开这个问题?因为它需要的调用次数少两三个数量级。50个模板,每个取3条代表,150次调用,配额允许的情况下几分钟跑完,加上人工判读半天收工。半天之内站不会变,快照是一致的。 ## 那全量扫描是不是就没用了 有用,但它该由爬虫来做,不该由逐条调接口来做。爬虫的速率取决于你自己的服务器和目标站的承受力,跑几万页通常是几小时的事,跟接口配额完全是两个量级。 分工可以定得很清楚:爬虫负责全量、负责发现你不知道的东西;接口和人工负责抽样、负责判断这一类页面该不该是这样。前者回答有没有,后者回答对不对。 把两者混着用最浪费。拿接口去做全量是拿最贵的工具干最粗的活;拿爬虫去做判断则是另一个极端,爬虫能告诉你这个页面缺了描述标签,告诉不了你这个页面的描述该写什么。 ## 那到底该抽多少条 标准没给死数,因为它取决于前面那一堆因素。但按它的框架推一遍,能得到一个挺实用的区间。 先数模板,假设50个。每个模板至少1条,这是底线;有明显分支的模板(缺货、预售、多变体、无图)每条分支再加1条,实践中大约三分之一的模板有分支,加起来大概70条。再按标准要求补10%的随机样本,7条。总计77条。 77条这个量级,一个人一天能过完,接口配额零压力,爬虫抓取更是眨眼的事。跟20万条要跑100天相比,成本差了两千多倍,而覆盖的判断点几乎一样多。 方案 | 样本条数 | 接口配额下耗时 | 覆盖的页面类型 | 能发现的问题 | 全量逐条查 | 200000 | 100天 | 全部 | 全部,但快照不一致 | 随机抽200条 | 200 | 1天内 | 偏头部,覆盖不确定 | 看运气 | 按模板抽 | 50 | 几分钟 | 全部模板 | 模板级问题 | 模板加分支加随机 | 77 | 几分钟 | 全部模板与主要分支 | 模板级加类型遗漏 | ## 这跟统计意义上的样本量是两码事 得防一个误解。看到抽样两个字,做过实验的人容易往统计功效那边想——要多少样本才能检出多大的效应,置信度多少。对比实验的样本量该怎么算 (https://zhangwenbao.com/dtc-ab-test-sample-size-3-formulas.html)那一套公式在这里完全用不上。 原因在于两种抽样回答的问题不同。实验抽样要估计一个总体参数,样本越大估计越准,误差随样本量的平方根缩小。模板抽样不估计任何参数,它做的是穷举而不是估计——把50种情况一种看一遍,看完就是看完了,没有误差这一说。 说得再直白点:同一段代码渲染出来的两个页面,其结构性的对错是完全一致的。看第二个页面得到的信息量是零,不是很小,是零。这跟做用户调研完全不同,多问一个人总能多知道一点,多看一个同模板页面什么都不会多知道。 ### 唯一需要注意的例外 上面那句话有个前提:结构性的对错。数据驱动的差异不在此列,同模板不同数据的页面,该看还得看。 怎么区分?有个简单判据——这个问题的答案取决于代码还是取决于数据库里的某一行。缺规范标签是代码问题,看一条就够;标题超长是数据问题,得全量扫。前者按模板抽样,后者交给爬虫做全量规则校验。 大多数技术SEO问题落在代码这一侧,这也是为什么模板抽样对技术SEO特别有效。到了内容质量那一侧比例就反过来了,重复内容那类毛病 (https://zhangwenbao.com/content-duplicate-issue.html)既可能出在模板(同一段描述被所有页面复用),也可能出在数据(供应商给的文案本来就重复),两边都得查。 ## 标准对报告的要求,也值得抄一段 这份文件最后一步是出报告,要求把前面每一步的结论都记录下来——评估范围怎么定的、探索出了哪些页面类型、样本怎么选的、各选了哪几条。理由写得很实在:为了透明、为了结果可复现、也为了给报告里的每一句话找到依据。 技术SEO审计报告里最缺的恰好就是这几项。大部分报告直接从发现问题开始写,不交代查了哪些页面、为什么是这些页面、有没有漏掉哪一类。读的人没法判断这份报告的覆盖范围,也就没法判断没提到的东西是没问题还是没查。 补上这一段的成本极低——一张表,左边模板名,右边代表网址,加一句本次未覆盖哪几类及原因。写这一段花不了十分钟,但它把一份报告从结论清单变成了可追溯的材料,下一次审计还能拿来对照。 ## 上线前抽查的8个网址全是绿的,为什么用户看到的日期还是错的? ## 先交代这个站 去年接触过一个做跨境户外电源和便携储能的独立站,卖露营电源、太阳能折叠板、扩展电池包这些东西,主打北美和欧洲,客单价300到1500美元,团队二十来人,有自己的前端和后端。这个品类的特点是单价高、决策周期长、参数党多,用户会把三四个型号的参数表并排开着比。 它的商品结构比一般站复杂:一个型号会按插头制式分出美标、欧标、英标、澳标四个版本,再按容量分两三档,一个型号能生出十来个可售组合。全站算上分类页、内容页和参数页,被收录的网址一万八千多个。 模板数保哥后来陪他们数过,41个。一万八千多除以41,平均每个模板背后450个页面。 ## 那次改版改了什么 问题出在一次商品页改版上。这次改版的主要目的是把送达日期从原来的一句模糊说法改成具体日期区间,用户在商品页上就能看到大概哪天到,这是这个品类里挺关键的一个信息——买露营装备的人经常是冲着某个具体的出行日期下单的。 新逻辑要根据仓库位置、承运商时效和商品属性算出一个区间。其中带锂电池的商品要走特殊渠道,处理时间比普通货多5到7天,这一条在需求文档里写了,代码里也确实写了一个分支。 问题是那个分支的判断条件写反了:本该给带电池的商品加处理时间,实际加到了不带电池的商品上。于是所有带电池的商品页——占全站商品页九成——都显示了一个偏早5到7天的日期。 ## 上线前的验收是怎么过的 这家的流程算规范的,改版有回归测试,测试规范写着每次改动抽查不少于5个网址。这次抽了8个,比规范要求的还多3个。 8个网址逐个打开,日期都显示出来了,格式对、区间合理、跟后台配置的时效对得上。全绿,通过,上线。 问题出在这8个网址是怎么选出来的。测试同学从后台导出商品列表,按商品编号排序,取了前8个。而这个站的商品编号是按上架顺序生成的,最早上架的一批是配件——线材、支架、收纳包、车充转接头,全部不带电池。 ## 8个网址,全落在同一条分支上 这就是那次事故的全部技术原因。8个样本,覆盖了1个模板的1条分支。而这次改动动的是这个模板的分支判断,恰好是这8个样本一条都没走到的那一半。 更准确地说:这次改动引入的两条路径里,被验证的那条是正确的(不带电池,不加时间,显示正常),出错的那条一次都没被打开过。 验收报告上写的是:本次回归抽样8条,覆盖率8/18000,符合抽样规范要求。这句话每一个字都是真的,规范也确实是这么写的。 ## 如果规范换个写法,要抽几条 这是保哥后来跟他们复盘时算的一笔账,也是这个案子里最扎心的地方。 把规范从每次改动抽查不少于5个网址,改成每条被改动的模板分支至少覆盖1条网址,这次要抽几条?2条。带电池的一条,不带电池的一条。 2条比8条少了四分之三,在任何一份按条数算的规范里都更不合规。但2条能发现问题,8条发现不了。 抽样规范写法 | 本次要抽 | 覆盖分支 | 能否发现 | 规范符合度 | 不少于5个网址 | 8条 | 1条(不带电池) | 否 | 超额完成 | 不少于20个网址 | 20条 | 仍可能只有1条 | 看排序运气 | 超额完成 | 每条改动分支至少1条 | 2条 | 2条(全部) | 是 | 刚好达标 | > 这张表能读出一句挺重的话:当抽样规范用错了单位,合规性和有效性会指向相反的方向。抽得越多越显得认真,也越容易在同一条分支上打转;而真正有效的那个做法,在按条数计的规范里看起来像是在偷懒。 ## 这个错误在报表上是什么形态 上线之后三个月,没有任何一个数字报警。这才是这个案子真正值得写下来的部分。 页面索引报告全绿,一万八千个网址收录正常——模板没坏,页面返回200,结构化数据校验通过,日期字段有值而且格式合法,只是算错了。核心指标报告也全绿,改版没影响性能。结构化数据的抽取与校验 (https://zhangwenbao.com/schema-extractor-structured-data-audit-guide.html)那类检查同样过不了这一关,因为它校验的是格式而不是数值对不对。 客服工单里有反馈,但被归进了物流类。用户说的是东西比说好的晚到了几天,客服查履约系统,发现清关和运输节点都正常,就按物流延迟处理,该道歉道歉,该补偿补偿。三个月里这类工单一共两百多条,分散在每天两三条,没有任何一天出现过尖峰。 ## 为什么没有人把它们连起来 因为物流慢是一个本来就存在、而且一直有量的工单类目。跨境电商的物流永远有一部分订单会晚,这是常态。这次多出来的两百多条混进去,只是让这个类目的基数比往常大了一点。 > 保哥后来把这一层写成了一句通用的话:当一个错误的表现形式恰好落进一个本来就存在的正常类目里,它不产生任何异常值,只是让那个类目的基数变大一点;而基数变大一点这件事,在任何一份月度报表上都读作正常波动。 这跟那种会报错、会跳红的问题完全是两种难度。会报错的问题只要有人看报表就会被发现;这种问题你把报表看穿了也发现不了,因为它在报表上的形态是正常的。 ## 最后是怎么发现的 一个德国客户投诉的时候截了图。他买的是一台带电池的电源,商品页上写的日期是8月12日到8月16日,实际8月21日才到,他把商品页的截图和物流轨迹的截图一起发了过来,问这个日期是怎么算出来的。 客服转给了产品经理。产品经理把那台机器的履约时效在后台调出来,跟截图上的日期一比,差了6天。再点开一个不带电池的配件页,日期是对的。两分钟之内定位到了那个写反的判断。 触发这次发现的动作,本质上是把用户看到的那一页和内部系统里的数并排放了一次。这个动作在此之前三个月里没有任何一个人做过——不是没人负责,是这件事不在任何一个岗位的日常动作里:客服看履约系统,产品看需求文档,测试看验收用例,研发看代码,运营看订单列表,五个人看的是五份不同的材料,没有一份是用户屏幕上那一页。 ## 改完之后他们做了什么 修那个判断花了十分钟。真正有价值的是后面那件事:他们把回归测试清单从网址列表改成了模板分支清单。 原来的清单是一份60条网址的表格,谁也说不清这60条是怎么来的,大概是历次上线随手加进去的。新清单是一份31行的表,每行一个模板分支,配一条代表网址——41个模板里有分支的那些拆开算,一共31条需要单独覆盖的路径。 行数从60掉到31,少了将近一半,而覆盖的形态从说不清变成了明确的31种。第一次按新清单跑,就在另外两条分支上撞出了两个存量问题:礼品卡商品页显示了一个并不存在的运费估算(礼品卡是虚拟发货,不该有运费模块),预售商品页把预售开始日期渲染成了到货日期。这两个问题都不知道存在了多久。 ## 业务上的账怎么算 直接损失能算的部分不多:两百多条工单的处理成本,几十单的补偿,一些差评。这些加起来对一个二十人团队来说不算伤筋动骨。 算不出来的是另一部分。这个品类的用户是冲着具体出行日期买的,日期错了6天,对一部分人来说就是这次露营用不上了。这些人里有多少退了货、有多少没退货但再也不来了,报表上看不出来——没回来的人在任何数据里都是一个空格,不是一个数字。 更微妙的是复购率。这个站的复购率在那三个月里掉了不到两个百分点,落在正常波动范围内,当时没人在意。事后回看,那个数很可能就是账单,只是它长得跟噪声一模一样。 ## 组织上的教训比技术上的大 技术上的教训一句话就够:抽样规范要按分支写,不要按条数写。组织上的教训要绕一点。 这次事故里,每一个岗位都在正确履职。测试按规范抽了8条还超额了,客服按流程归了类,运营按后台数据回复了用户,研发没收到任何bug报告。整条链上没有一个人做错事,错的是链条的组织方式——所有人的工作单位都是网址、订单、工单,没有一个人的工作单位是模板。 所以解法也不能是要求大家更认真。更认真的测试同学会抽20条而不是8条,仍然可能全落在同一条分支上。履约模式的选择 (https://zhangwenbao.com/dtc-fulfillment-4-models-warehouse-fba-3pl-4pl-cost-scenario.html)再讲究,也管不到商品页上那个日期是怎么算的。真正管用的只有一件事:把单位换掉,让清单本身逼着人去覆盖每一条分支。 ## 为什么抽更多条不是解法 复盘会上有人提议把规范从5条改成50条,觉得基数大了总能撞上。这个提议听着合理,算一下就知道不行。 这个站商品页里带电池的占九成,不带电池的占一成。按商品编号排序取前50条,因为编号是按上架顺序生成的,前面那一批全是早期上架的配件——排序方式没变,取50条跟取8条落在同一片区域,一条带电池的都碰不到。 就算改成随机取50条,带电池的占九成,随机抽到的绝大多数反而是带电池的,这次能撞上。但下一次改动如果落在某个只占1%的分支上,随机50条漏掉它的概率超过六成。靠概率去覆盖分支,永远是在赌这次改的那条路够不够常见。 ## 这个坑换个场景还会出现 同样的形状保哥在别的地方也见过几次,列出来方便对号入座。 一种是多站点多区域的电商系统。多店铺架构下网站、商店与视图的层级关系 (https://zhangwenbao.com/magento-2-multi-store-architecture-website-store-view-shared-catalog-checkout.html)把同一套代码铺到几个区域,验收时习惯只在主站上测,某个区域独有的税费展示或者合规提示出问题,要等当地用户投诉才知道。这里的分支单位是模板乘以区域。 另一种是库存状态。有货、缺货、预售、限购、仅剩几件,同一个商品页模板要渲染五六种状态,而验收时打开的商品几乎总是有货状态——因为测试环境里的商品默认都有库存。多仓库存与预留机制 (https://zhangwenbao.com/magento-2-msi-multi-source-inventory-stock-reservation-multi-warehouse.html)越复杂,能走到的状态分支越多,被覆盖到的比例反而越低。 还有一种是登录态。同一个页面对游客、新客、老客、会员等级不同的用户显示不同的价格和不同的模块,而做验收的人永远是登录着的那一个。这一类分支的共同特点是:默认状态最容易到达,于是它被测了一百遍,其余状态一遍都没有。 ## 新清单该由谁维护 换成模板分支清单之后,最现实的问题是这份表会不会半年之后过期。会的,只要没人管它。 那个站后来的做法是把它挂在发布流程上:上线检查清单里加了一行必填——本次改动触碰了哪几个模板分支,填名字,不填网址。不设下拉选项,不做校验,判定规则只有填了和没填两种。 这个设计的用意是让它活得下去。凡是需要执行者具备判断力才能填对的字段,最后都会变成空的或者随便填的;只要求填个名字的字段才可能长期被填。填错了也没关系,下次改动同一处的人会发现名字不对然后改掉。 ## 三个月后那一栏变成了什么 最值钱的东西是这个字段的副产品。三个月之后,把这一栏的值统计一遍,得到的是一张模板改动热力图:哪个模板每个月被碰五次,哪个模板一年没人动过。 被碰得最勤的那几个,说明业务压力集中在那儿,值得单独做一次结构梳理;一年没人动过的那几个,才是真正该警惕的——没人动过不代表没问题,只代表没有人在它上面工作过,也就没有人有机会发现它的问题。那两个撞出来的存量问题(礼品卡运费、预售日期)就落在这一档里。 这张图不用专门去做,它是填字段的副产品,成本为零,而且会持续更新。相比之下,专门组织一次全站盘点得排期、得占人、还只能得到一个时间点上的快照。 ## 不买工具、不加埋点,这周怎么把模板清单数出来? ## 先说这几件事的共同前提 下面六件事保哥都实际带人做过,共同点是都不需要新增预算、不需要开发排期、不需要在页面上加任何埋点。用的全是你已经有的东西:Search Console里的报表、代码库、上线流程文档。 另一个共同点是它们都不产生一个可以拿去汇报的分数。这一点得提前说明白,因为很多改进动作之所以推得动,靠的是能产出一个数字给领导看。这几件事产出的是清单和比值,不是排名。 最后一个前提:这几件事做完不会让流量涨。它们改变的是发现问题的效率,不是问题本身。把发现成本从一周降到半天,收益体现在后面每一次改动上,不体现在这一次。 ## 第一件:给每个模板分支存一条代表网址 这件事排第一,跟大多数人的直觉不一样。直觉会觉得应该先数模板,数完才谈得上存代表。但实际做下来,数模板和存代表基本是同一个动作,而后者的产出是永久的。 做法:开一张表,两列,左边模板分支名(商品页有货、商品页缺货、商品页预售、列表页有筛选、列表页零结果、结账第二步……),右边一条代表网址。名字随便起,能让团队里另一个人看懂就行。 这张表做完之后,所有需要挑页面的场合都用它:跑速度测试用它,做改版验收用它,请人做人工走查用它,交给外部顾问做审计也是先给这张表。它是这几件事里唯一一个做完之后每周都会被用到的产出。 ## 第二件:数一次模板,判据只有一句 数的时候不要数文件,数渲染形态。判据是那句话:改这一处,会同时影响哪一批页面。凡是答案不同的,就是不同的形态。 三条捷径可以加快这一步。第一,打开导航把每一个链接点一遍,能覆盖大约七成形态;第二,翻网址结构,路径的每一段前缀通常对应一类页面;第三,问一句研发有没有现成的路由表,很多站是有的,只是从来没人问过。 数出来的结果多半在35到70之间。数完之后跟企业站审计框架里那几个模块 (https://zhangwenbao.com/enterprise-website-seo-audit-framework.html)对一遍,看有没有整块的界面从来没被想起来过——过滤器面板、空状态页、错误页、打印样式这几类是高发区。 ## 第三件:算一次错位比 把页面索引报告导出,数一下行数;再拿第二件事数出来的模板数。两个数相除。 这个比值本身不做任何决策,它的用途是说服。在会议上说我们的报表比施工单位细了400倍,比说我们应该按模板做审计有用得多,因为前者是一个数,后者是一个观点。 顺手还能算第二个比值:报表行数除以问题类型数。这个数告诉你平均一个问题类型被拆成了多少行。两个比值一起放,一份看起来有几千件事要做的报表,会露出它真实的形状——十几个问题,落在几个模板上。 ## 第四件:把核心指标报告的组名单抄下来对一遍 这件事前面详细说过原理,操作上就是点开报告里每一个问题,把代表网址记下来,看它们分别落进你自己模板清单的哪一格。 找两种不一致:一个组的代表网址跨了你的两个模板标签,或者两个组的代表网址落进你的同一个标签。前者说明你分细了或者Google认为它们同质,后者说明你分粗了或者这个模板里有条你不知道的岔路。 整理出来通常是一份十几行的差异清单。这份清单的价值在于它是唯一一份由外部视角产生的、关于你站结构的评估,而且完全免费。 ## 第五件:把回归清单的单位换掉 找到团队现在用的那份上线验收清单,看它是怎么写抽样要求的。如果写的是抽查不少于多少个页面,就把它改成每条被改动的模板分支至少覆盖一条。 改这一行字的成本是零,效果在前面那个案子里已经很清楚了。要注意的是条数往往会变少,得提前跟负责验收的人说清楚这不是放松要求,否则第一次执行就会有人觉得是在偷工减料。 配套要做的是把第一件事产出的那张代表网址表挂在清单旁边,让执行的人不用自己去想该测哪条。清单说要覆盖商品页缺货分支,表里就有一条现成的缺货商品网址,点开就能测。 ## 第六件:数分支,不是数模板 这是六件里唯一需要研发配合的,但只要半小时。让研发在模板文件里搜一遍条件判断,把那些会显著改变页面结构的分支列出来——不是所有if都算,只算那些会让页面上多出或少掉一整个模块的。 数出来的分支数通常是模板数的两到四倍。41个模板对应31条需要单独覆盖的关键分支(不是每个模板都有分支),这个比例在实践里挺典型。 分支清单比模板清单更接近真实的检查面。前端渲染方式带来的差异 (https://zhangwenbao.com/javascript-rendering-seo-csr-ssr-debugging.html)在这里尤其明显:同一个模板在服务端渲染和客户端渲染两条路径下产出的东西可能完全不同,那其实是两条分支,得分开测。 ## 这六件该按什么顺序做 保哥排优先级一直用两个维度相乘:拿到成本,以及结论能不能直接变成动作。本文这一批的反直觉之处在于,成本最低的那件排在了中间。 动作 | 拿到成本 | 结论能否直接变成动作 | 建议顺序 | 存代表网址表 | 半天 | 能,而且长期复用 | 1 | 数模板 | 两小时 | 不能,数完还得决定做什么 | 2 | 换回归清单单位 | 十分钟 | 能,下次上线立刻生效 | 3 | 算错位比 | 半小时 | 不能,但能推动前三件 | 4 | 对核心指标组名单 | 一小时 | 能,差异清单直接是待办 | 5 | 数分支 | 半小时加研发配合 | 能,但依赖第一件 | 6 | 数模板成本只有两小时,却排在第二而不是第一,原因是它的结论落不了地。数出41个模板之后,下一句话是然后呢;而存好代表网址表之后,下一句话是这周的速度测试就用它。能直接接上一个具体动作的产出,永远比一个更准确但悬着的数字有用。 ## 四条边界,别把它用过头 第一条,模板数不是一个精确的数。组件化之后边界本来就模糊,两个人数可能差三五个。这不影响使用,因为它的用途是指导抽样而不是核算,差几个不改变任何结论。 第二条,按模板抽样查不出数据驱动的问题。某个商品的图挂了、某条描述被截断了、某个价格是0,这些只能靠全量扫描。两条路都得走,别指望一个替代另一个。 第三条,模板清单会过期。功能上线、旧页面下线、活动页堆积,半年不管它就是一张废纸。所以第五件事里那个必填字段才是关键——它让清单自己更新,而不是靠人定期盘点。 第四条,这套做法降低的是发现问题的成本,不降低修问题的成本。发现从一周变半天,修还是要修那么久。日常那份SEO动作清单 (https://zhangwenbao.com/seo-daily-work-checklist.html)该做还是要做,这件事不替代它们。 ## 口径换了,报表上的数会先掉后涨 最后交代一件容易翻车的事。按模板口径重新整理之后,待办条目数会从几千掉到几十,掉两个数量级。这个数如果被当成成绩报上去,后面会很难收场。 因为按模板修完第一轮之后,剩下的确实是页面级的个案,它们归不到任何模板上,条目数会重新往上走。第二个月报表上的数比第一个月多,这是必然的,跟工作有没有做好没关系。 正确的做法是动手之前先说一句:这个数会先掉一大截再回升一点,掉的那部分是被合并的不是被修掉的,回升的那部分是本来就在但之前被埋在几千行里看不见的。这句话在动手前说是预告,等报表出来再说全像找补。 这跟做SEO数据向上汇报 (https://zhangwenbao.com/dtc-ecommerce-seo-reporting-stakeholder-communication.html)时那些口径变更的处理原则是一样的:口径变了必须先声明,因为读报表的人记住的是趋势线的形状,不是脚注里那行小字。 ## 这件事该谁牵头 按经验,牵头的人得同时够得着报表和代码。SEO一个人做不完,他看得懂报表但摸不准模板边界;研发一个人做也不行,他清楚模板但分不出哪些报表条目是真问题。 最省事的组合是两个人坐在一起花一个下午,做完之后固化成脚本。后端工程师和SEO配合的那几个动作 (https://zhangwenbao.com/backend-engineer-seo-collaboration-7-actions-canonical-sitemap-redirect.html)里说的分工原则在这里同样适用:一次性的判断由人做,重复性的执行交给脚本,别把两者混在一个人身上。 如果团队里连这两个角色都凑不齐——很多十人以下的跨境团队是这样——那就只做第一件和第三件。存一张代表网址表,改一行验收规范,这两件一个人半天能做完,而它们贡献了这套方法八成的价值。 ## 三个大概率会遇到的反对意见 第一个:我们的站没那么复杂,用不着。这个判断得用数说话,先算错位比。低于50确实用不着,高于200就别争了。中间那一档看团队精力,做了不亏。 第二个:这不就是页面类型分类吗,我们早就分过了。分过和用起来是两回事。追问三句就知道分没分到位——这份分类表现在在哪儿、上一次更新是什么时候、上次做验收的时候用到它了吗。三句里有一句答不上来,那份分类就等于不存在。 第三个:Google是按网址排名的,你按模板做会漏东西。这个担心方向是对的但结论反了。按模板做不是不看网址,是先把网址按模板归好再看;电商站上哪些页面类型该拦在收录之外 (https://zhangwenbao.com/page-types-to-block-in-robots-txt-for-ecommerce.html)这类决策本来就是按类型做的,从来没人一条一条网址地决定要不要收录。 ## 三十天里可以这么排 第一周做第一件和第二件:数模板,存代表网址表。这周结束时手上有一张40到70行的表,这是全部工作的地基。 第二周做第三件和第五件:算错位比,改验收规范。错位比拿去开一次会,把为什么要换单位这件事说清楚;验收规范当场改掉,下一次上线就生效。 第三周做第四件:对核心指标报告的组名单,产出差异清单。这周会有惊喜,通常能捞出两三个之前完全不知道的结构问题。 第四周做第六件,顺便把前三周的产出整理成一份能交接的文档。重点是让这些东西不依赖你个人——你休假两周回来它还在被用,这套方法才算真正落地了。 ## 做完之后能看到什么变化 最先出现的变化不在流量上,在会议上。同一份问题清单,从八千行变成十几行之后,讨论的内容会从这个工作量太大了变成这几件先做哪一件。这个转变通常在第一次会上就能感觉到。 第二个变化在验收环节。按分支覆盖的清单跑上线检查,头几次会连续撞出存量问题——那些一直存在、只是从来没有人打开过那类页面的问题。前面那个案子第一次跑就撞出两个,这个命中率在别的站上也差不多。 流量层面的变化来得晚一些,而且不好归因,因为它是通过缩短问题存活时间实现的。一个模板级问题原来平均要三个月才被发现,现在两周内就能被验收流程逮到,省下的是那两个半月里持续发生的损失——而这部分损失,跟前面那个案子里没回来的用户一样,在报表上永远是一个空格。 ## 同一张清单,四个角色各取所需 这张模板清单做出来之后,最省力的推广方式是让每个角色都在上面找到自己要的那一列,而不是开会宣讲一遍方法论。 SEO拿它当抽样依据,验收清单和监控范围都挂在上面;前端拿它当回归范围,改动落在哪个模板就测哪几条;产品拿它当功能地图,新需求要动哪几种界面一目了然;设计拿它当资产盘点,看看有没有几个界面长得该统一而没统一。 设计和SEO配合的那几个动作 (https://zhangwenbao.com/web-designer-seo-collaboration-7-actions-ia-figma-typography-image-cta.html)里最难落地的一条就是让设计稿和线上页面的对应关系保持清晰,而模板清单恰好是两边共用的那把尺子——设计稿按界面组织,代码按模板组织,两者本来就该是一一对应的,只是很少有人把这个对应关系明确写下来过。 写下来之后有个附带好处:新人进来第一周看这张表,比看任何入职文档都快。四十来行,站上有什么、长什么样、归谁管,一次看完。 ## 常见问题解答 ## 模板数和页面类型数,说的是同一件事吗? 基本是同一件事,但侧重不同。页面类型是从用户或者搜索引擎的视角划分的——这是一个商品页、这是一个分类页;模板是从代码视角划分的——这些页面由同一个文件渲染。 大多数时候两者能对上,因为类型不同的页面通常也由不同的模板生成。对不上的情况有两类:一类是同一个模板渲染出了用户眼里不同的东西(比如商品页和礼品卡页共用一个模板),另一类是不同模板渲染出了用户眼里一样的东西(改版留下的旧模板)。做审计的时候按模板划分更实用,因为你最终要改的是代码,而代码只认模板。 ## 用爬虫工具能不能自动数出模板数? 能数出一个近似值,但要人工修正。常见做法是抓完全站之后按页面结构相似度聚类,或者按网址路径规则分组,两种办法都能把几万个网址收敛成几十组。 需要人工修正的地方在于分支。爬虫看到的是渲染结果,缺货商品页和有货商品页在它眼里可能是两类,也可能因为差异不大被归成一类,这取决于聚类的阈值怎么定。而这两种情况恰恰是你最需要分开的。所以自动聚类适合当起点,最后那一遍还得有人对着代码确认一次,通常花不到一小时。 ## 核心指标报告里的网址组,能直接当模板清单用吗? 不能当完整清单用,但可以当校验用。那份报告只包含有足够现场数据的组,你站上访问量低的模板根本不会出现在里面,通常有三到五成的模板是缺席的。 它的正确用法是反过来:先自己数出模板清单,再拿报告里的组去对,看有没有一个组横跨了你的两个标签,或者两个组落进了你的同一个标签。这两种不一致都是线索,前者说明你分细了或者它们确实同质,后者说明这个模板里有条你没数到的岔路。整理出来通常十几行,是全站唯一一份外部视角的结构评估。 ## 站上有几十万个网址,全量爬一遍到底要多久? 爬虫全量抓取跟逐条调接口是两回事,别搞混。爬虫的速度取决于你设的并发和目标服务器的承受力,几万页通常几个小时,几十万页一两天,成本主要是带宽和服务器压力。 真正卡脖子的是网址检查接口,官方配额是每站每天2000次,20万网址要跑100天。100天里站已经变了好几轮,扫完得到的不是一张快照而是一段横跨三个月的曝光。所以合理的分工是:爬虫做全量发现,接口和人工做抽样判断,别拿接口去做全量。 ## 按模板抽样,会不会漏掉个别页面上的问题? 会,而且这是这套方法明确的边界。某个商品的主图挂了、某条描述被截断、某个价格填成了0,这些由数据造成的问题在模板层看不见,只能靠全量扫描发现。 区分的判据很简单:这个问题的答案取决于代码,还是取决于数据库里的某一行。缺规范标签是代码问题,看一条就够;标题超长是数据问题,得全量扫。技术SEO的问题大多落在代码这一侧,所以模板抽样特别有效;内容质量那一侧比例会反过来,两条路都得走。 ## 只有几百个页面的小站,有必要做这套吗? 先算一下报表行数除以模板数。这个比值低于50的时候,按网址推进反而更快,多加一层归并纯属仪式感,没必要做。 不过有一件事小站也值得做,就是存一张模板代表网址表。它的用处跟站的大小无关——每次改版验收挑页面、每次跑速度测试挑页面、每次请外部顾问看站都用得上。小站做这张表可能只要二十分钟,往后每次省的都是实打实的时间。至于错位比、组名单校验那几件,等站长到几千页再说。 ## 这跟团队已有的技术SEO审计清单冲突吗? 不冲突,它管的是另一件事。已有的审计清单回答的是要查哪些项目——收录、重定向、结构化数据、速度、内链,这些项目一条都不会因为换单位而减少。 换单位改变的是每一项该在多少个页面上查。原来是抽一把网址逐项查,现在是按模板清单逐项查,项目还是那些项目,只是抽样的组织方式变了。实际操作上就是在原有清单前面加一列模板名,把原来的一遍拆成按模板各一遍。清单不用重写,加一列就行。 ## 权威参考资料 ## 电商SEO最重要的5点:从AI爬虫到accessibility 42步实战 - URL:https://zhangwenbao.com/technical-seo-audit-five-new-layers-ai-era.html - 分类:电商SEO - 发布:2026-04-28 | 更新:2026-05-16 - 摘要:GPTBot、ClaudeBot、PerplexityBot、CCBot都不执行JS,ChatGPT Atlas读的是accessibility tree而不是HTML,研究还显示约44%的AI引用来自页面前30%。本文据此给出五层技术SEO审计的完整框架和实操优先级排序,适配AI爬虫时代。 - 关键词:robots.txt,技术SEO,AI爬虫,SSR > **TLDR**:摘要:GPTBot、ClaudeBot、PerplexityBot、CCBot都不执行JS,ChatGPT Atlas读的是accessibility tree而不是HTML,研究还显示约44%的AI引用来自页面前30%。本文据此给五层技术SEO审计——robots、JS渲染从优化变准入、结构化数据的AI加成、accessibility tree、内容位置与可提取性,给从哪层开始改的优先级。 > 摘要:GPTBot、ClaudeBot、PerplexityBot、CCBot都不执行JS,ChatGPT Atlas读的是accessibility tree而不是HTML,研究还显示约44%的AI引用来自页面前30%。本文据此给五层技术SEO审计——robots、JS渲染从优化变准入、结构化数据的AI加成、accessibility tree、内容位置与可提取性,给从哪层开始改的优先级。 2026年Q1 Cloudflare的统计是这样:全网流量里30.6%来自bot,其中AI爬虫 (https://zhangwenbao.com/technical-optimization-crawler-friendly-ai-citations-2026.html)和agent占比持续涨。但你站的技术SEO审计还是2022年那套——查crawlability、indexability、CWV、移动友好、structured data,全部针对Googlebot设计。这套审计对GPTBot (https://platform.openai.com/docs/bots)、ClaudeBot (https://support.anthropic.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler)、PerplexityBot来说不够用。 保哥过去半年带客户做技术审计时反复遇到一个怪现象:站点Lighthouse满分、Googlebot抓取正常、结构化数据齐全,但在Perplexity (https://zhangwenbao.com/ai-search-engine-geo-optimization-strategy.html)和ChatGPT browsing里citation次数稳定为零。挖下去发现技术SEO要加一层"机器消费者"维度——AI爬虫看你站的方式跟Googlebot不一样,审计也得加新维度。 这篇把"AI时代技术SEO审计"拆成5层:AI爬虫准入、JS渲染、结构化数据的AI加成、semantic HTML与accessibility tree、AI可发现性信号。每一层给具体审什么、用什么工具、踩什么坑。最后聊一个反直觉的事实——这些层级的优化对Google传统排名几乎没直接影响。 ## robots.txt这一层比想象的复杂 2026年的robots.txt不再是"allow Googlebot disallow一切"那么简单。AI爬虫有自己的user agent,每个的行为规则不同,你得逐个决定怎么对待。 主要的AI爬虫user agent现在有这些:GPTBot(OpenAI训练)、ClaudeBot(Anthropic训练)、PerplexityBot(Perplexity检索)、Google-Extended(Google AI训练)、Bytespider(字节跳动)、AppleBot-Extended(Apple AI)、CCBot(Common Crawl)、ChatGPT-User(ChatGPT user-triggered browsing)。每个的"训练/检索/用户触发"角色不同。 Cloudflare的数据揭示了一个反差很大的事实——AI爬虫的流量89.4%是训练用,8%是搜索检索用,2.2%才是user-triggered agent。三类的"对你站的回报"差距也很大: ClaudeBot爬20600个页面只给你1个referral回流——拿你内容训练但不导流量。OpenAI的比例略好——1300:1,仍然是悬殊的"拿走多还回来少"。Meta的爬虫零referral——纯粹拿数据。你要不要让训练型爬虫拿走你内容、换零回报?这是商业决策不是技术决策。 ## 具体robots.txt该怎么写 有几个常见策略: 策略一:开放检索/限制训练。允许ChatGPT-User、PerplexityBot、Google-Extended等检索/搜索类爬虫;屏蔽GPTBot、CCBot、ClaudeBot、Bytespider等纯训练类。这套适合内容站——你想被AI搜索引用拿曝光,但不想白送给AI训练。具体写法: User-agent: GPTBot Disallow: / User-agent: ClaudeBot Disallow: / User-agent: CCBot Disallow: / User-agent: Bytespider Disallow: / User-agent: PerplexityBot Allow: / User-agent: OAI-SearchBot Allow: / User-agent: ChatGPT-User Allow: / 策略二:全开放。所有AI爬虫都不屏蔽。这套适合需要brand曝光大于内容保护的站(早期DTC品牌、新内容站)。被训练拿走是间接的品牌曝光(即便不直接导流,AI回答里偶尔提到你站名是有价值的)。 策略三:全屏蔽。所有AI爬虫都拒。这套适合内容是付费墙后的、有版权敏感性的、或纯B2B不在意AI流量的站。但屏蔽后AI Overview/Perplexity完全看不到你——这是有代价的。 大部分站点应该在策略一附近——不是默认全开也不是全关,逐个评估。 ## 一个不在robots.txt里的特殊存在 2026年3月20日Google上线了一个新的user agent叫Google-Agent (https://zhangwenbao.com/google-agent-webmcp-agentic-web-seo.html)——AI系统代表用户在Google基础设施上browsing时用的标识。这个agent完全忽略robots.txt。想屏蔽得靠服务器端auth(基于IP或某些行为特征)。这个细节大部分技术SEO还不知道。 Google公布了Google-Agent的IP范围(user-triggered-agents.json文件),你可以在服务器层做白名单或黑名单。但因为这是user-triggered类爬虫,本质上代表了"你的潜在访客"——屏蔽前要慎重。 ## JavaScript渲染不再是优化是准入 这个话题前面聊SPA那篇展开过——核心结论是4/6的主要AI爬虫不执行JavaScript:GPTBot、ClaudeBot、PerplexityBot、CCBot都只抓静态HTML。AppleBot和Googlebot执行JS。 对于CSR渲染的SPA站——首屏HTML空、内容靠JS填充——这4个爬虫看到的就是空白。这不是"性能优化"层面的问题,是"能不能被看到"的根本性问题。 > "Four of the six major web crawlers (GPTBot, ClaudeBot, PerplexityBot, and CCBot) fetch static HTML only, making server-side rendering a requirement for AI search visibility, not an optimization." —— Cloudflare 2026-Q1 AI爬虫流量分析 ## 具体怎么验证你站的SSR状态 最简单的方法是 curl -s [URL] 抓页面看返回HTML。如果返回的是一个空
+ 一坨JS引用,你就是CSR,AI爬虫看不到。如果返回的HTML里能找到你的核心内容(产品名、价格、文章正文),SSR是工作的。 第二个方法是Chrome DevTools里禁用JavaScript(Settings里有开关),然后访问页面看显示什么。能看到完整内容就OK,看到loading spinner或白屏就有问题。 第三个方法是用Lynx这种纯文本浏览器(命令行的)打开你站。这是最严格的"AI爬虫视角"模拟——AI爬虫看到的内容基本就是Lynx渲染出来的样子。 ## SPA迁移SSR的常见路径 React → Next.js(App Router或Pages Router)。Vue → Nuxt 3。Angular → Angular Universal。Svelte → SvelteKit。每个框架的官方文档都有迁移指南,渐进式迁移是可能的——不需要一次性重写所有页面。 最容易跳的坑:迁移过程中容易遗漏"客户端fetch的数据"——比如评论、产品评价、动态价格。这些数据如果迁移时仍然走客户端fetch,AI爬虫拿到的还是没有这些数据的HTML。SSR要把这些数据在服务端fetch完拼进首屏HTML,才算彻底迁移。 ## 结构化数据的AI加成不只是schema那么简单 JSON-LD结构化数据2026年的权重高于前几年。Microsoft的Fabrice Canel在2025年3月明确说schema markup帮助LLM理解内容供Copilot使用。Google Search官方2025年4月也确认结构化数据在search results里给优势。 但schema的"AI友好度"远不止"有标签就行"。具体看几个细节。 ## 哪些schema type权重最高 从被引用频率和citation影响看(基于行业benchmark观察): Organization (https://schema.org/Organization) schema是基础——任何站都该有。完整的Organization包含name/url/logo/sameAs(社交媒体链接)/foundingDate/address/contactPoint等字段。sameAs这个字段被低估——把你的LinkedIn、Twitter、Crunchbase、Wikipedia条目都链接进来,AI系统能从多源验证你的身份。 Article schema是内容站必备。每篇文章带author、datePublished、dateModified、headline、image等字段。author字段最好是嵌套的Person schema,含sameAs指向作者的LinkedIn等。 Product schema是电商必备。具体到offers价格、availability、rating、review数量。Schema越完整、AI在选citation时越偏好你。 FAQPage虽然在2024年Google下线了Rich Results展示但schema本身依然被AI使用——AI Overview选citation时偏好结构化的Q&A内容。 HowTo schema对教程类内容很有用——AI Overview在用户问"how to X"类查询时频繁引用带HowTo schema的页面。 ## "data-rich"vs"directory-style"的差距 Yext的一个分析数据:data-rich网站(结构化数据完整 + 含具体数字/规格/参数)的AI citation次数是directory-style listing(只有列表/链接)的4.3倍。差距比想象大。 这个数据告诉你两件事:第一,schema投入回报是非线性的——做到位的站收益陡增;第二,光有JSON-LD不够,内容本身也要"数据丰富"(含具体规格、参数、统计、数字)。两者都做到才进入"data-rich"类。 ## Princeton的那项研究值得记住 Princeton、Georgia Tech、Allen Institute for AI、IIT Delhi四家联合在2024年ACM KDD会议上发布的GEO研究有个有意思的发现:"adding statistics to content improved AI visibility by 41%"。给内容加具体统计数据让AI可见性涨41%。 这是少有的同行评审过的GEO研究——大部分行业benchmark没经过学术验证。具体动作:把你内容里的"很多/大量/普遍"换成具体数字(37%/4.3倍/82%等)。每段补一个数据点。这个改动成本低但效果显著。 ## accessibility tree是agentic browser看你站的方式 这一层是2026年新冒出来的——agentic browser(ChatGPT Atlas / Chrome auto browse / Perplexity Comet等)不像Googlebot那样parse HTML,它们读accessibility tree。 accessibility tree是浏览器从HTML生成的一个"平行表示"——剥离视觉样式和布局,只保留语义结构:headings、links、buttons、form fields、以及它们之间的关系。这本来是给屏幕阅读器和辅助功能用的,现在被AI agent借来作为"页面理解"的入口。 Microsoft的Playwright MCP(连接AI模型到浏览器自动化的标准工具)用accessibility snapshot代替raw HTML或截图。OpenAI官方文档明确说"ChatGPT Atlas uses ARIA tags to interpret page structure when browsing websites"。 ## accessibility tree审计要查什么 H层级是否规范——H1/H2/H3按语义层次而不是按视觉大小用。一个常见错误是因为想让某段文字大就用H2,结果accessibility tree里这段被识别为"二级章节标题"——其实只是一段强调文字。 语义化元素是否用对——nav包导航、main包主内容、article包独立内容块、aside包补充信息、header/footer包页眉页脚。直接用
装一切的站在accessibility tree里是一团乱麻。 表单元素是否有label——每个input绑label、每个button有描述性文本。 里"X"必须有意义不能只是图标。 交互元素是否用对tag——