4

一个大问题是我不是程序员……!所以我需要用我自己能力范围内的方法来解决这个问题……我很乐意得到帮助!

我在 Google 索引中有很多重复的 URL 有问题,并且有强烈的迹象表明它会导致 SEO 问题。

我在网站本身上没有重复的链接,但是因为它曾经设置过,对于某些页面,系统允许 URL 中的各种变化。只要有特定的article-id,相同的内容就会在无数个URL下呈现。

我猜谷歌索引中的重复项长期以来一直在增长,这是由于链接到我的其他站点的链接出错。问题是系统已经接受了这些变化。

以下是 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

第一个混合大小写的 URL 是全站点使用的 URL,现在我必须忍受它,更改所有小写字母需要很长时间。我无法通过 htaccess 进行手动操作,因为它总共有 300.000 篇文章。我相信有 10 的数千个有一个或多个重复项。

我的问题是这样的:

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

我即,有没有办法说所有的网址都有

/a/*/id/唯一标识

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

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

如果在htaccess中不可能,如何在每个页面上使用链接rel =“canonical”来完成,代码可以包含通配符吗?

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

如果这是可能的,我会很高兴得到如何做的帮助!!!!

乔纳斯


嗨迈克尔!我不是专家,但我认为可以这样做:

1) 我的问题是 URL 大小写不一,我现在无法更改。

2) 如果搜索引擎没问题,我可以让规范 URL 与实际 URL 相同,不同之处在于它都是小写的,这样可以解决大约 90% 的重复。这将是使用的 URL:site.com/a/Cow_Cat/id/5272,这将是规范的:site.com/a/cow_cat/id/5272。据我了解,这将是一个很好的搜索引擎优化......或......?

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

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

那行得通吗?如果可以将规范 URL 定义为一个组,其中该组被定义为具有定义部分作为唯一 id 的模式,则它只会在 htaccess 中工作。

是否可以在为每个页面添加标签时说“所有包含此唯一 ID 的 URL 都应被同等对待”?如果那行得通,它看起来会类似于这个

链接 rel="canonical" /a/*/id/5272

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

4

1 回答 1

1

我的建议是使用 301 重定向和 URL 重写。请您的网站管理员将其放置在您的 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中粗体位)。当然,您可以通过使用正则表达式来添加到此代码以指定自定义路径,而不仅仅是取消查询字符串。

于 2012-09-26T08:18:31.457 回答