---
layout: post
title: '关于 OpooPress 网站两种语言的 SEO 问题'
date: '2013-09-14 13:15'
comments: true
published: false
keywords: "多语言, SEO, OpooPress, rel-alternate-hreflang-x"
description: "本文总结与记录一下网站 opoopress.com 的两个语言之间的处理问题,以及在提高用户体验和 SEO 方面努力。"
categories: ["website"]
tags: ["OpooPress", "SEO"]
url: '/international-seo-for-opoopress.com/'
---
为了使得 OpooPress 有更广的受众面,也为了展示该博客的一些特性(比如子目录),所以其网站准备了两种语言的版本,中文站在 ,英文站在 。
之前为了获得更好的用户体验,在 Apache rewrite 规则中加入了如下规则(*注意,现在觉得这种配置可能是错误的*):
# root
RewriteCond %{HTTP:Accept-Language} ^zh [NC]
RewriteRule ^/$ /zh/ [L,R=301]
RewriteRule ^/$ /en/ [L,R=301]
# zh
RewriteCond %{HTTP:Accept-Language} ^zh [NC]
RewriteCond %{REQUEST_URI} !^/zh/
RewriteCond %{REQUEST_URI} !^/en/
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{REQUEST_URI} !^/error/
RewriteCond /var/www/html/%{REQUEST_FILENAME} !-f
RewriteCond /var/www/html/%{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)$ /zh/$1 [L,R=301]
# others
RewriteCond %{REQUEST_URI} !^/zh/
RewriteCond %{REQUEST_URI} !^/en/
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{REQUEST_URI} !^/error/
RewriteCond /var/www/html/%{REQUEST_FILENAME} !-f
RewriteCond /var/www/html/%{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)$ /en/$1 [L,R=301]
即根据用户浏览器语言进行判断,如果浏览器语言(HTTP 请求头 `Accept-Language`)是 `zh` 开头,则跳转到 `/zh/` 下对应页面,其它语言则跳转到 `/en/` 下对应页面。
直到最近查看 Apache 访问日志,发现基本上搜索引擎机器人发送的 HTTP 请求都不带有适当的 `Accept-Language` 参数,所以机器人基本上都只能访问英文版的网站,这可能会是一个问题。
我对“多语言站点应该使用子域名还是子目录”这个话题进行了搜索,结果发现了 Google 网站站长工具中的这篇文章——[多区域和多语言网站](https://support.google.com/webmasters/answer/182192?hl=zh-Hans),其中一段指出:
> 避免根据推测的用户语言使用自动重定向功能。这些重定向可能会阻止用户(和搜索引擎)浏览您网站的所有版本。
根据该指南,我使用 [rel="alternate" hreflang="x"](https://support.google.com/webmasters/answer/189077) 和 [站点地图:rel="alternate" hreflang="x"](https://support.google.com/webmasters/answer/2620865) 重新对网站进行 SEO,并修改原来的 Apache rewrite 规则。
**rel="alternate" hreflang="x"**
对每个页面的头部加上类似以下的一段
这里指定英文页面作为不针对任何语言或语言区域的默认页。URL 中 xxx 在每个页面都是不同的。
**站点地图:rel="alternate" hreflang="x"**
可以使用站点地图来向 Google 提供 rel="alternate" hreflang="x"。见 [sitemap.xml](http://www.opoopress.com/sitemap.xml)。
```xml
http://www.opoopress.com/zh/
http://www.opoopress.com/en/
```
**Apache rewrite 规则**
# root
RewriteRule ^/$ /zh/ [L,R=301]
# others
RewriteCond %{REQUEST_URI} !^/zh/
RewriteCond %{REQUEST_URI} !^/en/
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{REQUEST_URI} !^/error/
RewriteCond /var/www/html/%{REQUEST_FILENAME} !-f
RewriteCond /var/www/html/%{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)$ /zh/$1 [L,R=301]
对于访问根 `/` 和其它不存在的路径是,跳转到 `/zh` 下对应的路径。
总体来说:对于搜索用户,如果没有适合用户语言(非中文和英文)的页面,则默认显示英文页面;而对于用户直接敲入网址进入网站,如果没有选择合适的语言则默认跳转至中文页面。
这似乎挺矛盾!暂时还没想好,是不是应该统一。