我正在努力使我的seo更友好地对我的aglularjs电子商务应用程序进行更友好,因此我正在努力使prerender.io启动并在应用程序上运行。
我用于托管/服务文件的设置与 nginx 来自docker容器,托管在AWS上。
到目前为止我:
-
根据此官方nginx.conf更改了我的nginx.conf- prerender docs
推荐server { listen 9001; server_name localhost; root /app; index index.html; location /store { proxy_set_header X-Prerender-Token RIDE(H9j9jdeRANDOMtoken; set $prerender 0; if ($http_user_agent ~* "baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator") { set $prerender 1; } if ($args ~ "_escaped_fragment_") { set $prerender 1; } if ($http_user_agent ~ "Prerender") { set $prerender 0; } if ($uri ~* ".(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|svg|eot)") { set $prerender 0; } #resolve using Google's DNS server to force DNS resolution and prevent caching of IPs resolver 8.8.8.8; if ($prerender = 1) { #setting prerender as a variable forces DNS resolution since nginx caches IPs and doesnt play well with load balancing set $prerender "service.prerender.io"; rewrite .* /$scheme://$host$request_uri? break; proxy_pass http://$prerender; } expires -1; add_header Pragma "no-cache"; add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"; try_files $uri$args $uri /index.html =404; } }
更新:
根据prerender.io团队成员的建议,我将重定向置于https
而不是http
中,这很可能是该301期的原因。
重写此行以修复:rewrite .* /https://$host$request_uri? break;
-
添加了
fragment
标题标签<meta name="fragment" content="!">
-
设置特殊
$locationProvider
变量$locationProvider.html5Mode(true); $locationProvider.hashPrefix('!');
当我在Facebook上共享页面以测试爬网时,它至少在Prerender仪表板上注册。(一个好兆头,因为至少它的命中prerender.io,因此$prerender
在NGINX中设置为1,正确的Prerender代币已设置(。
但是我得到404。
有人知道我在做什么错和/或我应该在哪里集中调试工作吗?
?预先感谢!
好的,所以我必须在设置中取出此支票的$http_user_agent
Prerender
,这导致它因某种原因而破裂。
所以我删除了以下几行:
if ($http_user_agent ~ "Prerender") {
set $prerender 0;
}
然后...繁荣!解决问题。
注意:
我遇到的原始问题是,我在每次缓存尝试中都收到301 Miss
。这是因为我的SSL证书(和/或DNS(拒绝重新路由尝试到http
页面。仅允许https
。因此,要修复我只是将https
进行了硬编码为重写规则(替换$scheme
(。
rewrite .* /https://$host$request_uri? break;
希望对其他人的帮助,谢谢!