You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法识别Facebook User-Agent?OG元数据与重定向适配问题

解决Facebook爬虫未被UA识别的问题

兄弟,我太懂你这种头疼的情况了——明明设置了UA识别逻辑,结果Facebook调试工具就是不买账!问题大概率出在你对Facebook爬虫的User-Agent覆盖不全,再加上调试工具的缓存坑,咱们一步步来解决:

1. 你可能漏了Facebook爬虫的多个User-Agent

Meta(原Facebook)的爬虫不止一个UA标识,很多人只检测了facebookexternalhit,但官方列出的完整爬虫UA列表是这些:

  • facebookexternalhit/1.1
  • facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
  • MetaInspector/1.0
  • Mozilla/5.0 (compatible; FacebookBot/1.0; +https://developers.facebook.com/docs/sharing/webmasters/#crawler)

你的检测逻辑必须覆盖所有这些关键词,不能只抓其中一个。

2. 必须在服务器端做UA检测

如果你的UA识别是用客户端JavaScript实现的,那完全没用——Facebook爬虫根本不会执行前端JS,只会直接抓取服务器返回的初始HTML。所以一定要把UA检测放在后端(比如PHP、Node.js、Nginx配置里),请求一来先判断UA,再决定返回带OG标签的页面还是重定向。

举个PHP的简单示例:

<?php
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$facebookCrawlerUAs = [
    'facebookexternalhit',
    'MetaInspector',
    'FacebookBot'
];

$isFacebookCrawler = false;
foreach ($facebookCrawlerUAs as $uaKeyword) {
    if (strpos($userAgent, $uaKeyword) !== false) {
        $isFacebookCrawler = true;
        break;
    }
}

if ($isFacebookCrawler) {
    // 返回带OG元数据的静态页面
    include 'og-template.php';
} else {
    // 重定向到前端路由
    header('Location: https://url.com/#/artist/songtitle');
    exit;
}
?>

3. 强制清理Facebook调试工具的缓存

Facebook调试工具会默认缓存之前的抓取结果,哪怕你已经修复了UA检测,它可能还是用旧数据。所以每次修改后,一定要点击工具里的**"Scrape Again"**按钮,强制重新抓取页面。

4. 用curl验证你的检测逻辑

可以用curl命令模拟Facebook爬虫的请求,测试服务器是否正确返回OG标签:

curl -A "facebookexternalhit/1.1" https://url.com/artist/songtitle

如果返回的是带OG标签的HTML,说明检测逻辑没问题;如果还是重定向,那就是UA匹配的代码有问题,再检查字符串匹配的细节。

额外提醒:OG标签要符合规范

就算UA识别对了,OG标签本身也要达标:比如og:url必须和当前固定链接完全一致(也就是https://url.com/artist/songtitle),og:image要能被爬虫访问到(不能有防盗链、不能用相对路径),否则调试工具还是会报错。

内容的提问来源于stack exchange,提问作者Andra

火山引擎 最新活动