商品页从首页点两下到不了,六成还挂在sitemap上
本文目录
- 这次实测是怎么搭的,你要复现该注意什么?
- 分母:这个店到底有多少件货
- 分子:从首页出发两跳能走到的货
- 哪些站被扣掉了,为什么
- 从首页点两下,到底走得到多少件货?
- 最差的那个站,问题不在漏了几个链接
- 其余几个低覆盖的站,各有各的毛病
- 走不到的那2556件,都去哪儿了?
- 在sitemap里的那1520件:能被发现,但没有分量
- 连sitemap都没有的那1036件:真的谁都不知道
- 走得到,不等于看得见
- 哪些站的货排得最靠后?
- 静态HTML数出来的导航为什么不能信?
- 我的尺子坏了六次,每次都差点写出一个错结论
- 这件事在你自己站上怎么查?
- 第一步:拿到商品全集
- 第二步:拿到首页真正能点到的分类
- 第三步:把两跳的并集减出来
- 查出来之后,改哪几处最划算?
- 改完怎么确认真的生效了
- 这条结论在什么情况下不成立
- 常见问题解答
- 两跳走不到,是不是就等于孤岛页面?
- 那1520件在sitemap里的商品,Google到底会不会收录?
- 为什么不直接看Search Console的内链报告?
- 把每页商品数调大,是不是就能解决排队问题?
- 我的站不是Shopify,这套方法还能用吗?
- 分类页做了无限滚动,这个测量还准吗?
- 覆盖率要做到多少才算合格?
- 权威参考资料
摘要:拿41个英文电商站做了一次可达性实测。分母是这些站自己的商品清单,一共15643件;从首页出发、经过首页上能点到的分类页,两跳之内能走到13087件,走不到2556件,占16.3%。走不到的那批里有1520件仍然老老实实地写在sitemap里——爬虫知道有它,站内却没有一条路指过去。走得到的也不是都在明面上:按每页36件算,70.7%落在分类第一页,4.7%要翻到第11页往后才见得到,最靠后的一件排在第1033位。
先说清楚这件事的起点。做电商SEO的人多半有过这么一段经历:某个商品页迟迟不进索引,于是去改title、补描述、加结构化数据、往sitemap里再推一次。折腾一圈没动静,最后才发现——那个页面在整个站里没有任何一条链接指向它。
这个毛病有个不太好听的名字,叫孤岛页面。站内工具能扫出来,但扫出来的准不准,本身就是另一件事(保哥之前专门拆过孤岛页面检测的抽样口径怎么影响结论)。这次换个角度:不扫自己的站,去看别人的。
这次实测是怎么搭的,你要复现该注意什么?
先把口径钉死,不然后面所有数字都没意义。
分母:这个店到底有多少件货
用的是各站自己的商品清单接口,也就是Shopify那个不用登录就能读的 /products.json。这个出口本身保哥单独写过一篇,那篇讲的是它泄露了什么;这次只把它当尺子用,拿它回答一个问题:这个店对外发布了多少件商品。
它带分页,一页最多250条。我一直翻到返回不足250条为止,最多翻12页。翻满12页的站说明还没到底,分母只是个下界,这类站全部单独列出来,不进任何比例。
分子:从首页出发两跳能走到的货
第一跳是首页上出现的 /collections/ 链接,第二跳是这些分类各自的商品清单。两跳的并集,再加上首页直接链到的商品,就是分子。
为什么卡在两跳?因为这是绝大多数电商站的设计意图——首页挂导航,导航进分类,分类列商品,也就是常说的扁平三层架构。谷歌在电商站点结构那份文档里把这条路径写得很直白:从菜单链到分类页,从分类页链到子分类页,最后从子分类页链到所有商品页。文档里还有一句话,基本上就是本文要验证的东西:如果分类页没有直接链到这个分类下的全部商品,光靠爬取,Googlebot可能找不到你所有的货。
哪些站被扣掉了,为什么
这一步花的时间比采集本身还长。60个候选站里,2个域名当时打不开,2个的商品清单返回空,剩下56个进了分析,最后只有41个进了干净口径。扣掉的理由分五类:
| 扣除理由 | 站 | 怎么发现的 |
|---|---|---|
| 出口列的地址前台打不开 | ugreen | 抽6个handle只有1个是200,页面还提示This site doesn't match your current location |
| 出口把颜色尺寸拆成了独立记录 | bollandbranch、peakdesign | 浏览器打开发现全部收敛到主商品页加参数 |
站里根本不用 /collections/ 这套地址 | harrys、functionofbeauty | 首页导航43条链接全挂在 /en/ 下面 |
| 商品清单翻页到顶还没到底 | aloyoga、everlane、flyingtiger、gymshark等 | 翻满12页仍返回250条 |
| 导航分类数超过采样上限80 | chubbiesshorts、fahertybrand、menuspace等 | 脚本自己记的标志位 |
第二类值得单独说几句。peakdesign的出口给了208条商品记录,sitemap给了247条,两边居然一个都对不上。第一反应是这站的sitemap漏得离谱。
实际不是。浏览器打开出口给的那个地址,比如 city-tote-15l-eclipse,直接301到了 city-tote?Size=15L&Color=Eclipse——它不是一件商品,是一个颜色尺寸组合。bollandbranch更彻底,2188条记录里2177条的handle结尾带一个下划线,全部收敛到主商品页加 ?color= 参数。这两个站的出口条数根本不是商品数,跟sitemap放在一起比是自找的。变体到底该合还是该拆,本身就是个老问题,产品变体的URL策略那篇讲得更全。
从首页点两下,到底走得到多少件货?
41个站,15643件商品,两跳走得到13087件,整体覆盖率83.7%。但逐站算的话,中位是96.5%,均值86.5%,最低的那个站只有27.2%,另有14个站是满分。
中位96.5%和整体83.7%差了13个百分点。这个差距本身就是结论:大多数站没问题,问题集中在少数几个站,而这几个站恰好是商品最多的那几个。拿中位数汇报会让你觉得天下太平,拿总量汇报又会让你觉得遍地是坑。两个数得一起看。
最差的那个站,问题不在漏了几个链接
magicspoon的覆盖率是27.2%,184件商品只有50件走得到。这个站的出口里有37个分类,但首页导航里能点到的只有一个,叫 shop-all。
一开始我以为是浏览器没把菜单展开完。换了一套更凶的展开逻辑重跑,又数了一遍首页导航里的链接——确实有十几条指向 /collections/,但它们全是 /collections/shop-all?filter=granola、/collections/shop-all?filter=pastries 这样的写法。去掉参数之后,还是同一个分类。
这就是问题的全貌:整站的商品导航是靠一个分类页加前端筛选参数实现的。对用户来说很顺手,点一下就换一组货;对爬虫来说,这些筛选参数不产生新的可抓取地址,shop-all 里装了50件,剩下134件就没有第二条路可走了。分面导航这套东西的治理老早就有成熟方案,筛选过滤怎么不拖垮抓取预算那篇拆过完整清单,只是多数人担心的是筛选器生成太多URL,很少有人反过来担心它一个URL都不生成。
其余几个低覆盖的站,各有各的毛病
| 站 | 商品 | 两跳走得到 | 走不到 | 其中在sitemap里 |
|---|---|---|---|---|
| magicspoon | 184 | 50(27.2%) | 134 | 41 |
| framebridge | 239 | 71(29.7%) | 168 | 47 |
| dreametech | 485 | 241(49.7%) | 244 | 57 |
| mackweldon | 575 | 306(53.2%) | 269 | 11 |
| liquiddeath | 210 | 121(57.6%) | 89 | 89 |
| brooklinen | 471 | 287(60.9%) | 184 | 14 |
| marinelayer | 2556 | 1680(65.7%) | 876 | 872 |
| decathlon | 518 | 347(67.0%) | 171 | 171 |
这几个站的分类页本身做得都不差(商品列表页那97条准则里,大半他们都照做了),问题出在上一层。marinelayer那一行最值得盯着看:走不到的876件里,872件在sitemap里。decathlon更整齐,171件走不到,171件全在sitemap里,一件不多一件不少。
走不到的那2556件,都去哪儿了?
把41个站走不到的商品并到一起,2556件里有1520件出现在自家sitemap中,占59.5%。剩下1036件两头都没有。
这两拨货的处境完全不一样,得分开说。
在sitemap里的那1520件:能被发现,但没有分量
sitemap的作用是帮搜索引擎发现地址,它不负责说明这个地址有多重要。sitemap能不能提升排名这个话题被讨论烂了,结论一直没变:能被发现和值得被排名是两码事。谷歌自己在电商文档里那句话也说得很客气——站内指向一个页面的链接越多,这个页面相对于站内其他页面就越重要。反过来读就是,一条站内链接都没有的页面,重要性下限是零。
所以这1520件的状态是:地址交出去了,Googlebot大概率也抓了,但站内没有任何一个页面替它说过话。它进不进索引全看内容本身够不够硬,一点外力都借不上。
连sitemap都没有的那1036件:真的谁都不知道
rothys是个极端例子。这个站有734件商品,175件两跳走不到,而这175件一件都没进sitemap。既不在导航路径上,也不在给爬虫的清单上,它们唯一的存在证明是那个不用登录就能读的商品出口。
mackweldon也类似:269件走不到,只有11件在sitemap里。
这类货怎么被发现?大概只剩三条路——外部链接、站内搜索结果页(多数站这类页面是noindex的,而且查得到和查不到长得还一模一样)、或者商品出口本身被当成feed抓走。都不是能指望的路。
走得到,不等于看得见
第一问答完了,还有半个问题没答:走得到的那些货,是站在门口,还是排在队伍最后面?
我记了每件商品在它所在的每个首页可点分类里的位置,取最好的那个名次。能算出名次的有13027件——比可达的13087件少60件,那60件是首页直接链过去的,压根没经过分类页,不参与排队。这13027件里,中位名次是14——大半的货确实站在门口。往后就陡了:第75百分位是46,第90百分位跳到150,第95百分位333,第99百分位796,最靠后的一件排在第1033位。
名次要换算成页码才有意义,而每页放几件是主题定的。Shopify官方的collection对象文档写明 paginate 每页上限是50件,实际主题常用24、36、50三档。我不去猜哪个站用了哪一档,三档各算一遍:
| 每页件数 | 第1页 | 第2页 | 第3-5页 | 第6-10页 | 第11页往后 |
|---|---|---|---|---|---|
| 24 | 62.8% | 13.1% | 12.4% | 4.8% | 6.9% |
| 36 | 70.7% | 11.9% | 8.8% | 4.0% | 4.7% |
| 50 | 76.5% | 10.3% | 6.6% | 3.9% | 2.7% |
三档的结论方向一致:七成左右的货在第一页,但有3%到7%要翻过十页。翻十页是什么概念——用户不会翻,爬虫翻不翻取决于它愿意在这个站上花多少预算,而分页链接本身还会顺手把权重稀释掉一部分(内链权重漏进分页和重定向链这件事另有一篇专门讲)。
这个数比“走不走得到”更值得盯。走不到的是16.3%,是明确的病;排在第11页往后的这4.7%,账面上是健康的,实际处境跟前者差不了多少。
哪些站的货排得最靠后?
按每页36件换算,逐站算一遍“有多少比例的货要翻过第一页”:
| 站 | 可达商品 | 第1页 | 要翻页 | 第6页往后 | 翻页占比 |
|---|---|---|---|---|---|
| casper | 215 | 99 | 116 | 22 | 54.0% |
| baseus | 218 | 102 | 116 | 25 | 53.2% |
| marinelayer | 1679 | 800 | 879 | 246 | 52.4% |
| awaytravel | 1011 | 498 | 513 | 300 | 50.7% |
| outdoorvoices | 590 | 322 | 268 | 205 | 45.4% |
| untuckit | 530 | 304 | 226 | 125 | 42.6% |
| parachutehome | 1513 | 981 | 532 | 136 | 35.2% |
| allbirds | 294 | 218 | 76 | 2 | 25.9% |
awaytravel那一行的第四列值得留意:1011件可达商品里有300件排在第6页往后,占了29.7%。这个站的两跳覆盖率是98.3%,账面上近乎满分。
另一头,有六个站一件货都不用翻页:brooklynbedding、drinkolipop、liquiddeath、materialkitchen、oclean、ritual。共同点是商品少(最多210件)、分类切得细,每个分类都装不满一页。货少的站在这件事上天然占便宜,这不是能力问题,是规模问题。拿这几个站当榜样去要求一个几千SKU的站,没有意义。
静态HTML数出来的导航为什么不能信?
整个实验里最容易翻车的是第一跳。我最初的做法是直接抓首页HTML,用正则捞 /collections/。跑完之后有四个站的读数是0——首页一个分类链接都没有。这个结论看着就不对劲。
换浏览器渲染一遍,答案出来了:
| 站 | 静态HTML | 渲染后DOM |
|---|---|---|
| gymshark | 0 | 92 |
| avocadogreenmattress | 0 | 14 |
| brooklinen | 5 | 29 |
| thirdlove | 11 | 49 |
| chubbiesshorts | 98 | 136 |
58个站里,渲染后更多的有11个,一样的39个,渲染后反而更少的有8个。最后一类挺反直觉:浏览器跑一遍,有的站菜单还没等脚本挂上去就被读走了,也有的站那个组件本身就没能正常起来。
所以两个通道都会漏,最终口径取的是两边的并集。就算这样,这个数仍然只是下界——爬虫和用户看到的页面不一样这件事,从来不是一次测量能测干净的。
我的尺子坏了六次,每次都差点写出一个错结论
这部分本来不打算写,后来觉得比结论更有用。做这类普查,最大的风险不是数据不够,是你量出来的东西根本不是你以为的那个东西。
| 坏在哪 | 差点写出的错结论 | 怎么发现的 |
|---|---|---|
| 把扁平的sitemap当成分卷索引,去抓了8个商品页当地图 | 这个站的sitemap里一件商品都没有 | 打印根文件的头几行,发现是urlset不是sitemapindex |
把 /es/ 语言版本也并进商品清单 | wusthof的sitemap比商品出口多出292件 | 按分卷地址里的语言前缀拆开重算,翻译过的handle被算成了另一批货 |
| 只用静态HTML抓导航 | 有四个站首页一个分类入口都没有 | 浏览器渲染一遍,gymshark从0变成92 |
| 把出口条数当商品数 | peakdesign的出口和sitemap完全对不上 | 浏览器打开发现全是变体级地址,301收敛到主商品 |
| 没验证出口地址在前台还活着 | ugreen有1270件商品没进sitemap | 抽样请求,6个里5个404,站按地区路由到了另一个店 |
| 把导航里的链接条数当成分类数 | magicspoon的首页其实能点到12个分类 | 去重后只有1个,那12条全指向 shop-all 加不同筛选参数 |
最后一条是我自己看错了自己的中间输出,不是站的问题。写下来是因为这个错误形态很典型:看到一个反常的数,先确认自己读的是哪个口径的数,再去怀疑数据源。同样的道理在补一组自对照就能把74%的差异砍到2.2%那篇里讲过一次,这次又碰上了。
这件事在你自己站上怎么查?
不需要写爬虫,三步就够。Shopify站可以照着抄,别的平台把地址换成对应的接口或者站点地图。
第一步:拿到商品全集
curl -s "https://你的域名/products.json?limit=250&page=1" | jq -r '.products[].handle' > all.txt
# 一直翻到返回不足 250 条为止,逐页追加
wc -l all.txt翻页一定要翻到底。这一步偷懒,后面全白做。
第二步:拿到首页真正能点到的分类
别用 curl 加正则,前面那张表已经说明问题了。用无头浏览器打开首页,把鼠标从导航项上依次划过一遍,再取链接:
// playwright,取渲染后 DOM 里的分类 handle
const s = new Set();
document.querySelectorAll('a[href]').forEach(a => {
const m = (a.getAttribute('href')||'').match(/\/collections\/([^/?#]+)/);
if (m) s.add(m[1].toLowerCase()); // 注意去掉查询参数再去重
});去重必须在去掉查询参数之后做,否则 shop-all?filter=a 和 shop-all?filter=b 会被当成两个分类,覆盖率立刻虚高。
第三步:把两跳的并集减出来
for h in $(cat navcols.txt); do
curl -s "https://你的域名/collections/$h/products.json?limit=250" | jq -r '.products[].handle'
done | sort -u > reach.txt
comm -23 <(sort -u all.txt) reach.txt > unreachable.txt
wc -l unreachable.txtunreachable.txt 就是从首页两跳走不到的货。再跟sitemap对一次,就知道它们属于前面说的哪一拨。整个过程对一个几百SKU的站,跑完不超过十分钟。
查出来之后,改哪几处最划算?
按投入产出排,从便宜的开始。
先看筛选参数有没有吃掉你的导航。这是magicspoon那个形态,也是最值钱的一处。判断方法很简单:把首页导航的链接抓下来,去掉查询参数再去重,如果去重后剩下的分类数是个位数、而你的分类总数是几十上百,那么你的分类体系在爬虫眼里几乎不存在。改法是给主要的筛选条件生成真实的分类地址,而不是全部塞进参数里。这件事牵动的不只是抓取,类目导航改版本身就是个反复返工的活。谷歌那份筛选类地址的抓取管理文档是从反面写的——它教你怎么让爬虫少抓一点,但同一套判据反过来用同样成立。
再看有没有一个真正的全集入口。14个覆盖率100%的站里,多数都在导航或者页脚挂了一个装下全部商品的分类。这一条几乎零成本,加一个链接的事——不用担心链接多了摊薄权重,那个稀释惩罚早就是个过时的幽灵。入口摆在首页首屏的分类区最省事。要注意的是这个入口本身可能很深——如果全集里有两千件货,那商品仍然排在第几十页,只解决了“走得到”,没解决“看得见”。
然后看分类的排序和分页。排在第11页往后的那批货,靠调排序规则就能救一部分。常见做法是给新品、有货、高毛利的商品加权重往前提,而不是一律按上架时间倒序。另外别把每页件数调得太小——每页24件和每页50件,第11页往后的比例差了2.6倍。
最后才是补sitemap。顺序不能反。sitemap解决的是发现,内链解决的是分量,先补sitemap会让你看到收录数上升然后停住,因为那些页面在站内仍然一票没有。顺带一提,生成器说格式正确的时候其实只查了三件事,它不会告诉你少列了谁。电商站的sitemap该怎么分片、lastmod怎么写才诚实,百万SKU的sitemap实战那篇有完整方案。
改完怎么确认真的生效了
把第三步的脚本存成定时任务,每周跑一次,只看 unreachable.txt 的行数。这个数应该单调往下走。如果改完之后行数没变,多半是你新加的分类页本身没被首页链到——那就成了套娃,新开的分类页自己变成了孤岛。
这条结论在什么情况下不成立
写到这儿必须把边界交代清楚,不然这篇文章就是在推销一个万能判据。
两跳这个口径本身是人为的。真实站点常有三层结构:首页到大类,大类到子类,子类才到商品。按两跳算,第三层的货全算“走不到”,但它们其实是设计好的、健康的。所以16.3%这个数应该读成“两跳之内的可达率”,不是“孤岛率”。要判断真孤岛,得把爬取深度放开到三跳四跳,代价是请求量翻好几倍。
货少的站没必要看这个指标。几十件商品的站,随便怎么摆都是全可达,测出来100%也说明不了什么。前面那六个零翻页的站就是例子。这套东西的价值区间大概是三百件商品往上。
不用 /collections/ 结构的站,这把尺子直接失效。harrys和functionofbeauty就是被这一条扣掉的。自建站、Magento、Shopify的无头前端,路径结构各不相同,得换成对应平台的分类地址规则重写正则,逻辑不变但代码要重写。
商品出口关掉的站测不了。这一整套的分母依赖那个公开的商品清单,站主把它关掉之后就只能退回到爬全站。这也是为什么样本只有六十个站——一百三十多个候选里,出口还开着的就这些,再走完一遍扣除只剩41个能算比例。
还有一点:这次采集是单线程、每个请求间隔2秒跑的,接口请求合计4893个,另外用无头浏览器打开了130多个页面,全程没有触发任何一个站的限流。如果你要对别人的站做这类测量,请保持同样的克制。
常见问题解答
两跳走不到,是不是就等于孤岛页面?
不等于。孤岛页面的定义是站内没有任何一条内链指向它,而两跳走不到只说明它不在“首页到分类到商品”这条主路径上。它可能挂在第三层的子分类下,可能被博客文章链过,也可能出现在推荐位里。要确认是真孤岛,得把全站爬完再看入链数。两跳这个口径低估了可达性,所以16.3%要读成孤岛率的上界,真实的孤岛只会比它少。
那1520件在sitemap里的商品,Google到底会不会收录?
会抓,收不收录看内容本身。sitemap负责发现,不负责证明重要性。实际影响更多体现在优先级上——同一个站里,一个有几十条站内链接的商品页和一个一条都没有的,抓取频率和进索引的速度会拉开差距。想直观感受这件事,可以拿这两类页面各挑十个,去Search Console的网址检查里对比一下上次抓取时间,量大就走检查API批量拉。
为什么不直接看Search Console的内链报告?
可以看,但它回答的是另一个问题。内链报告统计的是Google已经发现的链接,是结果;本文测的是站点当前的导航结构能通向哪里,是原因。而且内链报告的数字和站内爬虫扫出来的经常对不上,两边口径不同,别硬凑。
把每页商品数调大,是不是就能解决排队问题?
能缓解,但有代价。每页50件比每页24件确实把第11页往后的比例从6.9%压到2.7%,可是每页塞得越多,页面越重、首屏越慢。关键渲染路径那笔账要一起算。比较稳妥的做法是每页36件加排序优化,而不是一味往上堆。
我的站不是Shopify,这套方法还能用吗?
逻辑通用,实现要换。核心是三样东西:一份完整的商品清单、一份首页真正能点到的分类清单、每个分类下的商品清单。Magento有分类接口,WooCommerce有REST API,自建站最不济也能从sitemap拿商品全集、用无头浏览器爬两层。唯一不能省的是第二步必须用浏览器,静态HTML在这件事上不可靠。
分类页做了无限滚动,这个测量还准吗?
分子的口径不受影响,因为我用的是分类的商品清单接口,不是页面上渲染出来的卡片。但“排在第几页”这个换算对无限滚动没有意义,得换成“要滚多少屏”。粗略换算是把每页件数换成一屏的商品数,通常是6到12件,那么名次150大约要滚十几屏——比翻四页还难指望。
覆盖率要做到多少才算合格?
没有权威阈值,本文样本的中位是96.5%。保哥的经验判断是:低于90%就该查一下原因,低于70%基本可以断定导航结构出了系统性问题,而不是漏了几个链接。更重要的是看趋势——上新之后这个数掉不掉,比绝对值有用得多。
权威参考资料
本文标题:《商品页从首页点两下到不了,六成还挂在sitemap上》
本文链接:https://zhangwenbao.com/product-two-click-reachability-audit.html
版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0