你的网站流量突然腰斩,可能不是算法更新,而是IPv6在“敲门没人应”
昨天还一切正常,今天收录量断崖式下滑,爬虫日志里全是“No route to host”——你查服务器、翻 robots.txt、甚至怀疑被黑,结果问题藏在最基础的地方:IPv6端口根本没开,爬虫来了,门是锁着的。
搜索引擎爬虫到底怎么走IPv6?
Google 和百度的爬虫早就不靠单个 IP 工作了。它们用的是双栈集群,手里既有 IPv4 地址,也有 IPv6 地址。而且,优先用 IPv6 尝试访问。
如果你的网站只监听 IPv4(比如 Nginx 里只写了 listen 80),那爬虫拿着 IPv6 地址来敲门,服务器压根不搭理。它不会报错,也不会重试,直接当“不可达”处理——然后默默降低抓取频次。
我帮一个做家居配件的小电商排查过。半年 SEO 投入不少,但新页面总卡在“已提交未收录”。一翻百度蜘蛛日志,满屏 IPv6 请求返回“No route to host”。查下去发现:服务器系统支持 IPv6,Nginx 却只绑了 IPv4 端口。把 listen 80 改成 listen [::]:80,再加一行兼容 IPv4 的 listen 80,重启。两周后,新页面平均收录时间缩短了不少,首页也慢慢开始带出二级栏目。
你的DNS解析配置,正在悄悄赶走爬虫
DNS 不只是“域名→IP”的翻译器。它分 A 记录(IPv4)和 AAAA 记录(IPv6)。如果你的域名同时有这两条记录,但源站没开 IPv6,事情就麻烦了:
- 爬虫先拿到 AAAA 记录,用 IPv6 去连;
- 连不上,降级重试 IPv4;
- 这一来一回,TTFB 拉长,爬虫觉得你“慢”“不稳定”,下次抓得更少。
更常见的是 CDN 背锅。很多云厂商默认开启 IPv6 接入,但回源时仍走 IPv6——而你的源站防火墙没放行 ::/0,或者 Nginx 根本没监听 IPv6 端口。结果就是:用户访问正常(CDN 缓存扛着),爬虫却频频超时。
之前帮一位本地教育博主看站,他发现 Google Search Console 里“抓取错误”突然增多,TTFB 也翻倍。最后定位到:CDN 开了 IPv6 入口,但源站 Nginx 配置里漏了 [::]:443,加上后重试几次,错误数当天就清零了。
为什么你的日志里IPv6请求全是“403”或“404”?
这不是网络不通,是“进门后被拦下了”。
典型场景有两个:
- IP 白名单太窄:比如
.htaccess或 Nginx 的allow规则只写了192.168.0.0/16这类 IPv4 段,Google 的 IPv6 爬虫地址(像2a00:1450:4001::开头的)进来直接 403; - location 匹配失效:某些 Nginx 配置里,
location /admin只匹配 IPv4 请求路径,IPv6 请求因为 Host 头或协议判断差异,意外落到location /下,结果返回 404。
有个技术博客站长吃过亏:他被一批 IPv6 恶意扫描刷爆带宽,干脆在防火墙里封了整个 2000::/3 段。第二天 Google 收录量掉了一半。后来发现,Googlebot 的官方 IPv6 段也在这个范围里。解封后,改用 Nginx 的 geo 模块+已知爬虫 UA+IP 段白名单组合判断,才真正挡住坏流量,又不误伤好爬虫。
3个方法,快速检测你的网站IPv6是否“生病”
方法1:用curl模拟爬虫
打开终端,执行这一行(把“你的域名”换成真实地址):
curl -6 -I https://你的域名
- 返回
Connection refused或No route to host→ IPv6 完全不通 - 返回
200但耗时明显比curl -4高 → 路由或中间设备有问题 - 直接卡住十几秒 → 很可能是防火墙静默丢包
方法2:检查DNS记录
还是终端,跑这句:
dig AAAA 你的域名
- 没输出任何 IPv6 地址 → 你没给爬虫留 IPv6 入口
- 有输出但
ping6不通 → DNS 记录指向了一个没开 IPv6 的服务器 - 输出地址和你服务器实际 IPv6 不一致 → DNS 配错了
方法3:翻爬虫日志
在 access.log 或 error.log 里搜 IPv6 格式地址,比如:
grep -E "2[0-9a-fA-F]{3}:" /var/log/nginx/access.log
- 如果这类请求大量返回 403/404/502 → 应用层拦截了
- 如果压根没日志 → 请求根本没到 Web 服务,问题在防火墙、负载均衡或 DNS
- 如果只有少量且状态正常 → IPv6 基本可用,不用急
真实案例:一个论坛因为IPv6配置失误,收录量跌了两个月
这位站长做本地生活论坛七八年了,一直纯 IPv4。2023 年底,他用的云服务器厂商悄悄升级网络栈,默认分配了公网 IPv6 地址。但他没收到通知,Nginx 配置也没动。
结果 Google 和百度的 IPv6 爬虫持续失败。收录量从稳定 3000+ 条,两个月内掉到不足 400 条。他找过三个 SEO 顾问,有人建议改标题,有人让他堆外链,还有人说“算法变了,忍忍”。
最后我帮他 ssh 上去看了眼 Nginx 配置:listen 80; listen 443 ssl; ——干干净净,没有一行 IPv6。加上 [::]:80 和 [::]:443 ssl,重启,再 curl -6 测试通过。第三天,Search Console 里“抓取频率”曲线就开始回升。
他后来发我一句话:“原来不是内容没人看,是我家大门只留了一半缝。”
今天就能做的1个操作:给你的服务器加一条IPv6监听
打开你正在用的 Web 服务器配置文件(Nginx 在 /etc/nginx/sites-enabled/ 下,Apache 在 /etc/apache2/sites-enabled/),找到 listen 行。
比如原来是:
listen 80;
listen 443 ssl;
改成:
listen [::]:80;
listen [::]:443 ssl;
listen 80;
listen 443 ssl;
保存,然后运行:
nginx -t && nginx -s reload
(Apache 用户用 sudo systemctl reload apache2)
做完立刻回到终端,执行 curl -6 -I https://你的域名。如果返回 200 或 301,说明成了。
如果还不行,顺手检查下防火墙:Ubuntu 用 sudo ufw status,确认 80 和 443 的 IPv6 规则开着;CentOS 用 sudo ip6tables -L,看看有没有 DROP 规则挡在前面。
这一步不用改代码、不用换服务器、不用等备案,5 分钟搞定。而它带来的,可能是接下来几周里,搜索引擎多给你一次抓取机会,多收录一个页面,多带来一个真实用户。