Htaccess 和 url 用于多语言站点

Htaccess and url for multilingual site

我已准备好为我的多语言网站使用子目录格式。 我的第一个问题是: 为了SEO,我要翻译url中的页面名称还是没用? 示例:

- Same filename
site.com/fr/login
site.com/en/login

- Different filename
site.com/fr/connexion
site.com/en/login

然后,当用户打开 site.com 时:我是否应该根据用户的 IP 将他重定向到 site.com/ensite.com/fr?或者我是否要设置一个默认本地,并让我的 url 像 site.com/pagesite.com/fr/page

最后,从用户当前 URL 中获取本地的最佳方法是什么? 解析 url 以获取 /fr 或 /en,或在 url 中添加一个 GET 参数 with lang=fr(用 htaccess 隐藏)

谢谢 :)

首先想想人类。 URL 翻译对法国用户重要吗?有些人可能会觉得在URL中得到翻译的单词很好。来自其他地区的用户可能不这么认为。搜索引擎会考虑用户行为因素。如果您的解决方案对用户更方便,则 SEO 因素会更高。

如果用户能得到预期的语言版本就好了。如果某个站点通过 IP、HTTP headers、cookie 等建议语言版本,则可以帮助他们。有些人可能更喜欢另一种语言,有些人可能正在旅行。所以让他们手动选择语言版本仍然很重要。

如有疑问,请阅读manuals并分析竞争对手的网站。

我通常在大多数网站上展示他们给 url 像网站。com/en 和网站。com/fr 正如你提到的,但你想如何向用户展示网站。我更喜欢设为默认站点。com/en 并让用户选择 select 他的语言。

如果您仍然感到困惑,请参考下面的内容link它会很有用。

See Refferal Link Here

你应该翻译路径吗?

如果可能,一定要 - 因为这将帮助使用该语言的用户感觉像 "first class citizens"。登录路径可能不会对 SEO 产生太大影响,但在内容页面上翻译 URLs 可能会帮助它们更容易被发现。

您可以阅读 Google's recommendations on multi-regional and multilingual sites,其中说明它是 "fine to translate words in the URL"。

你应该根据 IP 重定向吗?

这可以帮助初次使用的用户,但有几点需要牢记:

  • 这有多准确?例如。如果我说英语但我访问法国然后查看您的网站 - 我会得到法语。如果您的目标市场是携带手机的环球旅行者,那么它可能不是最佳选择。比如看Accept-Language,有没有更好的?

  • 每个请求的 IP 地址地理定位是否会给您的服务器带来任何性能问题?或者对外部地理编码服务进行过多调用?确保执行容量规划,并减少您已经知道区域设置的呼叫(例如,来自 cookie,或用户明确说明他们的偏好。

  • 即使您猜测了首选语言环境,也始终允许明确的用户首选项覆盖它。没有什么比在页面之间移动并让网站决定它更了解您所理解的语言更令人沮丧的了:-)

  • 只要您可以轻松地在站点之间切换,就不需要特定的目标网页。如果您不确定是否应该重定向用户,弹出一个横幅并没有坏处(例如,amazon.com 将向英国用户显示一个横幅,让他们可以选择切换站点 - 但不能决定对于他们)

你应该如何构建你的 URLs?

将语言放在 URL 的某处(作为子域或文件夹)可能最适合 SEO。别忘了更新您的站点地图,以向爬虫表明存在不同语言的替代内容页面。

作为前提,我假设您没有使用框架/库。此外,我从来没有仅使用 .htaccess (作为您的问题请求的标题)解决过类似的问题,因此不知道是否可以这样做。不过,以下指南可能会对您有所帮助。

你的第一个问题

一般来说,网页的文件名和路径对其排名有影响。此外,使用本地语言的页面名称和路径可能有助于您的用户记住最重要的 URL,即使不为它们添加书签也是如此。

尽管如此,我永远不会翻译属于网络 应用程序 的页面的页面名称或目录(相对于 信息性 宣传 页)。

您提到的登录页面就是一个很好的例子。我几乎可以肯定您不希望因为网站登录页面上的内容而被发现您的网站。实际上,有许多网站根本不将登录页面和其他 应用程序 页面编入索引。

相反,在 SEO 术语中,将您的精力投入到您的促销和信息页面中。提供有价值的内容,解释您或您的网站的特别之处,并尽您所能使这些页面得到正确的索引。恕我直言,静态 HTML 页面是这样做的最佳选择。

此外,如果您翻译属于您的实际应用程序的页面名称,您将 运行 陷入巨大的麻烦。例如,成功登录后,您的应用程序可能会将用户转移到他的个人仪表板,该仪表板可能基于另一个 HTML 模板/页面。如果您将该页面名称翻译成不同的语言,那么您的应用程序将必须注意将用户带到正确的版本。基本上,这意味着您需要与要支持的语言一样多的应用程序版本。当然,有一些技巧可以让生活更轻松,但这将是一种持续的痛苦,绝对不值得付出努力。

总而言之:创建静态页面以显示您的 USP(独特的卖家地位)并为用户提供有价值的内容(例如复杂的教程等)。翻译这些页面,包括名称和路径,并以各种可能的方式对它们进行搜索引擎优化。但是对于实际应用来说,优化它的页面是没有意义的,甚至会适得其反。

你的第二个问题

出于几个原因,我永远不会使用基于 IP 的重定向。

首先,有很多客户不在自己的祖国。例如,您是否真的希望将所有以英语为母语的人重定向到您的匈牙利语页面,因为他们目前正在匈牙利出差?

其次,如今越来越多的用户出于不同原因使用 VPN,因此常常隐藏他们当前所在的国家/地区。

第三,哪个IP地址属于哪个供应商或国家是高度不稳定的;您将不得不不断更新数据库才能跟上。

原因还有很多,但我想你已经明白了。

幸运的是,您的问题有一个解决方案(但请参阅下面的 "Final remark"):每个浏览器在从服务器获取页面时,都会告诉服务器首选和接受的语言。例如,Apache 可以直接在 RewriteRule 语句中使用该信息并将用户重定向到正确的页面。

如果您无法更改您的服务器配置,那么您可以在您的 CGI 程序中评估相应的 header。

在进行研究时,寻找 Accept-Language HTTP 1.1 header。一个好的起点可能是 here.

你的第三个问题

你最终在第三个问题中混淆了两个不同的东西。区域设置与语言不同。一方面,您要求“...从...获取本地”,而另一方面,您说“...lang=fr...”,从而给人留下想要获得的印象语言。

如果你想获取语言:请参阅我对你第二个问题的回答,或者从当前路径解析语言(正如你已经建议的那样)。

如果要获取locale,事情就比较复杂了。唯一合理的自动方法是从语言派生区域设置,但这通常会失败。例如,我在做研究时通常更喜欢英语,但另一方面,我位于德国,因此希望日期和时间采用我习惯的格式,因此从我的首选语言导出我想要的语言环境将失败.

不幸的是,没有 HTTP header 可以告诉服务器用户喜欢哪个语言环境。作为起点,this article 可能会对您有所帮助。

请参阅关于如何解决此问题的最后评论(下一节)。

最后的评论

作为艺术上面链接的 cle 已经指出:让用户满意的唯一可靠方法是让他在您的应用程序中选择他的语言、地区和时区。您可以将用户的选择存储在 cookie 中或 back-end 数据库中;各有优缺点。

我通常在我的项目中使用所有方法的组合(HTTP headers、cookies、数据库)。