Google抓取工具未看到预呈现的Angular生成的页面

时间:2017-03-14 15:38:54

标签: .htaccess google-crawlers prerender google-search-console

尝试在不使用HashBang #!的情况下让Google完全抓取我的Angular应用生成页面。所以我用:

生成pushstate URL
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix('!');

已添加到应用的配置中,

<base href="/hockey-att/">
<meta name="fragment" content="!">

到html标题。

我在.htaccess

中有这个
RewriteEngine on

RewriteBase /1/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ #/$1 [L]

<IfModule mod_headers.c>
    RequestHeader set X-Prerender-Token "prerendertoken"
</IfModule>

<IfModule mod_rewrite.c>
    <IfModule mod_proxy_http.c>
        RewriteEngine On RewriteCond %{HTTP_USER_AGENT} baiduspider|googlebot|googlebot-mobile|bingbot|facebookexternalhit|twitterbot|rogerbot|linkedinbot|embedly|quora\ link\ preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator [NC,OR]
        RewriteCond %{QUERY_STRING} _escaped_fragment_=(\%2F|/)_(._) 

        # Only proxy the request to Prerender if it's a request for HTML
        RewriteRule ^(?!.*?(\.js|\.css|\.xml|\.less|\.png|\.jpg|\.jpeg|\.gif|\.pdf|\.doc|\.txt|\.ico|\.rss|\.zip|\.mp3|\.rar|\.exe|\.wmv|\.doc|\.avi|\.ppt|\.mpg|\.mpeg|\.tif|\.wav|\.mov|\.psd|\.ai|\.xls|\.mp4|\.m4a|\.swf|\.dat|\.dmg|\.iso|\.flv|\.m4v|\.torrent|\.ttf|\.woff))(.*) http://service.prerender.io/http://%{HTTP_HOST}/$2 [P,L]
    </IfModule>
</IfModule>

我将子文件夹1中的应用程序和.htaccess中的RequestHeader set X-Prerender-Token部分设置为prerender.io令牌。

使用新网址的应用程序运行正常,并使用prerender.io呈现页面。页面已预呈现,可通过http://service.prerender.io/ {{http://myurl.com/page}}

无障碍地访问

我的问题是,Google抓取工具无法访问预呈现的网页。通过搜索控制台的抓取功能尝试使用和不使用?_escaped_fragment_=添加到已获取的网址的Google功能。但它仍然在其源代码中获得带有角度指令的原始页面。

我认为我在.htaccess中遗漏了一些东西,但我不知道是什么。

将ui-router用于角度状态。

1 个答案:

答案 0 :(得分:0)

您似乎将所有请求重定向到#URL:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ #/$1 [L]

这是对的吗?如果是这样,该代码阻止在每个请求上运行Prerender配置。

如果您使用的是html5推送状态,是否可以删除该部分,因为您不需要重定向到#URL。