11 月 1 号晚上,我躺在沙发上用手机搜 site:moxiaoa.com。
结果出来一条。
就一条,还是首页。
那会儿站点上线快一个月了,48 篇文章,每一篇都老老实实写了 TDK,sitemap 也提交了,主动推送天天在跑。按理说不该是这个结果。
我第一反应是"是不是还没收",第二反应是"不对,我每天都推 10 条,它不可能没来抓"。
于是爬起来开电脑,进了宝塔后台,把访问日志拉下来。
先看蜘蛛到底来了没有
日志路径是 /www/wwwlogs/moxiaoa.com.log,combined 格式。我用 awk 筛出百度蜘蛛的请求:
sudo awk '$12 ~ /Baiduspider/ {print $7}' moxiaoa.com.log | sort | uniq -c | sort -rn | head -20
$7 是请求路径,$12 是 User-Agent。
结果是这样的:
| 指标 | 数值 |
|---|---|
| 日志总行数 | 23645 |
| Baiduspider 请求次数 | 377 |
| 独立 URL | 160 个 |
| 返回 200 | 368 次 |
| 返回 404 | 9 次 |
377 次抓取,160 个页面,368 次成功。
来了,而且来得挺勤。
那就不是"没抓"的问题,是"抓了不收"。
抓取的时间分布,暴露出一个规律
把抓取按天统计:
sudo awk '$12 ~ /Baiduspider/ {print substr($4,2,11)}' moxiaoa.com.log | sort | uniq -c
| 日期 | 抓取次数 |
|---|---|
| 10-28 | 5 |
| 11-01 | 3 |
| 11-03 | 144 |
| 11-05 | 52 |
| 11-06 | 2 |
| 11-07 | 109 |
| 11-08 | 58 |
| 11-09 | 4 |
看出两个高峰:11 月 3 号和 11 月 7 号,各一百多次。
这两天我都做了什么?3 号发了一批文章,7 号改了 sitemap。
这说明蜘蛛是被"有新东西"触发来的,不是按固定节奏巡检。
平时一天三五次,几乎等于没来。所以指望"放着不管自然收录"是不现实的——新站没有权重,蜘蛛不会主动来。
第二个发现:65% 的抓取配额,被一个页面吃掉
这是最关键的一条。
我按 URL 前缀归了一下类:
sudo awk '$12 ~ /Baiduspider/ {print $7}' moxiaoa.com.log | \
sed 's#/post/.*#/post/*#; s#/devkit/.*#/devkit/*#' | \
sort | uniq -c | sort -rn
结果:
| URL 前缀 | 独立 URL 数 | 占比 |
|---|---|---|
| /devkit/ 及子路径 | 105 | 65.6% |
| /post/ 文章页 | 45 | 28.1% |
| 扫描垃圾路径 | 7 | 4.4% |
| 主页面 | 3 | 1.9% |
一个工具箱页面,吃掉三分之二的抓取量。
我去查了下这个 /devkit/ 到底是什么情况。用 curl 抓几个子页面算 md5:
for u in /devkit/ /devkit/tool/pdf/pdf-split /devkit/tool/math/math-random \
/devkit/cat/security /devkit/tool/text/text-dedup; do
echo -n "$u "
curl -s "https://www.moxiaoa.com$u" | md5sum
done
输出:
/devkit/ c4cb3bfeaefe845ebf03aac0a94e563a
/devkit/tool/pdf/pdf-split c4cb3bfeaefe845ebf03aac0a94e563a
/devkit/tool/math/math-random c4cb3bfeaefe845ebf03aac0a94e563a
/devkit/cat/security c4cb3bfeaefe845ebf03aac0a94e563a
/devkit/tool/text/text-dedup c4cb3bfeaefe845ebf03aac0a94e563a
五个不同的 URL,返回的 HTML 一字节不差,全是 18060 字节。
原因不复杂:这是个前端路由的工具箱,所有子页面都靠 JS 渲染。服务器对任何路径都返回同一个空壳 HTML,内容在浏览器里才生成。
而蜘蛛不执行 JS(百度对这个能力的支持很有限),它看到的永远是这个空壳。
于是它认为:这个站有一百多个一模一样的页面。
重复内容对新站是致命的。百度不会把抓取配额浪费在一堆相同的空壳上,但它一开始不知道,只能一个个爬,爬完发现全一样,就把这个站点的"内容质量"往下调。
65% 的配额,喂了一堆重复页。
第三件事:45 篇文章全抓了,但一篇没收
/post 下的 45 个页面(当时是 45 篇,后来补到 48),蜘蛛全都访问过,全是 200。
但 site 查询只有首页。
这说明收录卡在了"抓取"之后的环节——索引评估。
可能的原因我列了几条,逐条排查:
内容重复? 我抽了几篇比对,都是原创,没有抄。排除。
canonical 有问题? 这个查过,previously 修了 canonical,指向自身,正确。
站点权重太低? 新站,一个月,零外链。这条最可疑。
抓取配额被稀释? 前面已经证实,65% 被 devkit 吃了。
最致命的一条:外链是零
我把日志里所有请求的 referer 抽出来,筛掉站内的:
sudo awk '{print $11}' moxiaoa.com.log | grep -v 'moxiaoa.com' | \
grep -v '-' | sort | uniq -c | sort -rn | head
一条外部 referer 都没有。
也就是说,一个月里没有任何一个外站链接过来过。
这件事的含义比想象中严重。搜索引擎判断一个站值不值得收录,除了内容本身,还看"有没有别人提到你"。零外链的站,在算法眼里就是一个孤岛——内容再好,也没有第三方背书。
这也是为什么我天天推 10 条,蜘蛛来了,还是只收首页。
主动推送解决的是"让它知道有这个 URL",解决不了"让它相信这个 URL 值得收"。
我做了什么
三条,按优先级:
第一,给 /devkit/ 加 canonical,并且在 robots 里禁掉大部分子路径。
robots.txt 改成:
User-agent: *
Allow: /
Disallow: /devkit/tool/
Disallow: /devkit/cat/
Sitemap: https://www.moxiaoa.com/sitemap.xml
只留 /devkit/ 首页可抓。这样蜘蛛不会再被一百多个空壳牵着走,配额能还给文章页。
第二,补 canonical。
给 /devkit/ 首页加了指向自身的 canonical。之前没有,现在每个页面都有。
第三,开始做外链。
这一条最难也最有效。我的做法是:在知乎的每篇文章末尾带上站址(这也是为什么你在我知乎文里能看到站址),另外找了一个朋友的站换了友链。
修完之后的变化
robots 和 canonical 是 11 月 8 号改的,之后两天的抓取数据:
| 日期 | 抓取次数 | 其中 /devkit |
|---|---|---|
| 11-08 | 58 | 12 |
| 11-09 | 4 | 0 |
/devkit 的占比从 65% 掉到接近 0。
但收录还没立刻变——修改和收录之间有个滞后期,通常一到三周。搜索引擎要重新抓、重新评估,不是改完立刻生效。
几个我现在的判断
一、抓 ≠ 收。 这是最容易被误解的一点。后台看到蜘蛛来了、状态码 200,不代表页面被收录。抓取只是"它来看了一眼"。
二、新站的抓取配额很少。 一个月 377 次,平均一天 12 次。这 12 次怎么分配,决定了你能不能把新内容送进去。重复页、参数页、404,全在偷配额。
三、零外链是根因。 内容、TDK、sitemap 都是"必要条件",不是"充分条件"。没有外部信号,算法没有理由给你权重。
四、推送有用,但不是万能。 它能让蜘蛛更快发现新 URL,但决定收不收的是页面质量和站点权重。
接下来打算做的
- 每周固定发 2~3 篇,保持更新频率,让蜘蛛有稳定的"有新东西"信号
- 继续做外链:知乎、公众号、朋友的站,能留链接的地方都留
- 观察三周,看 /post 下有没有开始进索引
- 如果还是不收,再查一遍服务器的响应头、页面加载速度、移动端适配
这件事没有捷径,只能一项项排。
最后
如果你的站也遇到"抓了不收",别急着怀疑内容。先去翻日志,看蜘蛛把配额花在哪儿了。
十有八九,问题不在文章里,在你没注意的那几个页面上。
如果你也在折腾这套东西,碰到卡住的地方,可以加我微信 lige0552 聊聊。白天要上班,消息回得慢,看到都会回。