【问题标题】:Correctly redirect bot requests to static version of a website正确地将机器人请求重定向到网站的静态版本
【发布时间】:2015-04-01 09:28:40
【问题描述】:

我在让我的网站被 Google 正确编入索引时遇到问题。

我的文件夹结构如下:

root
 - cms
 - www

example.com 指向 .htaccess 将所有请求路由到 /www 的根目录:

RewriteEngine on
RewriteRule ^(.*)$ /www/$1 [L]

前端

/www 内部的 Angular 前端通过 REST api 从 /cms 获取数据。到目前为止一切顺利。

我想要实现的是,机器人不会在我的 ajaxified /www 页面内爬行,而是在 /cms 内打印出与 /www 中的 URL 结构相对应的静态内容。

静态内容的网址:

/www/test1 -> 通过 REST 输出漂亮的内容

/cms/test1 -> 为爬虫输出纯文本内容

机器人重定向

我正在将来到 example.com/www 的机器人重定向到 /cms,如下所示:

RewriteCond %{HTTP_USER_AGENT} (googlebot|yahoo|bingbot|baiduspider) [NC]
RewriteRule ^(.*)$ http://www.example.com/cms/$1 [R=301,L]

网站地图

我还向 Google 注册了一个站点地图,其中包含以下内容:

http://www.example/test1
http://www.example/test2
and so on...

问题

这一切都很好,但是:Google 也在抓取 /cms 中的静态内容,而没有被我重定向到那里。我只希望这个静态子域通过重定向提供,而不是当谷歌的机器人本身搜索它时。有点“不允许”机器人在这里爬行 - 但另一方面我需要它来爬行它。我认为是第 22 条。

编辑:完成 .htaccess 文件

RewriteEngine On

# Sitemap
RewriteRule ^sitemap(-+([a-zA-Z0-9_-]+))?\.xml(\.gz)?$ /cms/sitemap$1.xml$2 [L]
RewriteRule ^sitemap(-+([a-zA-Z0-9_-]+))?\.html(\.gz)?$ /cms/sitemap$1.xml$2 [L]

# Redirect bots to static pages
RewriteCond %{HTTP_USER_AGENT} (googlebot|yahoo|bingbot|baiduspider) [NC]
RewriteRule ^(.*)$ http://www.example.com/cms/$1 [R=301,L]

# Angular HTML5 mode: Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index

# Angular HTML5 mode: Rewrite everything else to index.html to allow html5 state links
RewriteRule (.*) /www/index.html [L]

编辑 2

我已将此标签添加到 www 页面

<meta name="fragment" content="!"> 

让爬虫知道页面上使用了 AJAX。我正在使用@Croises 的重写建议,但对 Google 的 _escaped_fragment_ 重新请求作出反应。让我们等几天......

RewriteCond %{HTTP_USER_AGENT} (googlebot|yahoo|bingbot|baiduspider) [NC]
RewriteCond %{QUERY_STRING} _escaped_fragment_
RewriteCond %{REQUEST_URI} !^/cms/
RewriteRule ^(.*)$ cms/$1 [L]

【问题讨论】:

  • 您是否将RewriteCond %{HTTP_USER_AGENT} (googlebot... 放在RewriteRule ^(.*)$ /www/$1 [L] 之前?否则它永远不会被使用......(添加你所有的 .htaccess edit
  • @Croises 谢谢,我已经添加了整个文件。虽然我相信这个顺序是正确的。
  • 如果您为机器人将 301 重定向到 /cms,为什么不在您的站点地图中直接使用此链接?或者重写为/cms(而不是重定向)? (伪装?)
  • 如果我在站点地图中使用 /cms 链接,这将与最终用户 URL 发生冲突,例如www.example.com/test1 的意思是 www.example.com/www/test1,对吗?我还没有尝试过重写——不过听起来很有希望。隐藏是什么意思?
  • 对于我来说,如果名称是 sitmap-1.xml,您的站点地图重写有问题(尝试将 final [L] 更改为 [R] 以进行调试并查看最终链接)我想你尝试添加最终的.gz,但它是$3

标签: .htaccess redirect seo bots


【解决方案1】:

您不能重定向到静态页面,并要求他们在不抓取“真实”内容的情况下索引或引用最终页面。

你可以重写你的链接:

# Rewrite bots to static pages
RewriteCond %{HTTP_USER_AGENT} (googlebot|yahoo|bingbot|baiduspider) [NC]
RewriteCond %{REQUEST_URI} !^/cms/
RewriteRule ^(.*)$ cms/$1 [L]

只是没有R=301。就像您在没有重定向的情况下显示页面一样。
但要小心伪装 (Google and Cloaking)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多