是否可以使用htaccess中的此模式的规范URL:/ a / * / id / uniqueid?

时间:2012-09-24 23:31:02

标签: .htaccess url seo duplicates canonical-link

一个大问题是我不是程序员......所以我需要用自己的能力来解决这个问题......我会很乐意帮助你!

我在Google索引中遇到了大量重复网址的问题,并且有强烈迹象表明它会导致搜索引擎优化问题。

我在网站上没有重复的链接,但是因为它曾经设置过,对于某些页面,系统允许URL中的各种变化。只要它具有特定的文章ID,相同的内容将在无限数量的URL下显示。

我猜Google指数中的重复项目已经持续了很长时间,并且是由于链接到我的其他网站的链接出错了。问题是系统已经接受了变化。

以下是Google索引中存在的变体示例:

  • site.com/a/Cow_Cat/id/5272
  • site.com/a/cow_cat/id/5272
  • site.com/a/cow...cat/id/5272
  • site.com/a/cowcat/id/5272
  • site.com/a/bird/id/5272

带有大小写混合大小写的第一个网址是在网站范围内使用的网址,现在我不得不忍受它,对所有小写进行更改需要很长时间。我无法通过htaccess进行手动操作,因为它总共有300,000篇文章。我相信有成千上万的人有一个或多个重复。

我的问题是:

是否可以在htaccess中为规范网址创建规则,以便将上述网址作为一个以及300.000的其余部分进行处理?

我有没有办法说所有网址都有

/ A / * / ID / UNIQUEID

应该被视为一个=仅基于唯一ID而不考虑用“*”表示的文本?

我希望可以说上面这样的某种模式只能通过最后一个独特的细分来区分。

如果在htaccess中无法实现,如何在每个页面上使用link rel =“canonical”来完成,代码是否可以包含通配符?

我应该补充一点,大多数重复项是由于传入链接是小写的,网站本身正在使用混合。虽然网站本身基本上总是使用大写/小写的混合,但是仅使用小写分配规范URL是否可以?

如果可以的话,我会非常乐意接受如何帮助!!!!

纳斯


你好迈克尔!我不是专家,但我认为这可以做到:

1)我的问题是网址有混合情况,我现在无法改变。

2)如果searchengines没问题,那么我可以将规范URL与实际URL相同,但差别在于全部小写,这将解决约90%的重复。我将使用这个URL:site.com/a/Cow_Cat/id/5272,这将是规范:site.com/a/cow_cat/id/5272。据我所知,这将是一个很好的SEO ......或者......?

我的想法是不要更改地址浏览器地址栏(即使用301重定向),而只是告诉搜索引擎哪些URL是重复的,据我所知,可以通过在htaccess中定义规范URL来完成(作为一种模式 - 我希望)或作为每个页面上的标签。

3)如果有可能找到一个通配符解决方案......我不确定这是否可行,但这意味着可以不指定特定的规范URL而是指定“组模式” “,即”请搜索引擎,查看具有此模式的所有网址 - 最后具有唯一标识符 - 就好像它们是同一个网址,您SE,决定您喜欢哪一个“:/ a / * / id / UNIQUEID

那会有用吗?它只能在htaccess中工作,如果规范URL可以定义为一个组,其中组被定义为具有已定义部分作为唯一ID的模式。

为每个页面添加标记是否可以说“所有包含此唯一ID的URL应该被视为相同”?如果这样可行,它看起来与此类似

link rel =“canonical”/ a / * / id / 5272

我不知道这种带有通配符的语法是否存在,但它会很好:)

1 个答案:

答案 0 :(得分:0)

我的建议是use 301 redirects,网址重写。请您的网站管理员将其放在您的apache配置或虚拟主机配置中:

RewriteMap  lc int:tolower

然后在.htaccess文件中,您可以使用地图${lc:$1}将匹配项转换为小写。这里,$1部分是匹配(RewriteRule中正则表达式中括号的反向引用),${lc: }部分就是您应用之前​​设置的lc(小写)函数的方式。以下是您在.htaccess文件中可能需要的示例:

RewriteCond %{REQUEST_URI} [A-Z]      #this matches a url with any uppercase characters
RewriteRule (.*) /${lc:$1} [L,R=301]  #this makes it lowercase

至于匹配ID,假设您的示例意味着“始终以ID结尾”,您可以使用正则表达式:

^(.+/)(\d+))$

第一个匹配(括号)获取所有内容,包括ID之前的正斜杠,第二个部分获取ID。然后我们可以使用它指向一个特定的URL(如规范,但有301)。

如果你只是想使用规范标签,那么你必须说出你在使用代码的方式,但我在PHP中使用了一个例子(例如,不向数百个单独的页面添加标签)将是:

  if ($_SERVER["REDIRECT_URL"] != "") {
    $canonicalUrl = $_SERVER["SERVER_NAME"] . $_SERVER["REDIRECT_URL"];
  } else if ($_SERVER["REQUEST_URI"] != "") {
    $canonicalUrl = $_SERVER["SERVER_NAME"] . preg_replace('/^([^?]+)\?.*$/', "$1", $_SERVER['REQUEST_URI']);
  }

此处,如果可用,则使用重定向URL;如果不可用,则使用请求uri。此代码剥离了查询字符串(http://www.mysite.com/a/blah/12345/ ?something = true 中的粗体位)。当然,您可以通过使用正则表达式来添加此代码以指定自定义路径,而不仅仅是取消查询字符串。