搜索引擎爬行器被重定向到具有多语言网站的英文页面(从而避免其他语言页面

我有以下多语言URL结构:

example.com/article123            # english
example.com/fr/article123         # french
example.com/de/article123         # german
根据浏览器语言($_SERVER['HTTP_ACCEPT_LANGUAGE']),自动将302重定向到相关语言。这对用户体验有好处,因为大多数用户不必手动点击语言切换器。根据我的统计,它工作得很好。

问题:在使用Ahrefs网站审计工具时(搜索引擎爬虫、Googlebot等也是如此),我看到他们的爬虫被重定向为302-因此从未访问过法语网站。

实际上,当爬虫程序(可能设置为英语)访问example.com/fr/article123时,它将被重定向到example.com/article123。我想这些爬虫不会考虑Cookie,所以对所有页面都是一样的。

我应该使用什么技术解决方案来避免多语言网站被搜索引擎机器人错误地爬网?

TL;DR:我如何才能根据浏览器语言为普通用户触发重定向,并且不重定向机器人(如负责共享...&q;显示的卡片的Googlebot、Facebook或Twitter爬行器)?

这是我使用的:

function lang_redirect() {  
    if (isset($_COOKIE['lang_redirect']))  // already redirected in the last 24 hours, don't do it again
        return;
    global $lang, $requesturi;
    $browserlang = getlang($_SERVER['HTTP_ACCEPT_LANGUAGE']);   // fr, de, en...
    $link = lang_translation_link($browserlang);
    if (($browserlang != $lang) && ($link != ''))
        header("Location: " . $link);      // redirect now!
    header("Set-Cookie: lang_redirect=1; Max-Age=86400; Path=/; HttpOnly; SameSite=Lax");  
}

注意:重定向只发生一次(通过设置Cookie),因为浏览器设置为德语的访问者可能想要访问英文网站,而不是每次都被重定向到德语网站。示例:

example.com/article123          # browser set to german
=> example.com/de/article123    # automatic redirection, setting a cookie to not redirect anymore
example.com/article123          # user returns on english website
=> no redirection here because there has already been a first redirection

解决方案

您需要删除基于$_SERVER['HTTP_ACCEPT_LANGUAGE']自动重定向的系统。这会使搜索引擎无法抓取您的网站,并且不利于用户体验。

您可以在页面上突出显示如下通知,而不是自动重定向:

您的浏览器显示您更喜欢英语。是否要立即访问该页的英文版本?

[切换到英文]

有关详细信息,请参阅How should I structure my URLs for both SEO and localization?,其中有一整节介绍了为什么使用Accept-Language-Header重定向会终止SEO。

相关文章