结论:区分搜索引擎蜘蛛和社交平台爬虫,最可靠的方法是按“身份验证→抓取范围→频率与触发方式”三步走。搜索引擎蜘蛛能用反向 DNS 正反查验证,会全站递归抓取并请求 robots.txt、sitemap.xml;社交平台爬虫只抓被分享的单个 URL,主要读取 OG 元数据,请求量常为 1-3 次且由分享行为触发。单看 User-Agent 会误判。
User-Agent 能直接区分蜘蛛和爬虫吗?
结论:User-Agent 只能做初步筛选,不能作为最终判据,因为 UA 字符串可以被任意伪造。
常见搜索引擎蜘蛛 UA:Googlebot 为 Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html);Bingbot 为 Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm);Baiduspider 为 Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)。
常见社交平台爬虫 UA:Facebook 为 facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php);Twitter 为 Twitterbot/1.0;Telegram 为 TelegramBot (like TwitterBot);LinkedIn 为 LinkedInBot/1.0;Slack 为 Slackbot-LinkExpanding 1.0;Discord 为 Mozilla/5.0 (compatible; Discordbot/2.0; +https://discordapp.com)。
判断时先匹配 UA,再进入 IP 验证。只凭 UA 放行,攻击者用 curl -A "Googlebot" 就能绕过。
如何用反向 DNS 和 IP 验证搜索引擎蜘蛛?
结论:搜索引擎蜘蛛必须通过“反向 DNS + 正向 DNS 回查一致”验证,正反查不一致就不是官方蜘蛛。
以 Googlebot 为例,拿到访问 IP 66.249.66.1 后执行:
dig -x 66.249.66.1 +short
dig crawl-66-249-66-1.googlebot.com +short
# 必须返回 66.249.66.1
Bingbot 可查 40.77.167.1,反向得到 msnbot-40-77-167-1.search.msn.com;Baiduspider 可查 220.181.108.1,反向得到 baiduspider-220-181-108-1.crawl.baidu.com。只有正向解析结果和原始 IP 完全一致,才认定为官方蜘蛛。
社交平台爬虫多数不提供可正反查的独立爬虫域名,Facebook、Twitter、Telegram 主要靠官方文档和 UA 识别。结论:搜索引擎蜘蛛能做强身份验证,社交平台爬虫多数只能做弱身份验证。
抓取范围和频率有什么不同?
结论:搜索引擎蜘蛛是“广域持续抓取”,社交平台爬虫是“单页突发抓取”。
搜索引擎蜘蛛会请求 /robots.txt、/sitemap.xml,跟随内链抓取首页、栏目页、文章页、分页,并抓取图片、CSS、JS 以完成渲染。一个中等规模站点,Googlebot 每天抓取量可从数百次到数万次,取决于页面数量和更新频率。
社交平台爬虫由用户分享链接触发,只抓取被分享的那个 URL,读取 <title>、meta description、og:title、og:image、og:description。单条链接请求量常为 1-3 次,不递归抓内链,不请求 sitemap.xml。Twitterbot、LinkedInBot 会声明遵守 robots.txt;部分只做预览的爬虫不把 robots.txt 作为唯一放行条件。
看日志和请求路径怎么判断?
结论:日志里同时看“是否请求 robots.txt/sitemap”“是否抓静态资源”“是否只访问单个 URL”,判断准确率最高。
快速统计命令:
awk '{print $1,$12}' access.log | grep -i -E "googlebot|bingbot|baiduspider|facebookexternalhit|twitterbot|telegrambot|linkedinbot|slackbot|discordbot"
搜索引擎蜘蛛会出现连续访问多个路径、请求图片和 JS、访问 sitemap 的记录。社交平台爬虫常只出现一条目标 URL 记录,且不带站内跳转来源。若某 UA 只访问文章页、不抓图片、不请求 robots.txt,优先判定为社交平台爬虫或伪造爬虫。
误封社交爬虫会有什么后果?该怎么放行?
结论:误封社交平台爬虫会导致分享卡片空白,不影响 SEO 排名;应把社交爬虫加入白名单放行。
Nginx 可按 UA 放行:
if ($http_user_agent ~* "(facebookexternalhit|Twitterbot|TelegramBot|LinkedInBot|Slackbot|Discordbot)") {
set $social_crawler 1;
}
if ($social_crawler = 1) {
return 200;
}
对搜索引擎蜘蛛,用 robots.txt 和 sitemap.xml 管理抓取;对社交爬虫,放行 HTML 和 og:image 图片。需要限速时,在 CDN 对 facebookexternalhit 做频率限制即可,不要直接返回 403。
总结:先看 UA,再用反向 DNS 验证搜索引擎蜘蛛,最后用抓取范围、频率和日志路径确认。搜索引擎蜘蛛全站递归、请求 robots.txt 和 sitemap;社交平台爬虫单页触发、读取 OG 标签、请求量 1-3 次。按这套流程判断,误封率会降到可接受范围。