ruby-on-rails Facebook调试器重定向由于rel替代 meta标记?

kt06eoxx  于 2023-02-20  发布在  Ruby
关注(0)|答案(2)|浏览(115)

我有一个网站,运行在几种语言。我们使用像这样的 meta标记来定义爬虫的替代网址:

<link href="http://www.example.com/us/eng-us-url-here" hreflang="en-US" rel="alternate" />
<link href="http://www.example.com/gb/eng-gb-url-here" hreflang="en-GB" rel="alternate" />
<link href="http://www.example.com/fr/french-url-here" hreflang="fr" rel="alternate" />

等等
例如,当我使用Facebook调试器测试法语URL时,显示了一个错误:

Object at URL 'http://www.example.com/fr/french-url-here' of type 'website' is invalid because a required property 'og:title' of type 'string' was not provided.

即使所有的标签都在那里。点击'看看我们的scraper到底看到了什么为您的网址'显示,它实际上是在做一个奇怪的重定向:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head>
<body>You are being <a href="http://www.example.com/fr/french-url-here?fb_locale=en_GB/">redirected</a>.</body>
</html>

为什么会发生重定向呢?这肯定是在服务器端控制的,但是doctype是不同的,所以可能是别的原因。我们使用的是一个相当标准的Rails应用程序。
此外,如果它被重定向,为什么Facebook不跟随它?

wljmcqd8

wljmcqd81#

线索在重定向的URL中,它附加了?fb_locale=en_GB
如果Facebook遵循惯例就好了,但根据https://developers.facebook.com/blog/post/2013/11/11/605/,如果你想让它与Open Graph一起工作,你需要做两件事:
1.在标题中包含og:locale:alternate元标记:

<html>
  <head>
    <meta property="og:locale:alternate" content="fr_FR" />
    <meta property="og:locale:alternate" content="es_ES" />
    ...
  </head>
  ...
</html>

1.根据URL参数中指定的语言呈现不同的OG标记:

<!-- for my.site/index?fb_locale=en_AU -->
<meta property="og:locale:alternate" content="en_AU" />
<meta property="og:locale:alternate" content="fr_FR" />
<meta property="og:locale" content="en_AU"/>
<meta property="og:title" content="G'day" />

检测Facebook参数并让它们多次抓取每个页面对我来说是多余的。相反,我切换了整个网站的区域设置,并根据当前的区域设置使用不同的OG部分:
apps/views/layouts/application.html.erb

<!DOCTYPE html>
<html lang="<%= I18n.locale %>">
  <head>
    <title><%= page_title %></title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <%= render "layouts/open_graph" %>
    <%= csrf_meta_tags %>
...
</html>

apps/views/layouts/_open_graph.en.html.erb

<meta property="og:url" content="<%= request.url %>" />
<meta property="og:type" content="website" />
<meta property="og:title" content="New World 5k" />
<meta property="og:description" content="A free, weekly walk/run open to all! 5km and 2Mi options available." />
<meta property="og:image" content="<%= image_url "/images/og_logo_en.png" %>" />

正如你在上面看到的,这也让我有不同的OG图像每种语言:

oalqel3c

oalqel3c2#

Facebookscraper没有跟随你的链接。如果你的主页使用重定向,这是Facebook将获得的数据。我强烈建议不要使用重定向,因为这对SEO不利。如果在你的网站代码中找不到scraper的结果,问题可能是服务器。我遇到过这样的问题。我的服务器习惯于设置cookie然后重新加载页面,这当然会混淆scraper。你应该使用php或类似的服务器端语言来检测你的用户位置并提供相应的数据。希望有帮助。

相关问题