小语种SEO的访问量里有一半不是人,48门语言量下来最高的那门到92%
本文目录
- 小语种站的流量数字,为什么要先分成两半?
- 报表上那个数是两拨完全不同的访客加出来的
- 把语种换成英语,这个问题就基本不存在
- 为什么用维基百科的数据来量
- 这次量了哪些东西
- 这篇不谈的两件事
- 48门语言量下来,机器那一半到底有多大?
- 两头的差距比预想的大得多
- 完整对照表
- 宿务语和瓦瑞语为什么会跑到最上面
- 老挝语和僧伽罗语在这张表上的位置很有意思
- 这张表里最反直觉的一行
- 有没有哪个地方能证明爬虫跟读者根本无关?
- 把土耳其语拆成逐月来看
- 那个月发生了什么
- 分子和分母各自动了多少
- 怎么排除这是口径变了
- 解封那个月的数也对得上
- 这件事对做站的人意味着什么
- 反过来看,读者暴涨的时候爬虫会跟着涨吗?
- 找一门读者在四年里翻了几倍的语言
- 占比是怎么走的
- 不是所有印度语言都一样
- 四年趋势整体上不是单向的
- 那这个比例到底由什么决定?
- 把两条线分开算
- 0.992这个数意味着什么
- 0.920那一组说的是抓取预算
- 两条线一除,就是那个比例
- 但这个模型不该被当成公式用
- 爬虫是照着页数均匀抓的吗?
- 开工前我以为它是
- 完整的分档
- 抓取程序也在挑
- 这条对做站的直接含义
- 一个不该忽略的边界
- 换到你自己的站上,这几个数怎么量?
- 先量一个数:机器占比
- 再量一个数:页面数除以读者数
- 第三个数:单页抓取频次
- 第四个数:真人访问的绝对量
- 做完之后先别急着下结论
- 一个可以半天跑完的清单
- 报表和日志该怎么改才不骗人?
- 看板上要加的那一列
- 按语言分开看,别汇总
- 报警阈值该设在哪儿
- 日志保留期限得跟着调
- 别把机器流量当敌人
- 哪几件事这一层管不了?
- 页面级的分布不归这一层
- 抓取程序的识别方法不归这一层
- 搜索引擎侧的收录判断不归这一层
- 这份数据本身的边界
- 常见问题解答
- 机器占比多少算正常?
- 为什么不直接用统计代码的数据,非要看日志?
- 爬虫占比高,是不是说明这门语言不值得做?
- 土耳其那个案例,会不会只是巧合?
- 页面数除以读者数这个指标,多大算危险?
- 已经在用现成的分析工具,还需要自己拆日志吗?
- 这套方法在中文市场用得上吗?
- 权威参考资料
摘要:拿48门语言的公开流量数据逐月拆开,把访问量分成真人和机器两堆,量出来的机器占比从西班牙语的9.23%一路铺到宿务语的92.07%,中位数29.36%,有39门高过英语的15.25%。最硬的一段证据来自土耳其:维基百科在当地被关掉的第一个整月,真人访问从1.574亿掉到3164万,少了将近八成,而同期的机器访问从3992万变成4049万,几乎没动。分母塌了、分子不动,比例就从20.23%跳到56.13%。反过来看马拉地语,真人四年涨了268%,机器反而少了45%,占比从61.4%落到18.5%。三条相关系数把这件事说透:读者规模决定真人访问(r=0.992),页面数量决定机器访问(r=0.920)。本文给出48门语言的完整对照表、一份可以自己跑的核算流程,以及报表上该加哪几列。
接手一个中东欧市场的站,第一周先看数据。后台给的月访问量是四万出头,比同期的英文站好看不少——英文站上线更久、内容更多,月访问才十一万。
本地同事看完只说了一句:这四万里有多少是人?
当时答不上来。后来把服务器日志拉出来按来源过了一遍,能对上已知爬虫特征的请求占到六成多。也就是说那四万里,真正有人打开的不到一万六。
这件事之后我一直想找个能横着比的口径——不是比某一个站,而是比某一门语言。找了很久,最后落在一个谁都能查、而且逐月拆得开的地方。
小语种站的流量数字,为什么要先分成两半?
报表上那个数是两拨完全不同的访客加出来的
一份访问量报表,不管出自日志、统计代码还是CDN,本质上都是把一段时间内的请求数加起来。加进去的既有真人,也有各家搜索引擎的抓取程序、监控探针、翻译代理和数据采集脚本。
在流量足够大的站上,这两拨的比例相对稳定,看总数不太会出事。问题出在流量小的站上——机器那一半有个下限,它跟你有多少人看没关系,只跟你有多少个页面有关系。
页面越多、读者越少,机器占的比重就越高。到了某个程度,报表上那个数字的主体就不再是人了,而你还在拿它做增长判断。
这不是小语种独有的毛病,但小语种最容易撞上,因为它天然处在“页面不算少、读者确实少”这个位置。一个站上线两年,页面攒到几千个,读者却还在三位数徘徊,这在小语种市场是常态而不是意外。
把语种换成英语,这个问题就基本不存在
英文站的读者基数摆在那儿,机器那部分怎么涨也很难占到大头。你看到的访问量涨了,多半真的是有人多来了。
所以这件事归语言这一层管。同样一套技术栈、同样的页面数量,换一门读者规模差两个数量级的语言,报表的可信度就完全变了。
再往深一层,同一门语言在不同时期也会变。读者少了、页面没少,比例会立刻变形——后面那段土耳其的数据就是这么来的。所以这个数不是一门语言的固有属性,它是一个会随时间走的比值。
把语言这个变量单独拎出来看,是这篇要做的事。日志分析和爬虫核验的通用做法不在这里重讲,那是工具层,跟语言无关。
为什么用维基百科的数据来量
要横着比几十门语言,得有一个各语言口径一致、公开、而且能按月拆的数据源。商业站没有,广告平台的数据不分真人机器,第三方流量估算工具本身就是猜的。
维基媒体基金会把各语言版本的访问数据做成了公开的流量接口,逐月、逐语言、还按访客类型分成三档。这三档是全部、真人和爬虫,用的是同一套判定规则。
它当然不等于你的商业站。维基的页面构成、外链结构、更新节奏都跟电商站差得远。但要回答“同样是一门语言,机器和真人的比例会差多少”这个问题,它是目前唯一一个各语言可比的样本。做小语种研究常常要在“完美但拿不到”和“有偏差但能横着比”之间选后者,这次也一样。
本文把它当代理指标用,结论落在语言之间的相对差异上,不落在绝对数值上。这一点后面还会再说一次。
这次量了哪些东西
取48门语言,覆盖三类:读者规模最大的那批大语种作基准、被程序批量建过页面的几门作对照、还有本站这个栏目一直在写的那批小语种。时间窗是2015年7月到2019年12月,逐月。
每门语言取四个数:全部访问量、真人访问量、爬虫访问量,以及唯一设备数。前三个是同一个接口的三档,最后一个来自另一个接口,量的是一个月内有多少台不同的设备来过。
再补一个页面侧的数:截至2019年12月,这门语言累计新建了多少个内容页。用累计新建而不是用今天的条目数,是因为今天的数字对不上2019年的口径,两边混着算会得出假结论——有几门语言的页面数在这之后翻了几十倍,拿今天的数去除2019年的访问量,误差能到两个数量级。
所有数据都能按任意时点截断,所以下面所有的数都只到2019年12月为止。
这篇不谈的两件事
第一件是怎么识别爬虫。用户代理串怎么解析、假冒Googlebot怎么反查、哪些工具的探针要不要算进流量——这些是站点自己的工程活,跟这门语言是什么没关系。
第二件是页面级的分布。这篇给的是整门语言的汇总比例,回答不了“具体哪些页面在被爬虫反复抓、哪些页面一年到头没人打开”。那是另一层的问题,得用另一套抽样办法,而且要先解决一个前置的坑:怎么确定一个页面在观测期内真的存在过。
还有一件事得先说清楚:本文所有的比例都以全部访问量为分母。维基的三档里,全部访问恰好等于真人加爬虫,48门语言无一例外,没有第三类未分类流量需要额外解释。
下面从那张48行的表开始。
48门语言量下来,机器那一半到底有多大?
两头的差距比预想的大得多
2019年全年的数据摆出来,最低的是西班牙语,爬虫占9.23%;最高的是宿务语,92.07%。中间隔着整整十倍。
英语落在15.25%,48门语言里有39门比它高。中位数是29.36%,落在罗马尼亚语那一档。
换句话说,把这48门语言的访问量报表摊开,超过一半的语言,报表上每三次访问里就有一次不是人;最极端的那门,每十二次访问里只有一次是人。
如果你的判断依据是“访问量涨了20%”,那么在爬虫占七成的语言上,这个20%里有十四个点跟你的读者一点关系都没有。更麻烦的是这十四个点还会自己波动,抓取方换一次调度策略就够了。
完整对照表
下表按爬虫占比降序排,只列有代表性的一部分。页面数是截至2019年12月的累计新建内容页,设备数是2019年月均。
| 语言 | 爬虫占比 | 月均设备 | 页面数 | 真人/页/年 | 爬虫/页/年 |
|---|---|---|---|---|---|
| 宿务语 | 92.07% | 215268 | 5331964 | 2.3 | 26.2 |
| 瓦瑞语 | 85.47% | 87002 | 1263887 | 9.4 | 55.2 |
| 约鲁巴语 | 75.26% | 37449 | 29421 | 107.8 | 328.1 |
| 土耳其语 | 66.62% | 2963672 | 329008 | 947.8 | 1891.2 |
| 乌兹别克语 | 65.75% | 672508 | 130910 | 356.2 | 683.9 |
| 老挝语 | 59.33% | 40478 | 3311 | 753.5 | 1099.4 |
| 僧伽罗语 | 49.40% | 224942 | 19126 | 671.8 | 655.8 |
| 缅甸语 | 37.08% | 252252 | 47715 | 435.7 | 256.7 |
| 瑞典语 | 35.82% | 12007364 | 2444970 | 459.0 | 256.2 |
| 高棉语 | 35.22% | 243980 | 9025 | 1185.5 | 644.5 |
| 泰米尔语 | 27.18% | 2574991 | 125815 | 920.5 | 343.5 |
| 孟加拉语 | 21.70% | 3341756 | 77299 | 2632.0 | 729.6 |
| 英语 | 15.25% | 857711498 | 5805691 | 15871.6 | 2857.0 |
| 印尼语 | 12.44% | 35245248 | 507111 | 3483.7 | 495.1 |
| 泰语 | 12.17% | 14519162 | 121025 | 6559.6 | 909.2 |
| 西班牙语 | 9.23% | 180324565 | 1547929 | 8112.2 | 825.2 |
宿务语和瓦瑞语为什么会跑到最上面
这两门是菲律宾的地方语言,它们的维基版本在2013年前后被一套程序批量建过页面。宿务语累计有533万个内容页,比德语还多;瓦瑞语126万。
与之对应的读者规模是:宿务语月均21.5万台设备,瓦瑞语8.7万台。拿页面数除以设备数,宿务语是24.77,瓦瑞语14.53。
这个比值意味着什么?平均每来一台设备,站上就有二十四个页面在等着被抓。抓取程序不会因为没人看就不来,它按页面数来。这就像一家开在无人区的仓库,客人一年来不了几个,可盘点的人每个月都得把货架从头走到尾。
结果就是那两个九十几和八十几的数字。这不是“小语种没人看”,是“页面被造得太多”,两件事不一样,后面会专门拆开。
老挝语和僧伽罗语在这张表上的位置很有意思
老挝语的页面数只有3311个,全表最少,读者也最少(月均4万台设备)。它的爬虫占比是59.33%,排第九。
僧伽罗语页面19126个、设备22.5万台,爬虫占比49.40%。高棉语页面9025个、设备24.4万台,占比35.22%。
这三门是真正意义上的小语种——没被程序灌过,页面都是人建的,量也确实少。它们的爬虫占比在35%到60%之间,比英语高,但离宿务语那种九十几差得远。按母语人口给语言排优先级那套老办法在这里也帮不上忙,因为决定这个数的是页面和读者的比,不是读者的绝对量。
所以爬虫占比这个数不能反过来当“这门语言有多小”来读。它读出来的是页面数和读者数的比,不是读者数本身。
这张表里最反直觉的一行
土耳其语。爬虫占比66.62%,排第四,夹在乌兹别克语和格鲁吉亚语中间。
但土耳其语不是小语种。它月均有296万台设备来读,页面数32.9万,页面除设备只有0.11——这个比值跟希腊语、匈牙利语是一档的,而那两门的爬虫占比分别是20.04%和29.10%。
按前面那套解释,土耳其语应该落在20%到30%之间才对。它高出去了三十多个百分点。
第一反应是数据错了。查下来不是数据错,是这门语言在这段时间里发生了一件别的事——而这件事恰好把整篇文章想证明的那个机制,做成了一个可以直接验证的对照实验。
有没有哪个地方能证明爬虫跟读者根本无关?
把土耳其语拆成逐月来看
整年的汇总数看不出名堂,拆成54个月就一目了然。2015年7月到2017年4月,爬虫占比一直在17%到29%之间晃,跟一门正常的中型语言没有区别。
2017年4月是20.23%。2017年5月,56.13%。
一个月之内跳了三十六个百分点,之后再没回来过:2017年下半年在55%到67%之间,2018年全年在56%到70%,2019年前十一个月稳定在64%上下。
中间没有过渡,就是一个月的事。一门语言的流量结构在三十天里换了个样子,而这门语言的页面、内容、技术栈一样都没动过。
那个月发生了什么
2017年4月29日,维基百科在土耳其境内被整体屏蔽。这次封锁的起止时间有完整记录,一直持续到2019年12月26日当地宪法法院裁定违宪才解除。
屏蔽的是境内用户的访问。土耳其语维基本身一个页面没少,服务器照常在线,站外的抓取程序照常能连上。
换句话说,这是一次有人替我们做完的对照实验:控制变量是页面数量和站点可达性,被动的变量是读者。
而且它的干净程度超出预期——不是缓慢流失,是一夜之间断掉大半。做数据分析很少能碰上这么利落的断点,通常我们只能在一堆缓慢漂移里猜哪个是原因。
分子和分母各自动了多少
把封锁前后的月均值算出来对比。封锁前的21个月(2015年7月到2017年3月),月均真人访问1.574亿次,月均爬虫访问3992万次。
封锁中的31个月(2017年5月到2019年11月),月均真人访问3164万次,月均爬虫访问4049万次。
真人掉了79.9%。爬虫涨了1.4%。
比例从20.23%变成56.13%这件事,全部由分母贡献,分子几乎纹丝不动。抓取程序完全不知道、也完全不在乎这个国家的人还能不能打开这个站。
怎么排除这是口径变了
2017年前后维基媒体如果调过机器流量的判定规则,所有语言都会同时出现跳变,那这个发现就作废了。
拿英语做对照:2016年14.1%、2017年15.9%、2018年14.7%、2019年15.3%。四年之内在一个百分点半的区间里走,没有任何跳变。
再拿同期的德语、法语、西班牙语看,也都是平的。机器流量的判定规则本身是公开的,2015年定下来之后没有过影响可比性的大改。
所以那三十六个百分点只发生在土耳其语上,而且只发生在那一个月。这条排除做完,剩下的解释就只有一个了。
解封那个月的数也对得上
2019年12月26日解封。那个月的真人访问是2765万,跟封锁期的月均3164万差不多,没有回升。
这正是应该看到的——12月只有最后五天解封,用户回流需要时间,一个月的尾巴不足以体现。这条不算证据,但它没有反过来打脸,说明数据是自洽的。
真正的回升要看2020年的数,而本文的数据截到2019年12月,所以这一段就到这里。
把结论收窄一点:这个案例证明的是“读者塌了、爬虫不塌”,它没有证明反过来的方向。反方向要另找一个案例。
这件事对做站的人意味着什么
你的小语种站被墙、被限、被某个地区的运营商屏蔽,或者只是本地推广停了一个季度,报表上的总访问量都不会掉到你以为的那个程度。
因为撑着那个数字的另一半根本没走。它会让你晚三个月才发现出了事。
反过来,你上了一批新页面、访问量看着涨了,也可能只是抓取程序发现了新页面在跑一轮。收录、排名、流量这三层要分开诊断的老规矩在这里格外要紧。
唯一的办法是把这两拨分开看,而且从第一天就分开。等到出问题再去补拆,历史数据是拆不回来的——日志过期删掉之后,那几个月到底发生了什么就永远说不清了。
反过来看,读者暴涨的时候爬虫会跟着涨吗?
找一门读者在四年里翻了几倍的语言
土耳其语给的是分母塌掉的一半。要把机制说完整,还需要一个分母暴涨的案例。
这批数据里现成就有:2016年到2019年,印度那几门语言的读者数集体起飞,背景是当地移动数据资费在2016年底的那次崩塌式下降。
马拉地语是里面最典型的。2016年全年真人访问2893万次,2019年1.064亿次,涨了268%。
同期它的爬虫访问从4471万次变成2457万次,少了45%。
占比是怎么走的
马拉地语的爬虫占比:2016年60.7%、2017年44.0%、2018年22.6%、2019年18.8%。四年掉了42个百分点。
逐月看,2017年下半年到2018年上半年是主要的下坡段,跟真人访问的爬升期完全重合。
这跟土耳其语是同一个机制的镜像。那边是分子不动分母掉,这边是分母涨得比分子快。两边算出来的都是同一个比值在变。一升一降都指向同一个解释,这比只有一个方向的证据硬得多。
一升一降两个案例摆在一起,才能说这个比例是被读者规模推着走的,而不是被抓取行为推着走的。
不是所有印度语言都一样
同期的印地语真人涨286%,但爬虫也涨了122%,所以占比只从18.9%落到11.8%。泰米尔语真人涨170%、爬虫涨40%,占比从41.8%落到27.2%。
爬虫那一列为什么各不相同?因为这四年里这几门语言的页面数增长速度也不一样,而爬虫是跟着页面数走的。
马拉地语的爬虫访问之所以绝对值下降,跟它2013年前后那段批量建页的历史有关——早期那批页面被抓过一轮之后,抓取频率会自然衰减。
这一层的细节超出本文范围,但它提醒一件事:爬虫那一列自己也在动,只是它动的原因跟你的读者无关。它跟着页面数、页面的更新频率、以及存量内容的衰减节奏走。
四年趋势整体上不是单向的
开工前我写下的预期是“2016到2019年爬虫占比整体上升,因为抓取程序越来越多”。实测下来48门语言里27门升、21门降,这条预期是错的。
降得最多的五门是马拉地语(−42.0个百分点)、乌兹别克语(−18.2)、泰米尔语(−14.6)、高棉语(−13.3)、孟加拉语(−11.7),基本都是读者规模在这四年里快速扩张的市场。
升得最多的除了土耳其语,是格鲁吉亚语(+15.7)、尼泊尔语(+9.3)、俄语(+8.1)。
把升的和降的放在一起看,它们服从同一条规律:占比往哪边走,取决于读者数和页面数谁跑得快。这比“爬虫越来越多”那个说法要具体得多,也更好用——前者能算,后者只能感叹。
那这个比例到底由什么决定?
把两条线分开算
前面靠两个案例说了机制,现在用48门语言的横截面把它量出来。做法很简单,算三组相关系数,全部取以10为底的对数之后再算。
第一组:月均设备数对真人访问量,r等于0.992。
第二组:页面数对爬虫访问量,r等于0.920。
第三组:把页面数除以设备数得到一个比值,拿它对爬虫占比,r等于0.874。
0.992这个数意味着什么
真人访问量几乎完全由读者规模决定,48门语言无一例外。这听起来像废话,但它是整套推理的地基——它说明真人那一列是干净的,没有被别的东西污染。
要是这个数只有0.6,那说明真人那一列里还混着别的东西,后面所有的比值都不能信。先验地基再往上盖,是这类跨来源对比里省不掉的一步。
唯一设备数这个口径本身也值得说一句:它数的是一个月内有多少台不同的设备来过,用的是浏览器端的标记,跟访问次数是两个东西。拿它当读者规模的代理,比拿访问量自己当代理要干净。
两个独立来源的数据能对到0.992,说明这两个接口的口径是一致的。
0.920那一组说的是抓取预算
爬虫访问量跟页面数的关系,本质上就是抓取预算这件事在跨语言尺度上的样子。你有多少个地址,抓取程序就得来多少趟,这是它的工作方式决定的。
0.920不是1,差的那部分很关键——它说明抓取量不是页面数的严格倍数,中间还有别的因素在调节。那个因素是什么,下一节专门拆。
先记住这一半的结论:页面数是抓取量的第一驱动,读者数不是。
顺带说一句,这跟站长圈里流传的“内容多了搜索引擎就来得勤”是同一件事,只是这里给出了跨48门语言的量化版本。要注意的是“来得勤”说的是总趟数,不是每个页面被照顾到的次数,这两件事下一节会分开。
两条线一除,就是那个比例
既然真人跟着设备走、爬虫跟着页面走,那么爬虫占比自然就该跟着“页面数除以设备数”走。实测r等于0.874,双对数下0.816。
这个比值可以直接当一个可读的指标用。宿务语24.77,瓦瑞语14.53,约鲁巴语0.786,瑞典语0.204,老挝语0.082,英语0.007。
换成人话:宿务语平均每来一台设备,站上有二十五个页面等着被抓;英语是每来一千四百台设备才摊到一个页面。
差了三千五百倍。爬虫占比从92%到15%这个跨度,就是这三千五百倍算出来的。站点地图里到底放了多少个地址,在小语种站上因此变成一个远比英文站敏感的决定。
但这个模型不该被当成公式用
0.874是个不错的相关系数,可它离1还有距离,而且土耳其语这种被外力干预过的情况会整个跳出模型。
更要紧的是,这套数是在维基上量的。商业站的页面构成、外链密度、更新频率跟维基差别很大,抓取程序的行为也会跟着不同。
所以这个比值该怎么用?拿它做横向排序,判断哪几门语言的报表最不可信,这是稳的。拿它去反推“我的站爬虫应该占多少”,不稳。
要知道自己站上的真实比例,只能自己量,量法在后面那节。好消息是量一遍的成本很低,一份日志加半天时间。
爬虫是照着页数均匀抓的吗?
开工前我以为它是
预期写下来的时候是这么想的:抓取程序会定期重访每一个已知地址,所以“每个页面每年被抓多少次”这个数在各语言之间应该差不多,变异系数大概在0.5以下。
实测的结果是变异系数0.69,最小值和最大值差109倍。这条预期错了,而且错得很有内容。
最低的是宿务语,每个页面每年被抓26.2次;最高的是英语,2857次。
页面最多的那门语言,反而是每个页面被抓得最少的那门。
完整的分档
英语2857次、日语1749.8次、土耳其语1891.2次落在最上面一档;中间是绝大多数语言,在300到900之间;最下面是宿务语26.2、瓦瑞语55.2、豪萨语25.3。
注意这里的排序跟爬虫占比那张表几乎是反的。宿务语的爬虫占比全场最高,可它每个页面分到的抓取次数全场最低。
这两件事同时成立,因为它的页面实在太多——533万个页面,每个只抓26次,加起来还是1.4亿次,而真人只贡献了1201万次。
这个反转把“爬虫按页数来”这句话修正得更准确:爬虫的总量按页数来,但它分给每个页面的份额,会随着页面变多而变薄。前半句决定你的报表长什么样,后半句决定你的新内容多久被发现。
抓取程序也在挑
为什么会变薄?因为抓取本身是有成本的,任何一个抓取方都会给每个站分配一个上限。页面数超过这个上限之后,多出来的页面只能排队等更长的周期。
这正是抓取预算这个概念的本意,只是通常我们在单个站上讨论它,很少有机会看到它在跨语言尺度上的样子。
宿务语那533万个页面里,绝大多数是同一套模板批量生成的地名和物种条目。抓取方显然识别出了这类页面的更新频率极低,把重访周期拉得很长。
所以那个26.2次,不是抓取方不认识这些页面,是它认识了之后决定少来。这个判断是抓取方替你做的,你没有投票权,能改的只有页面本身。
这条对做站的直接含义
你的站上每多一批低价值页面,抓取程序不会给你追加预算,它会把原有的预算摊得更薄。结果是重要页面的重访周期变长,新内容被发现得更慢。
这个道理在英文站上讲了很多年,索引膨胀的诊断和处理是一整套成熟方法。小语种站的特殊之处在于,你的预算本来就更小,摊薄的后果来得更快。
还有一个只在小语种上成立的副作用:页面变多之后,报表上爬虫那一半会跟着变大,于是访问量看起来在涨。这个涨幅会把摊薄的坏消息盖住。
两件坏事凑在一起,看起来像一件好事。这大概是这份数据里最值得记住的一句。抓取程序这些年在渲染和调度上的变化只会让这个错觉更难识破,因为它让抓取行为看起来更像真人。
一个不该忽略的边界
上面这段推理用的是维基的数据,而维基的页面几乎都能被抓到、也几乎都在站点地图里。你的站如果有大量页面从来没被发现过,那些页面不在这个模型里。
另外维基的抓取方构成跟商业站不一样。它被学术采集、数据镜像、模型训练管线抓的比例更高,这些抓取方的行为跟搜索引擎不完全一致。
所以“每个页面每年被抓多少次”这个绝对数不要照搬。可以搬的是那个方向:页面变多,单页份额变少。
这一点在自己站上很容易验证,日志里按URL分组数一遍就知道。如果中位数比你以为的低一个数量级,那就是摊薄已经发生了。
换到你自己的站上,这几个数怎么量?
先量一个数:机器占比
取一个月的访问日志,按来源把请求分成两堆,算出机器那一堆占总请求数的比例。这是全部工作里最基础的一步,也是很多站从来没做过的一步。
分堆的判据按可靠度排:反向域名查询能验明正身的搜索引擎爬虫最硬,用户代理串里带明确标识的次之,行为特征(不加载静态资源、不执行脚本、请求节奏均匀)最后。
三档分开统计,别混成一个数。因为后面要看的是趋势,而三档的口径必须逐月一致。
这一步不需要任何工具,一段脚本加一个月的日志就够了。真正难的不是算,是把口径定下来之后别再改——口径一改,前面几个月的数就白存了。
再量一个数:页面数除以读者数
页面数取站点地图里的有效地址数,不是数据库里的记录数——没进站点地图的页面对抓取方来说基本不存在。
读者数取统计工具里的月度独立访客,不是访问次数。这两个数的比值就是前面那个指标在你站上的版本。
算出来之后跟这张表对一下位置。落在0.01那一档的,报表基本可信;落在0.2以上的,每次看数据都得先减掉机器那一半;落在1以上的,你站上的页面数已经超过读者规模能支撑的量了。
这个数每季度重算一次,看它往哪个方向走,比看绝对值有用。它往上走,说明你在造页面的速度超过了拉读者的速度,这件事在做批量落地页的团队里非常常见。
第三个数:单页抓取频次
把一个月的爬虫请求按URL分组,算出每个页面被抓了几次,然后看这个分布的中位数和四分位。
要看的不是平均值。平均值会被首页和几个热门页拉高,掩盖掉长尾那一大堆几个月才被抓一次的页面。
中位数落在个位数,说明预算已经摊得很薄。这时候再上新页面,只会让中位数继续往下走。
同时把没有任何爬虫记录的页面单独拉一张清单,这批页面对搜索引擎而言等于不存在。小语种站上这张清单往往比想象中长,而且长期没人查。
第四个数:真人访问的绝对量
前三个数都是比例和分布,最后要落回一个绝对数:这个月有多少个真人打开过你的小语种站。
把它单独立一列,跟总访问量并排放。做增长汇报的时候只看这一列,别看总数。
这一列可能会很难看。中东欧那个站拆完之后,真人月访问从四万变成一万六,看板上的曲线直接矮了一截。
但矮下去的那一截本来就不是你的读者,早看到早调整。那次拆完之后我们把预算从新增页面挪到了本地渠道投放,三个月后真人那一列涨了六成,总访问量反而只涨了一成——因为爬虫那一半没跟着动。
做完之后先别急着下结论
这四个数只是把现状拍下来,它们不告诉你该做什么。同样是机器占比60%,两种情况的处理完全相反。
一种是页面数正常、读者确实少,那问题在需求侧,该做的是重新看这个市场的搜索意图分布,而不是砍页面。
另一种是读者规模其实不小、页面被造得太多,那问题在供给侧,该做的是清理和合并。
分辨这两种情况,靠的就是第二个数:页面数除以读者数。这也是为什么它比机器占比本身更该被放进报表。关键词工具在小语种上返回的零也要放在一起读,工具没数据不等于需求不存在。
一个可以半天跑完的清单
第一步,拉最近三个月的日志,按上面三档判据分堆,得到逐月的机器占比。
第二步,数站点地图里的有效地址,除以统计工具里的月度独立访客。
第三步,爬虫请求按URL分组,出中位数、四分位,以及零抓取页面清单。
第四步,把真人访问量单独立一列加进现有看板,往前补三个月的历史。四步做完,半天。
报表和日志该怎么改才不骗人?
看板上要加的那一列
现有的访问量那一列不要删,在它旁边加一列真人访问量,再加一列机器占比。三列并排,趋势一眼就能看出来。
加这一列的阻力通常不在技术上,在于它会让历史数据变难看。得先跟看这份报表的人讲清楚,数字变小不是业务掉了,是尺子换准了。
这件事越早做越好。做得越晚,历史曲线的落差越大,越难解释。
如果实在不能改主看板,至少在月度复盘里单独出一张。一张多出来的图,比一次口头解释管用得多。
按语言分开看,别汇总
多语言站最容易犯的错是把所有语言版本的流量加成一个总数。加完之后,英语站那一大坨会把小语种版本的异常完全淹掉。
正确的做法是每个语言版本一行,各自带自己的机器占比。这样某一门语言出问题的时候,你能在第一个月看见。
这跟多语言站的目录与标注结构是配套的:结构上分得清,数据上才拆得开。
结构没分清的站,这一步做不了,得先把结构补上。这也是为什么目录结构和数据结构该在同一天定下来。
报警阈值该设在哪儿
机器占比本身不适合当报警指标,因为它在小语种上天然就高。适合报警的是它的变化速度。
一个月之内动超过十个百分点,不管往哪边动,都值得查一遍。土耳其语那次是三十六个点,属于极端情况;正常波动一般在三个点以内。
另一个值得报警的是真人访问量的绝对值。它掉三成的时候,总访问量可能只掉一成,后者不会触发任何告警。
把告警挂在真人那一列上,不要挂在总数上。总数是两拨人加出来的,它的平稳可能只是两边正好互相抵消。
日志保留期限得跟着调
要看趋势就得有历史。很多站的日志只留三十天,那么等你发现要拆分的时候,能拆的只有当月。
建议至少留十三个月,能覆盖一个完整的同比周期。存储成本比想象的低,压缩之后一个中等规模的站一年也就几十G。
如果实在留不了原始日志,至少把逐日的分堆汇总数存下来,字段就四个:日期、总请求、机器请求、真人请求。
这四个字段一天一行,十年也才三千多行。存在一张表里,将来要复盘任何一次波动都够用。
别把机器流量当敌人
拆分不等于要拦截。搜索引擎的抓取程序来得勤是好事,说明你的页面被当回事了。这篇讲的是别把它算进读者,不是让你去封它。
真正该拦的是另一类:那些既不带来收录、也不遵守爬虫排除协议、还把服务器打满的采集脚本。拦它们的判据是服务器成本,不是流量报表。
把这两件事混在一起,很容易做出“为了让报表好看去封爬虫”这种自伤操作。
报表的问题用报表的办法解决,服务器的问题用服务器的办法解决。把它们混成一件事,是这个话题上最常见的自伤操作。
哪几件事这一层管不了?
页面级的分布不归这一层
本文所有的数都是整门语言的汇总。它能告诉你“这门语言有三成访问不是人”,告诉不了你“具体是哪三千个页面在被反复抓、又是哪三万个页面一年没人打开”。
那件事得用另一套办法量——随机抽样加逐页查,而且得先解决“这个页面在观测期内到底存不存在”这个前置问题。
汇总数和分布是两层,混着看会得出很奇怪的结论。比如一门语言的平均每页真人访问是459次,听起来还行,可它的中位数完全可能是个位数。
这一层留给后面单独写。可以先记住一个提示:汇总数看起来还行的语言,分布可能已经很难看了。
抓取程序的识别方法不归这一层
怎么反查一个自称Googlebot的请求是不是真的、怎么处理伪装成浏览器的采集脚本、哪些SEO工具的探针要不要算进来——这些都是站点自己的工程活。
它们跟这门语言是什么完全无关,英文站和老挝语站的做法一模一样。
本文默认你已经能把请求分成两堆,只讨论分完之后怎么读。
分堆本身的方法在日志分析那一层,已经有很成熟的做法,照着做就行,不用为小语种另起一套。
搜索引擎侧的收录判断不归这一层
爬虫来过不等于收录,收录不等于有排名。这三件事在小语种上尤其容易脱节,因为中间还夹着语言识别、编码解析这些额外的环节。
被抓了几次这个数,只能回答链路的第一段。后面两段得看搜索控制台那边的数据,跟日志是两个来源。
抓取、索引、排名这三段的分工是老话题了,本文不重复。
要提醒的只有一句:小语种站上这三段的衰减比英文站陡,每一段都得单独量。多语言模型铺开之后,语言识别这一环的失败率降了不少,但它并没有改变抓取和收录之间的脱节。
这份数据本身的边界
最后把话说回来。这48门语言的数据全部来自维基百科,它跟你的商业站有三个明显的差异:页面构成不同、外链结构不同、抓取方构成不同。
所以本文的绝对数值不要照搬,可以搬的是三样东西:那个机制(爬虫按页数、真人按人数)、那个可比指标(页面数除以读者数)、以及那套自查流程。
还有一件事值得单独说:页面浏览的正式定义里明确排除了一些请求类型,跟你的统计工具的口径不完全一致。跨来源比数字的时候要留神。
把这些边界摆清楚之后,剩下的那部分是稳的:一门语言的报表可信度,可以在动手之前就估出来。只要你知道这门语言大概有多少读者、你打算建多少个页面。
常见问题解答
机器占比多少算正常?
没有一个通用的正常值,它取决于你的页面数和读者规模的比。本文这48门语言从9.23%铺到92.07%,中位数29.36%,跨度太大,拿中位数当标准没有意义。
可以用的判据是自己跟自己比:算出页面数除以月度独立访客这个比值,落在0.01量级的站,机器占比通常在10%到20%;落在0.2以上的,三成起步。
更该关注的是变化速度。一个月之内动超过十个百分点,说明有事发生了。
为什么不直接用统计代码的数据,非要看日志?
统计代码要靠浏览器执行脚本才会上报,绝大多数抓取程序不执行脚本,所以它统计到的本来就基本是真人。这听起来是好事,其实是坏事——你根本看不到机器那一半有多大。
日志记的是每一个到达服务器的请求,两拨都在里面。要拆分就必须用日志。
正确的用法是两边都用:统计代码看真人的行为,日志看两拨的比例。页面迟迟不被收录的排查也得靠日志起手,统计代码在那个场景里同样是瞎的。
爬虫占比高,是不是说明这门语言不值得做?
不能这么读。爬虫占比高只说明页面数和读者数的比值高,它可能是读者少,也可能是页面被造多了,两种情况的对策完全相反。
老挝语的爬虫占比59.33%,可它的页面只有3311个,读者少是事实但页面一点不多。宿务语92.07%,页面533万个,问题完全在另一头。
先分辨是哪一种,再决定做不做。
土耳其那个案例,会不会只是巧合?
时间点对得太准,很难用巧合解释:跳变发生在封锁开始的当月,而且是从20.23%到56.13%这种量级,之后31个月没回来过。
更关键的是分子和分母的表现是分开的——真人掉79.9%、爬虫涨1.4%。如果是统计口径变了,两边应该一起变。
再加上同期英语、德语、法语、西班牙语全部平稳,这个跳变只发生在一门语言上。三条合起来,巧合的概率很低。
页面数除以读者数这个指标,多大算危险?
按本文这48门语言的分布,可以粗略分三档:0.05以下的报表基本可信,0.05到0.5之间需要每次减掉机器那一半再看,0.5以上说明页面规模已经超过读者能支撑的量。
超过1的只有宿务语和瓦瑞语两门,它们的页面都是程序批量建的。正常经营的站很难走到那一步。
但如果你在做自动生成的城市页、组合页、筛选页,这个数会涨得比想象快。
已经在用现成的分析工具,还需要自己拆日志吗?
取决于工具给不给你按来源分组的原始数据。大多数商业分析工具给的是清洗过的结果,清洗规则不公开,而且各家不一致。
要横向比较不同月份、不同语言版本,口径必须自己控制。这是自己拆的主要理由,不是因为工具不准。
如果只看一门语言的单月数字,用工具就够了。
这套方法在中文市场用得上吗?
用得上,而且中文市场有它自己的版本。中文站的抓取方构成跟英文站不一样,除了几家搜索引擎,还有数量可观的内容采集脚本。
页面数除以读者数这个比值照样能算,判读方式也一样。差别在于绝对数会更高一些,因为采集脚本的基数大。
那套四步自查流程可以原样搬过来,不用改。唯一要调的是分堆的判据表,得把本地那几家搜索引擎和常见采集脚本的特征补进去。
权威参考资料
本文标题:《小语种SEO的访问量里有一半不是人,48门语言量下来最高的那门到92%》
本文链接:https://zhangwenbao.com/minor-language-crawler-share-traffic-report.html
版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0