我在让我的网站被Google正确索引时遇到了问题。
root
- cms
- www
example.com指向.htaccess将所有请求路由到/ www:
的根RewriteEngine on
RewriteRule ^(.*)$ /www/$1 [L]
Angular前端/ www通过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中的静态内容,而不是由我重定向到那里。我只希望通过重定向来提供这个静态子域,但是当谷歌的机器人自己搜索它时却不会。有点“禁止”机器人在这里爬行 - 但另一方面我需要它爬行它。我认为这是一个问题。
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]
我已将此标记添加到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]
答案 0 :(得分: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)。