OVH Community, votre nouvel espace communautaire.

SEO friendly pour applications web écrites avec AngularJS et hébergées sous Nginx


shirokoweb
30/11/2014, 15h12
Salut à tous,

angularjs est un outil fabuleux pour le développement d'applications WEB.
Or, les robots d'indexation n'exécutent pas le javascript (du moins pas tous, puisque Google bot s'y est mis)
Voici donc une astuce pour permettre la création d'un fichier statique des pages de votre site et ainsi améliorer votre référencement.

NE MARCHE QUE POUR NGINX !
pour les autres types de serveurs, veuillez vous référer à prerender.io

Code:
# REMPLACER example.com (server_name) par l'URL de votre site
# REMPLACER /chemin/vers/dossier/root par les bonnes valeurs
 
server {
    listen 80;
    server_name example.com;
 
    root   /path/to/your/root;
    index  index.html;
 
    location / {
        try_files $uri @prerender;
    }
 
    location @prerender {
        # Remplacez VOTRE_TOKEN et décommenter la ligne en dessous si vous voulez "cacher" les URL et voir les stats de crawling
        #proxy_set_header X-Prerender-Token VOTRE_TOKEN;
        
        set $prerender 0;
        if ($http_user_agent ~* "baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot") {
            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)") {
            set $prerender 0;
        }
        
        #résolution utilisant le serveur DNS de Google pour forcer la résolution DNS et éviter la cachage d'IPs
        resolver 8.8.8.8;
 
        if ($prerender = 1) {
            
            #Paramétrer le prérendu en tant que variable force la résolution DNS puisque Nginx cache les IPs et fonctionne mal avec le load balancing
            set $prerender "service.prerender.io";
            rewrite .* /$scheme://$host$request_uri? break;
            proxy_pass http://$prerender;
        }
        if ($prerender = 0) {
            rewrite .* /index.html break;
        }
    }
}