1

我在我的域上启用了通配符子域。我使用它,以便我可以重写 url es.domain.com,并向domain.com/page.php?lang=es用户显示 page.php 的本地语言版本。

我看到的允许通配符子域的一个潜在问题是人们可以链接到www.es.domain.com甚至anything.they.like.domain.com可以显示网站的完美工作克隆。我认为这种“重复内容”对 SEO 不利。

任何人都可以想出一个 RewriteRule 来检测超过 2 个字母的子域(www. 当然不包括在内)并且 301 将违规的 url 重定向到干净的基础domain.com?当我考虑domain.co.uk已经看起来像是在子域上的域时,我遇到了麻烦。

附带说明一下,对于 URL 另一侧的 SEO 是否有类似的含义,以及查询参数?例如,domain.com?param=anything-I-like肯定会显示重复的页面。Google 如何处理这些内容?

更新:

这是我目前使用的重写规则。如果我想用 PHP 清理错误的 url,我需要修改它以捕获所有子域。我需要一般地执行此操作(不指定 domain.com),因为它将在 CMS 上使用。有什么建议么?

RewriteCond %{HTTP_HOST} ^([a-z]{2})\.
RewriteRule p/(.*) page.php?p=$1&lang=%1
4

3 回答 3

1

老实说,我无法解决您的实际问题,但我可以确认 any.I.want.domain.com 对 SEO 来说真的非常非常糟糕。我在该领域有两年的经验,我目前正在为我们的美国主要网站清理链接的项目。一些最大的问题来自您所描述的网站,其中大约有 100 个 *.domain.com。最大的问题是这个问题对信任流的影响,它基本上将链接的信任等级发送到 0,并告诉谷歌,不仅应该忽略这个链接,还应该调查它来自的域和链接是否存在潜在的垃圾邮件-尼斯。

至于你关于影响的最后一个问题:

查询参数可能与任何其他 URL 结构一样有用或有害,因此您也需要小心这些参数。如果您的网站有不同的语言版本,请确保有一个(特别是如果您没有完全独特的内容)作为 rel-canonical 页面。问题是,链接结构对搜索引擎很重要,但并不过分。这是众多指标之一。我会更关心子域。如果您碰巧能够使用一些小的、基本的关键字来帮助描述您的查询变量中的页面,它可能会有所帮助。但是,我强烈建议您的网站采用三层或四层结构,并在 URL 中得到支持。

看到这个

谷歌倾向于喜欢:domain.com/landingpage/category/subcategory?somevars=44

超过三个深度会使您变得太瘦,而小于该深度会使网站过于庞大而无法导航。如果您从未见过它,我相信它在这里有所介绍:http: //moz.com/beginners-guide-to-seo

搜索引擎杂志

单粒

莫兹

可以回答您的许多 SEO 问题和工具,例如:

雄伟

解决

莫兹卡斯特

SERPMetrics 通量

也能帮上大忙。试着做一点阅读,看看你是否可以为你的链接决定一个好的方案。

再次,对不起,我真的不知道任何 Apache,但希望这会有所帮助!

于 2013-07-18T13:07:20.490 回答
1

大概您有一个重写规则,该规则将前面的任何内容domain.com放入lang参数中。与其使用重写规则来执行重定向,不如让您的page.php脚本检查 lang 参数并针对无效值发出重定向。

于 2013-07-18T14:43:14.973 回答
1

感谢所有人提供的信息和对此的回复。我找到的解决方案是编写一个更通用的 .htaccess 规则来捕获所有子域并将它们转发给 PHP 进行处理。PHP 然后检查子域是否有效,如果无效,则 301 将访问者重定向到根域。这样,如果有人链接到 blah.blah.domain.com,搜索引擎应该将其视为仅指向 domain.com 的链接。我只在我的网站上使用语言子域,但它应该适用于您想要使用的任何子域。

这是 htaccess 重写:

正则表达式的工作原理是查找超过 3 个域名有效字符的最后一个实例,后跟一个点,然后是任何其他字符串。这个想法是它在 url 中找到域名,然后捕获它之前的所有内容。显然,这不适用于少于 3 个字符的域。

#All sub domains are redirected to p.php for processing:
RewriteCond %{HTTP_HOST} ^(.*)\.[a-z0-9\-]{3,}\..*
RewriteRule (.*) p.php?subdom=%1 [L]

这是PHP:

function redirect301($page='/'){
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location:{$page}");
    exit(); 
}

$subdom = $_REQUEST['subdomain']; //you should sanitise this if using this script!
$defaultLang = 'en';
$alternateLangs = "de|es"; //list of allowed subdomains
$alternateLangs = explode('|',$alternateLangs);

if(!empty($subdom) && $subdom!= 'www'){
    if( !in_array($subdom,$alternateLangs) ) redirect301(); //redirect to homepage
    $ISOlangCode = $subdom; // en,es,de,etc - capture code for use later
}
if($defaultLang && $ISOlangCode == $defaultLang) redirect301(); //disallow subdomain for default language (redirect to homepage)

希望这可以帮助某人。

于 2013-07-19T11:12:20.277 回答