【问题标题】:Disallow double or junk wildcard subdomains in htaccess mod rewrite for SEO禁止在 htaccess mod rewrite 中使用双重或垃圾通配符子域以进行 SEO
【发布时间】:2013-07-18 12:35:44
【问题描述】:

我的域上启用了通配符子域。我使用它是为了可以将 es.domain.com 之类的 URL 重写为 domain.com/page.php?lang=es 并向用户显示 page.php 的本地语言版本。

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

任何人都可以想出一个 RewriteRule 来检测超过 2 个字母的子域(www. 当然不包括在内)并且 301 将违规网址重定向到干净的基础 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

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

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

    关于你的最后一个问题:

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

    this

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

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

    Search Engine Journal

    Single Grain

    Moz

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

    Majestic

    Soolve

    Mozcast

    SERPMetrics Flux

    也有很大帮助。试着做一些阅读,看看你是否可以为你的链接决定一个好的方案。

    再次,抱歉,我真的不了解任何 Apache,但希望这会有所帮助!

    【讨论】:

    • 感谢 Drew - 有趣的阅读。我没有意识到通配符子域引起了如此糟糕的风暴!
    • 他们可以。他们不会总是这样,但如果有人像我们在其他网站管理员身上看到的那样使用您的网站,它肯定会降低您在 SERP 中的表现,并对您链接到的任何人产生负面影响。当然,我有点夸大了情况的严重性,链接只是众多指标之一。如果你有脑细胞和一点编程经验,我也会查看谷歌的原始研究论文,并尝试思考他们的算法从那时起的演变方式。 ;) infolab.stanford.edu/~backrub/google.html
    • 哇,看到这样的宝贝谷歌遗物真是太酷了!鉴于这些重定向的复杂问题,我实际上正在考虑现在放弃这个通配符,并想办法以编程方式只创建我需要的子域。它可能会融化我的头,但它只会让我认为一切都更清洁、更安全。再次感谢德鲁提供的信息。
    • 是的,我发誓这将我的能力和理解力提高了 10 倍,尽管我更像是一名程序员和网页设计师,而不是营销/搜索引擎优化人员。只要除了您之外没有人可以创建子域,这似乎是一个很好的解决方案。祝重新设计好运!
    【解决方案2】:

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

    【讨论】:

    • 是的,我也在想类似的事情。我认为在这种情况下我可能需要一个更强大的 rewriteRule 。我使用的仅重定向 2 个字母的子域。我会把它贴在上面,也许有人会建议一个更好的版本来捕获任何子域
    【解决方案3】:

    感谢所有人对此的信息和回复。我找到的解决方案是编写一个更通用的 .htaccess 规则来捕获 all 子域并将它们转发给 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)
    

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      相关资源
      最近更新 更多