Prerender.io 问题 - 错过'301'一切,然后 404 - Nginx + AngularJS



我正在努力使我的seo更友好地对我的aglularjs电子商务应用程序进行更友好,因此我正在努力使prerender.io启动并在应用程序上运行。

我用于托管/服务文件的设置与 nginx 来自docker容器,托管在AWS上。

到目前为止我:

  1. 根据此官方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;

  1. 添加了fragment标题标签

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

  2. 设置特殊$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;

希望对其他人的帮助,谢谢!

最新更新