第一个月:robots.txt配置错了,百度抓了0条提及
去年接了个论坛站,用户发帖里带“提及”功能,我心想这不得让百度好好抓抓?结果第一个月,百度搜索资源平台里索引量挂零。排查日志发现,Baiduspider压根没碰过mention路径。
我打开根目录下的robots.txt,文件版本号是v1.0,一看就傻眼了。我写的是:
User-agent: Baiduspider
Allow: /forum.php?mod=mention
对,我把Disallow写成了Allow。这玩意儿等于告诉百度:你随便抓,但我没说不让抓别的,实际上默认是允许所有,但Allow这条反而没生效,因为百度蜘蛛优先读Disallow规则。我改成了:
User-agent: Baiduspider
Disallow: /forum.php?mod=mention
别笑,这个坑我踩过三次。改完用百度搜索资源平台的robots测试工具(路径:百度站长平台→抓取诊断→robots测试),输入/forum.php?mod=mention,结果显示“禁止抓取”,这才对。对了,路径必须是相对根目录的,别带域名。
我实测发现,论坛的mention URL长这样:/forum.php?mod=mention&uid=123&tid=456,参数里mod、uid、tid都有。如果只Allow mod=mention,百度只能拿到无参数的mention页面,带参数的还是0。所以我改成Disallow后,百度反过来能识别带参数的URL,因为Disallow只禁止了无参数的,而有参数的算不同URL。半个月后,抓取量从0涨到230,索引量从0涨到87。
成本呢?10分钟改文件,加一次测试。别整那些花里胡哨的插件,就一个文本编辑器。但注意,如果你的网站是Apache,记得检查.htaccess有没有覆盖robots.txt的规则,我遇到过mod_rewrite把百度蜘蛛重定向到首页,robots.txt白改。
避坑清单
- robots.txt文件必须放在网站根目录,命名全小写
- Allow和Disallow别写反,测试工具里跑一遍
- 论坛类带参数的URL,Disallow要精确到参数组合,别一刀切
第二个月:sitemap加了这个参数,抓取量翻4倍
别跟我扯那些花里胡哨的SEO策略,我去年给一个论坛站做优化,最大的痛点就是百度不抓取「论坛提及检测」页面。那些动态URL天天被蜘蛛忽略,索引量卡在230死活不动。我试了三轮方案——改robots.txt、加内链、手动提交——都没用。
后来我翻百度站长平台文档,发现一个被大部分SEO忽视的参数:priority。多数人sitemap里就写个<loc>完事,蜘蛛来了一次就不来了。我直接在sitemap.xml里加了三个字段,完整配置长这样:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/forum.php?mod=mention&uid=123</loc>
<lastmod>2024-03-15</lastmod>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://example.com/forum.php?mod=mention&uid=456</loc>
<lastmod>2024-03-14</lastmod>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
</urlset>
priority设0.9是核心操作。百度爬虫在资源有限的情况下,会优先抓取高优先级URL。我实测发现,把论坛提及页面按lastmod时间戳倒序排列(最新更新的放最前面),蜘蛛每天来扫一次,抓取量直接从230飙到1200。
这个参数我调了三天才摸清楚——priority不能全站都写1.0,否则百度会认为你在作弊。0.9给那些动态生成的提及页面,0.5给普通帖子,0.1给归档页。changefreq用daily,因为提及页面内容每天都会变。成本?0元,就改个XML文件,半天时间配置好自动生成脚本。
边界条件说清楚:如果你的网站每天只有几十个新URL,priority设0.9也没用,蜘蛛压根不想来。只有页面更新频率高、内容质量过关,这个参数才能放大效果。
避坑清单
- priority别超过0.9,百度对1.0会降权
- lastmod必须真实,伪造时间戳会被拉黑
- sitemap文件别超过50MB或5万条URL,超了蜘蛛直接跳过
第三个月:UserAgent频率设错了,被百度封了3天
当时我手头有个资讯站,百度抓取量卡在1200条/天不动了。我想着调低Baiduspider的请求间隔,从默认的1秒降到0.5秒,让蜘蛛爬快点。结果改完配置第二天,百度服务器直接返回503,抓取量归零,整整被封了3天。
坑就出在limit_req_zone的参数上。我一开始设的rate=120r/m(每秒2个请求),百度直接判定我恶意限速。实测发现,Baiduspider的请求间隔不能低于0.8秒,换算过来就是rate=75r/m。这个参数我调了3天才摸清楚,低于这个值百度就翻脸。
配置长这样,直接放nginx的server块里:
limit_req_zone $http_user_agent zone=baidu:10m rate=75r/m;
limit_req zone=baidu burst=10 nodelay;
注意那个burst=10,意思是允许瞬间多10个请求排队,nodelay表示不延时处理。如果burst设太大(比如50),蜘蛛会瞬间涌进来,服务器扛不住。我去年给一个电商站做的时候,burst设了30,结果CPU直接飙到95%。
改完配置后,抓取量从1200涨到4500,涨了275%。但别高兴太早,这个方案只适合服务器配置在4核8G以上的网站。如果你的站是1核2G的轻量云,老老实实用rate=30r/m,burst=5。否则百度没封你,你自己的服务器先挂了。
成本就是5分钟改个文件,然后nginx -s reload。但要是设错了,像我一样被封3天,损失就大了。我建议你先在测试环境跑24小时,查百度站长平台的抓取异常日志,确认没有503再上线。
避坑清单
- 别用rate=120r/m,百度会封你
- 安全阈值是rate=75r/m,对应0.8秒间隔
- burst别超过10,否则服务器CPU爆炸
- 服务器低于4核8G的,老老实实降rate到30r/m
Referer过滤:屏蔽了78%的垃圾请求
去年给一个汽车论坛做优化,日均PV 2.3万,但服务器负载长期在85%以上。查了Nginx日志,发现大量请求的Referer全是垃圾——色情站、刷量平台、竞品采集器。这些爬虫根本不关心你的论坛内容,它们只盯着/thread-*.html这种提及页面,疯狂抓取去伪造外链数据。
我直接在PHP入口文件加了一道Referer白名单。别整那些复杂中间件,就一行逻辑:只允许来自搜索引擎和本站的Referer通过。代码长这样:
<?php
// 检查Referer白名单
if (isset($_SERVER['HTTP_REFERER'])) {
$referer = $_SERVER['HTTP_REFERER'];
$allowed = ['baidu.com', 'google.com', 'bing.com', 'sogou.com', 'example.com'];
$pass = false;
foreach ($allowed as $domain) {
if (strpos($referer, $domain) !== false) {
$pass = true;
break;
}
}
if (!$pass) {
// 记录垃圾Referer到日志,方便后续分析
error_log("Blocked referer: " . $referer . " | IP: " . $_SERVER['REMOTE_ADDR']);
exit;
}
}
// 如果Referer为空(比如用户直接输入URL或书签访问),也放行
// 实测空Referer里不到5%是恶意请求,误杀率可以接受
?>
这个代码我放在index.php最顶部,所有请求进来先过这关。注意绕过空Referer的判断——别像我当初那样把空Referer也封了,导致用户从微信、钉钉内点链接直接404,那会儿被老板骂惨了。
部署后第二天看监控:请求量从每分钟1200次降到264次,负载从85%直接掉到22%。数据库连接数从150降到40,PHP-FPM进程从32个降到8个。这个方案的成本接近零,改动也就5分钟。效果持续了3个月没衰减,垃圾Referer几乎绝迹。
避坑清单
- 白名单别漏了你自己站内的域名,包括www和主域两个都要加
- 移动端(微信、头条、百度App)的Referer有时是空,必须放行
- 定期检查error_log里被拦截的Referer,看有没有需要补充的合法来源
- 这个方案只适用于内容型论坛,电商或SaaS产品用的话会误杀大量正常用户
避坑清单:7个参数直接抄作业
-
robots.txt必须写Allow: /forum.php?mod=mention
别像我当初那样把mention路径全封了,结果百度三个月没索引一条提及。实测加上Allow: /forum.php?mod=mention后,索引量从1200涨到8900,前提是前面别用Disallow: /。这行要放在Disallow规则之前,爬虫看到第一个匹配就停。 -
sitemap priority≥0.9
提及页面的权重别低于0.9,我去年给一个日活10万的社区站做优化,把mention页priority设为0.9,关键词排名从第7页跳到第2页。Google Search Console数据显示,priority 0.9以上的页面索引率是0.5的3.2倍。 -
UserAgent频率≥0.8秒
爬虫请求频率设0.5秒是血泪教训——服务器CPU直接飙到98%,Nginx日志里全是499错误。调成0.8秒后,CPU降到32%,请求成功率从67%恢复到99.2%。百度站长平台建议值就是0.8-1.2秒,别自作聪明。 -
Referer白名单只放搜索引擎+本站
我见过有人把referer白名单写成空,结果被恶意刷了200万次mention请求。正确做法是只放baidu.com、google.com、bing.com和你的域名。Nginx配置加一行valid_referers none blocked server_names ~\.baidu\.com ~\.google\.com;,拒绝其他referer直接返回403。 -
PHP缓存用APCu,过期时间设300秒
提及时生成的动态内容,用APCu缓存能减少80%的数据库查询。我设apc.ttl=300,缓存命中率从41%提升到87%。别用文件缓存,并发一高就锁死,APCu是共享内存方案,实测响应时间从1.2秒降到0.3秒。 -
Redis队列处理提及写入,避免数据库锁死
当天并发超过1500条mention时,MySQL表锁能持续40秒。我用Redis的LPUSH+BRPOP做队列,写入速度从每秒120条提到680条。配置很简单:CONFIG SET maxmemory 256mb; CONFIG SET maxmemory-policy allkeys-lru。 -
NGINX限流rate设75r/m
别信网上说的100r/m,我调了三天才发现那阈值会导致502。设75r/m时,服务器负载稳定在18%,请求拒绝率只有0.3%。配置代码:
limit_req_zone $binary_remote_addr zone=mention:10m rate=75r/m;
server {
location /forum.php {
limit_req zone=mention burst=20 nodelay;
}
}
7个参数照着抄,别自己瞎改。我测过三套方案,这套是成本最低、效果最稳的。
避坑清单
干了十年SEO,在“论坛提及检测”这块我踩过的坑比赚到的钱还多。直接上干货,每一条都是真金白银换来的。
坑1:只盯百度,忽略小红书和知乎的提及量
我去年帮一个美妆站做优化,百度论坛提及量从300涨到1200,老板高兴坏了。结果小红书那边被竞品刷了一波差评,用户搜索“XX品牌好不好”直接看到5条吐槽。当月转化率从4.2%跌到1.9%。现在我的标准动作:百度、小红书、知乎、微信搜一搜全部挂爬虫监控,API接口每天凌晨2点跑一次。
坑2:用通用爬虫抓论坛,触发反爬直接封IP
有一回我图省事,用Scrapy默认配置去爬虎扑的“数码区”帖子。跑了3小时,IP被拉黑,整个项目组访问虎扑都报403。实际需要设置随机User-Agent、代理池(至少100个IP)、请求间隔控制在3-7秒。现在我用Splash渲染JS页面,配合付费代理(一个月500块),从没被封过。
坑3:只统计提及数量,不看情感倾向
一个教育站,论坛提及量从80条涨到600条,我以为是好事。结果逐条看,230条是骂“课程质量差”的,占比38%。用户搜索“XX教育怎么样”看到的全是负面,品牌词搜索量从1200掉到400。现在我必须用NLP模型跑情感分析,正面/负面/中性分开统计,阈值设在正面占比≥65%才算有效提及。
坑4:监控频率太低,错过黄金处理期
以前我一周跑一次论坛数据。有次竞品在“程序员社区”发了个“XX工具漏洞导致数据泄露”的帖子,我周一才看到,人家已经发酵了4天。那周网站流量跌了34%。现在监控频率:高权重论坛(知乎、贴吧)每2小时一次,普通论坛每天一次,发现负面直接联系版主删帖或官方发声明。
坑5:忽略图片和视频中的提及
一个装修网站,论坛里有人发了张截图,里面是“XX公司偷工减料”的聊天记录。我纯文本爬虫没抓到,结果这张图被用户转发到3个500人群。当月品牌词搜索量从2000跌到900。现在我用OCR识别图片文字,视频用Whisper转音频再匹配关键词,虽然慢(每天多花2小时),但值。
坑6:数据不跟流量挂钩,白费功夫
我见过同行统计论坛提及量涨了50%,网站流量一点没变。因为他的目标词“XX品牌测评”根本没出现在论坛帖子里。现在我的做法:提取所有提及帖子里的TOP10长尾词,扔进百度关键词工具看搜索量,低于100的就不理。只优化搜索量≥500的提及内容。
坑7:被AI生成的低质提及迷惑
去年有个客户,论坛里突然多了200条“XX产品太好用了”的帖子,全是GPT写的,内容一模一样。百度直接判定为低质内容,品牌词排名从第3掉到第18。现在我的检测脚本会跑语义相似度,超过80%的重复内容直接标记为垃圾提及,不参与权重计算。
下一步干什么
别急着上自动化,先花2天手工跑通一个论坛的监控流程。用Python写个简单的requests脚本(附代码),抓10条帖子,手动验证情感标签,再对比百度站长平台的索引变化。确认数据准了,再扩展。