Laravel网站Facebook抓取URL异常问题求助
这种情况我之前帮不少开发者排查过,核心问题基本都出在页面元标签配置、服务器重定向或者URL生成逻辑上,具体拆解下来有这几个可能:
Open Graph(OG)标签配置错误
Facebook爬虫优先读取页面的og:url元标签来确定内容的标准URL,如果这个标签里的内容写错了——比如不小心重复了域名还加了空格(就像你看到的http://www.myqourse.com/ www.myqourse.com /offer/...),Facebook就会直接用这个错误的URL。你可以右键查看页面源码,搜索<meta property="og:url",看看它的content属性值是不是真的带了重复域名和空格。Canonical标签写错了
除了OG标签,Facebook也会参考页面的<link rel="canonical" href="..." />标签,这个标签是告诉所有爬虫页面的官方标准URL。如果这里的URL同样重复了域名,也会导致抓取异常。服务器重定向逻辑出错
要是你的服务器在处理Facebook爬虫的请求时,返回了错误的重定向响应——比如重定向的目标URL被错误拼接,把域名重复加了一遍,也会出现这种情况。你可以用Facebook官方的链接调试工具来测试,它会显示爬虫抓取时的完整请求流程,包括重定向步骤。后端URL生成逻辑有bug
错误URL里的空格很显眼,大概率是后端模板或者代码在生成这个URL时出了问题:比如变量重复调用(比如把域名变量输出了两次)、字符串拼接时不小心加了空格,或者URL编码不彻底,导致空格保留了下来,让Facebook解析时把错误的片段拼在了一起。
快速解决步骤
- 先检查页面的
og:url和canonical标签,确保它们的content值是完全正确的URL:http://www.myqourse.com/offer/557/en/Certificate+Business+Professional+-+CBP+Leading+through+change - 用Facebook的链接调试工具重新抓取页面,强制刷新它的缓存——很多时候是因为Facebook缓存了旧的错误URL,刷新后就会用新的正确配置。
- 排查服务器的重定向规则,确保对爬虫请求返回的是正确的目标URL,没有多余的域名拼接。
- 检查后端生成这个URL的代码逻辑,看看是不是变量重复、字符串拼接时的空格或者编码问题。
内容的提问来源于stack exchange,提问作者ZYSHAQ

