jeudi 23 octobre 2014

Des experts américains publient une nouvelle liste de critères

SEO Local : des experts américains publient une nouvelle liste de critères

SEO Local : en 2014Des experts américains ont listé les différents critères qu'ils pensent être utilisés par Google en matière de référencement local. Les SEO français peuvent en tirer quelques conclusions.
Chaque année, depuis sept ans, David Mihm, pointure du SEO Local outre-Atlantique publie la liste et le poids des critères utilisés par Google en matière de référencement local. Sa méthodologie consiste à sonder plusieurs dizaines d'experts du secteur. L'étude a une certaine crédibilité aux Etats-Unis, mais elle a aussi une limite : elle résulte d'observations réalisées aux US, un pays aux pratiques différentes en matière de SEO Local, et qui a bénéficié de mises à jour qui n'ont pas encore été déployées en France, comme Pigeon ou le Carrousel. Elle a de toutes façon le mérite de montrer ce qui peut influencer le moteur de Google, du moins aux eux d'experts...
Cette étude conclut que les facteurs les plus importants en matière de SEO local sont les signaux "on page", comme la présence du trio nom-adresse-téléphone, des mots clés dans les titles, ou encore l'autorité du domaine. Viennent ensuite, par ordre d'importance, les signaux émis par les liens : ancre des liens entrants, autorité des domaines faisant les liens, etc. Les adresses indiquées aux services type Pages Jaunes et autres annuaires et agrégateurs doivent aussi être les mêmes. Ces "citations", qui ne sont pas toujours accompagnées de backlinks, doivent également être nombreuses : le volume et la cohérence de ces citations constituent la troisième famille de critères la plus importante selon l'étude de David Mihm (voir ci-dessous). 
Enfin, la quatrième famille de critères la plus importante selon les experts américains est celle des signaux émis par la fiche Google Adresses (service désormais regroupé au sein de "Google My Business"), comme la catégorie dans laquelle est rangée l'entreprise, les mots clés qui la définissent, ou sa proximité.

seo local v2

Google pénalise les lenteurs d’affichage

Référencement naturel : Google pénalise les lenteurs d’affichage

Voici 10 conseils techniques pour accélérer l’affichage des pages-web et éviter les pénalités Google pour lenteurs d’affichage.
Il est erroné de croire que l’Internet haut débit est véritablement généralisé en France. Un quart de la population est limité à des abonnements ADSL un mégabit (128ko/s). Dans les entreprises, les connexions sont partagées : à certains horaires, chaque salarié ne dispose parfois que d’un débit médiocre. L’Internet mobile haut débit se développe mais la vitesse reste très variable selon la localisation géographique. Enfin, l’affichage des sites web est ralenti par les nombreux programmes connectés installés par les internautes : modules de mise à jour, logiciels de discussion comme skype, plugins des navigateurs, virus, trojans, antivirus…
Pour un e-commerçant, s’adapter aux internautes moyen et bas débit est un facteur-clé de réussite. De façon directe, c’est pouvoir vendre à des clients supplémentaires particulièrement délaissés par la concurrence. Indirectement, c’est aussi éventuellement pouvoir bénéficier de meilleures positions Google (car les fortes lenteurs d’affichage qui font fuir les internautes pourraient êtrepénalisées par Google).
1/ Faire appel aux librairies Javascript publiques hébergées par les CDN
Technologiquement, la plupart des sites internet (créés par des professionnels) utilisent les mêmes librairies javascript : jQuery, Prototype, Script.aculo.us, MooTools… 
Il est possible de déléguer l’hébergement de ces librairies populaires à des serveurs publics gratuits dont c’est la vocation. Nommés “Content Delivery Network” (CDN en abrégé) , les 2 acteurs majeurs de l’hébergement gratuit de librairies javascript sont Google et CloudFare
Les bénéfices sont nombreux pour les entreprises qui utilisent les CDN :   
  • les CDN disposent de connexions très haut débit pour distribuer les librairies et s’adaptent au pays de l’internaute pour accélérer la vitesse (via des serveurs de proximité),
  • les librairies des CDN sont parfois déjà en cache dans les navigateurs-web des internautes (on gagne alors jusqu’à 1 seconde d’affichage rien que pour jQuery par exemple),
  • les librairies des CDN sont doublement compressées (au niveau algorithmique et au niveau protocole http en GZIP),
  • ne pas avoir à fournir les librairies javascript (relativement imposantes) soulagent les serveurs des boutiques en ligne : ils sont plus à même de délivrer rapidement les autres ressources d’affichage (pages html, images, feuilles de style css…).
2/ Regrouper les feuilles de style CSS en 1 seul fichier
Pour les serveurs d’hébergement (Apache, Microsoft IIS, Nginx…), chaque demande-fichier de la part des navigateurs-web mobilise des ressources techniques : tunnel http, thread, mémoire, écriture de logs, compression à la volée éventuelle… Dans la mesure du possible, il est préférable pour l’affichage que les éditeurs de sites internet essayent de concaténer les différentes feuilles de style CSS en 1 seul fichier unique. Pour préserver la simplicité du travail des techniciens en charge de la maintenance, le regroupage pourra être déployé uniquement sur le serveur de production.
Quant aux scripts Javascript (hors librairies), le même travail de concaténation est à prévoir pour améliorer les performances d’affichage.
3/ Limiter l’utilisation des langages de programmation server-side
Les langages de programmation server-side (php, .net, asp, servlet java, jsp, coldfusion, perl, ruby, python…) permettent de créer des applications-web complexes. Mais ils sont “gourmands” en ressources-mémoires pour les serveurs. Il convient de limiter leurs utilisations au strict nécessaire.
Hors besoins techniques rares, les langages server-side ne doivent absolument pas être utilisés pour délivrer les éléments d’affichage habituellement “statiques” tels que les images, les feuilles de style CSS, les scripts Javascript... 
L’erreur est relativement fréquente et la vérification n’est pas aisée : il est nécessaire de contrôler l’ensemble des possibilités de paramétrages du serveur (htaccess, vhost et httpd pour Apache par exemple). Contrôler les entêtes http (à la recherche de signature de langage server-side) peut aussi être une piste de détection.
Une vigilance maximale sera à appliquer pour les programmes gratuits téléchargeables sur Internet (cms, blogs, forums, logiciels e-commerce...) : leurs programmes d’installation n’hésitent pas à modifier les configurations-serveurs pour leurs besoins qui ne sont pas orientés vers la performance en général.
4/ Créer une version statique de la page d’accueil dynamique
Pour une entreprise à forte notoriété, la homepage du site internet concentre (à elle seule) jusqu’à 40% du travail effectué par le serveur d’hébergement. Il suffit donc de dupliquer le contenu de la page d’accueil dynamique (délivrée par php, .net, coldfusion…) pour créer une page d'accueil non-dynamique (dite “statique”) performante pour l’affichage et soulageante pour le serveur.
Sur le plan technique, une conséquence majeure est à prendre en compte : les pages statiques ne gèrent pas les sessions. Si l’utilisation de sessions est absolument nécessaire pour la homepage, on pourra tout de même déléguer cette fonctionnalité à une page dynamique (sans contenu) appelée en Ajax de manière désynchronisée. En alternative simple, on pourra aussi envisager de fonctionner avec des cookies-javascript en attendant que l’internaute navigue sur une page dynamique.
5/ Intensifier le cache-navigateur des internautes
Tous les navigateurs-web (IE, Firefox, Chrome, Safari, Opéra…) pratiquent la mise en cache des documents téléchargés : pages html, fichier pdf, images, animations flash, feuilles de style…  Cette mise en cache permet d’améliorer le confort des internautes qui fréquentent à plusieurs reprises le même site web : à la deuxième visite, un site internet s’affiche plus rapidement qu’à la première visite.
Pour les webmasters, il est possible d’intervenir techniquement pour intensifier la mise en cache (qui peut aller de quelques minutes à plusieurs années). Dans le concret, il faut renseigner des entêtes http ou des métatags équivalents spécifiques : Cache-Control, Expires ou Pragma (obsolète).
Au niveau contrainte, le procédé nécessite des adaptations pour les gestions des sessions et la mise en place d’un système de versionning (capable de stopper le cache en cas de mise à jour d’un fichier). Mais les gains de performance peuvent être considérables au final : jusqu’à 70% d’allégement du travail à fournir pour le serveur d’hébergement.
6/ Accélérer les échanges avec les bases de données
La grande majorité des sites internet stocke les données-utilisateurs et les donnnées-produits dans des bases SQL (Oracle, MySQL, Miscrosoft Sql Server, PostgreSQL…). C’est les dialogues techniques avec ces bases de données qui sont la source d’une bonne partie des lenteurs d’affichage sur le web.
De nombreuses solutions technologiques existent pour les entreprises qui souhaitent pallier le problème :   
  • intervenir sur le paramétrage des bases de données : ressources-mémoires allouées, déclaration de clés primaires et de multiples clés d’indexations, load-balancing...
  • intervenir sur le code-source de l’application : éviter les connexions inutiles, fermer les connexions au plus vite, mettre en cache le résultat des requêtes SQL (pour limiter le nombre de tâches répétitives à traiter), utiliser un pool de connexions persistantes, optimiser les requêtes SQL, les jointures, les sous-requêtes et les triggers pour la performance...
  • utiliser les bases de données nouvelle génération (NOSQL) mieux adaptées aux besoins de rapidité des sites internet : MongoDB, Cassandra, Memcached, HBase, Elasticsearch, Redis, Solr...
  • utiliser des “flat-database” pour les données en lecture seule.
7/ Mettre en place une compression GZIP
Internet permet de compresser les données pour échanger de gros volumes d’informations en peu de temps. Bien utilisé, ce procédé peut être mis à profit pour accélérer l’affichage des pages-web.
Pour les sites Internet peu fréquentés, les modules de compression à la volée proposés gratuitement par les serveurs web suffiront (comme Mod-Gzip ou Mod-Deflate pour Apache).
Pour les sites internet à très forte fréquentation, compresser à la volée est insatisfaisant : des solutions professionnelles qui mixent détection des possibilités du navigateur, mise en cache, gestion des sessions et compression sont nécessaires.
Cependant, les images doivent être exclues du mécanisme de compression : c’est généralement contre-productif (car les formats d’image sont déjà des algorithmes de compression). Il est préférable d’essayer de diminuer raisonnablement la qualité des images avec les outils de retouche-photo comme Photoshop ou The Gimp.
 
8/ Optimiser les pages d’erreurs 404 pour la performance
Une boutique en ligne qui ajoute et supprime de façon régulière des références-produits se retrouve à terme avec à un volume important d’erreurs 404 (documents non trouvés).
Toutefois, les messages “Cette page n’existe plus” (ou “Le produit recherché n’est plus disponible”) font fuir les internautes et dégradent l’image de marque du vendeur.
Du coup, autant privilégier la performance pour ces pages à faible valeur ajoutée:
  • sur les images, les css et les javascripts en erreur 404, il est inutile d’afficher un message personnalisé (celui par défaut du serveur suffit),
  • sur les pages html en erreur 404, il est opportun d’éviter de recourir à des langages de programmation server-side et opportun de rediriger vers la page d’accueil ou une page pertinente,
  • pour éviter la nuisance d’erreurs 404 en cascade (boucle sans fin de pages 404 qui appellent elles-mêmes d’autres pages 404), il convient d’activer un cache-navigateur durable dans les entêtes http des page d’erreurs,
  • certaines pages d’erreur 404 pourront être désindexées des moteurs de recherche, via des directives-robots noindex, pour économiser du travail au serveur d’hébergement (notamment les pages qui ne re-serviront plus jamais à l’avenir).
9/ Déléguer une partie de l’hébergement à un Cloud
Les clouds (d’hébergement de fichiers) sont des solutions haute performance pour stocker et partager des documents sur internet. Les acteurs majeurs de ce domaine d’activité sont des entreprises d’envergure mondiale : Amazon S3, Cloudfront, Microsoft Azure, CloudFlare, RackSpace, Google Cloud Storage...
Élaborés par des experts de très haut niveau, ces hébergeurs “dernière génération” donnent satisfaction aux besoins spécifiques des entreprises de l’e-commerce et des startups à forte croissance :
  • ils ont des infrastructures internet surpuissantes;
  • ils s’adaptent aux pays des internautes pour accélérer la vitesse;
  • ils gèrent proprement la compression des données (sauf Google Cloud Storage);
  • ils utilisent des bases de données NOSQL et des serveurs de load-balancing…
Cependant, le prix de ces clouds professionnels est à la hauteur de leurs performances : relativement élevé. Pour les TPE et PME à petit budget, l’astuce est de ne faire héberger par un cloud qu’une partie de son site internet : les images par exemple. Ainsi, le serveur d’hébergement habituel est délesté d’une grande partie de son travail mais les tarifs du cloud restent raisonnables (moins de 10€/mois si du cache-navigateur durable est activé dans le paramétrage des fichiers hébergés).
10/ Venez participer au débat et faire part de vos expériences
Cette chronique est basée sur les consignes techniques (préconisées par Google) qui indiquent de surveiller les performances des sites et d’optimiser les temps de chargement : https://support.google.com/webmasters/answer/35769?hl=fr&ref_topic=6002025
Cet article est aussi lié aux explications des pénalités Google détaillées au paragraphe N°2 de cet autre article :http://www.journaldunet.com/solutions/expert/58057/penalite-google---des-victimes-parmi-les-acteurs-majeurs-de-l-e-commerce.shtml
Toutefois, les solutions proposées dans cette page sont innovantes, extrêmes (jusqu'à 90% de réduction de la charge-serveur), expérimentales, perfectibles, très difficiles à mettre en place et controversées :
  • Elles ont fait leurs preuves pour des boutiques en ligne à activité saisonnière qui avaient tendance à perdre des ventes à cause de pics de trafic saturant les serveurs.
  • Pour des sites internet à forte fréquentation générant des revenus publicitaires, ces solutions ont aussi été profitables (en audience et en positions Google).
  • Mais elles ont échoué à faire progresser significativement les positions Google d’un blog de type WordPress.
L’auteur de cet article vous invite à partager vos avis (favorables ou défavorables), vos expériences et vos techniques d’optimisation dans les commentaires de cet article : venez participer au débat!
Avez-vous essayé les 9 conseils proposés ? Sur quels sites ? Pendant combien de temps ? Pour quels résultats au final ?

mardi 2 septembre 2014

Google revendique 890 améliorations dans son moteur en un an

A l'occasion du dixième anniversaire de son entrée en bourse, Google fait le bilan des évolutions implémentées dans son moteur de recherche.
A l'occasion du dixième anniversaire de l'entrée de Google en bourse, Amit Singhal, directeur de l'activité Recherche du groupe américain, fait le bilan sur Google+ des travaux réalisés depuis par ses équipes. Introduction de l'auto-complétion, de la recherche universelle, amélioration du service de traduction, recherche vocale, personnalisation, knowledge graph... Amit Singhal évoque une dizaine d'évolutions qu'il qualifie de majeures intégrées au cours de la décennie.
A la fin de son message, Amit Singhal évoque le chiffre de 890 améliorations implémentées depuis un an. Un indicateur qui tendrait à prouver que Google ne cesse d'accélérer le rythme d'évolution du moteur de recherche. Pour mémoire, le groupe avait revendiqué entre 350 et 400 changements implémentés dans son moteur en 2009, puis 550 améliorations en 2012 (dixitSearchengineland). 

vendredi 14 mars 2014

Un Google Panda « Nouvelle Génération » pour aider les petites entreprises


matt-cutts-liens-payants
Lors de la SMX West Conference de San José (qui s’est terminée hier), le boss de la webspam team de Google, notre cher Matt Cutts, a expliqué que Google était actuellement en train de travailler sur un filtre Google Panda « nouvelle génération » qui devrait apparaître beaucoup plus doux que ces prédécesseurs pour les webmasters.
D’après Matt Cutts, ce nouveau Google Panda devrait avoir pour effet principal d’aider les petites entreprises à mieux se positionner sur le moteur de recherche. Cette ambition nous rappelle qu’au mois de septembre 2013, Google avait demandé aux webmasters de petits sites web d’expliquer au moteur de recherche pourquoi ils devraient être mieux positionnés sur Google.
En d’autres mots, un Googler de l’équipe de Matt Cutts travaillerait spécifiquement depuis quelques mois afin de permettre aux sites web des petites entreprises de mieux se positionner sur le moteur de recherche. Cette nouvelle génération du filtre devrait donc offrir un changement d’algorithme qui impacterait positivement les petits sites web.

Quelle date pour cette mise à jour Panda ?

Comme à son habitude, Matt Cutts est resté très discret sur la date de lancement de ce filtre « nouvelle génération » mais il est aujourd’hui certain que Google travaille spécifiquement dessus et qu’il sera prochainement déployé. En effet, si Matt Cutts n’est pas toujours très précis dans ses interventions (c’est un doux euphémisme), il est rare qu’il prévoie quelque chose qui ne se passe pas par la suite…

samedi 1 février 2014

Conseils pour utiliser les médias sociaux comme arme secrète des ventes


Utilisation des médias sociaux pour booster les ventes des entreprises.
Suivre l'auteur sur LinkedIn  
Avez-vous déjà travaillé dans la vente ? Combien d'appels avez-vous eu à faire avant de réellement entrer en contact avec quelqu'un ? Combien d’e-mails avez-vous envoyé sans jamais obtenir de réponse ? Peu de gens vont perdre du temps à parler à un inconnu qui essaie de leur vendre quelque chose.
Mais les vendeurs avant-gardistes adoptent une nouvelle approche pour briser ces vieilles barrières de communication : les médias sociaux.
Les technophiles de la vente utilisent maintenant les médias sociaux au travail afin de surveiller les clients potentiels et les concurrents, recueillir des informations, des réseaux et plus, ce qui leur donnent un avantage sur la concurrence. Une étude récente a révélé que les vendeurs qui utilisent les médias sociaux au travail surpassent de 73 pour cent leurs pairs qui ne les utilisent pas. Ils ont également plus souvent dépassé leurs quotas de 23 pour cent par rapport à leurs homologues qui n’utilisaient pas les médias sociaux.
Je sais que les médias sociaux peuvent accroître le succès des ventes car je l’ai expérimenté dans ma propre entreprise. Chez HootSuite, tous nos vendeurs puisent quotidiennement dans les ressources des réseaux sociaux pour recruter des clients. (bien sûr, ce n’est qu’une partie de leur processus, les téléphones et les e-mails étant encore des outils précieux).
Voici trois conseils pour tirer le meilleur parti des médias sociaux comme outil de vente :
1. Utilisez les médias sociaux pour briser la glace :
Les médias sociaux peuvent être une excellente ressource pour obtenir un aperçu unique de pistes qui peuvent vous aider à avoir plus d'impact lors d’un premier contact. L'année dernière, par exemple, nous avons gagné un gros client en grande partie grâce à Twitter. Après avoir suivi l'un des décideurs du client sur le réseau social pendant des mois, un de mes délégués commerciaux a remarqué que le décideur tweetait toujours avec passion sur son amour du hamburger saisonnier McRib de McDonald.
Ainsi, lorsque le délégué commercial a finalement décidé qu'il était temps d’entrer en contact, il a utilisé leur passion commune pour le menu de McDonald comme entrée en matière dans un e-mail (il a commencé par quelque chose du style « C'est à nouveau la saison du McRib .... »). Discuter de son sandwich préféré a vraiment attiré l'attention du décideur. Il a répondu, ce qui a abouti à davantage d'échanges et finalement une vente importante.
Et les médias sociaux ne servent pas uniquement à briser la glace. Ce genre d’enquêtes peut également être utilisé pour découvrir des informations cruciales sur les entreprises, permettant aux vendeurs de régler leur prise de contact de façon optimale.
2. Puiser dans les réseaux sociaux pour obtenir des références plus chaleureusesLes médias sociaux peuvent être un atout majeur pour amener les gens à être plus réceptifs. Récemment, par exemple, un autre délégué de chez HootSuite a fusionné des techniques anciennes avec des nouvelles pour décrocher une réunion avec un énorme client potentiel. Il est d’abord tombé sur un article du Boston Globe à propos d’une nouvelle initiative qui était en train d’être lancée par une grande entreprise de communications. Il se trouve que l'article évoquait un cadre de haut niveau qui dirigeait l’initiative. Après une recherche rapide sur LinkedIn, le délégué commercial a découvert qu'il avait un contact de premier niveau en commun avec le cadre. Au moment de la prise de contact, il a fait référence à leur contact commun et, étonnamment, a eu un retour en 30 minutes.
Si notre délégué commercial avait utilisé la voie traditionnelle du téléphone ou de l’e-mail, il est peu probable qu'il aurait reçu une réponse aussi rapide ou pas de réponse du tout. Rien de tout ceci n’est, bien entendu, difficile à comprendre. Il est bien connu qu’une chaleureuse référence augmente les chances de succès des ventes de 200 à 400 pour cent. Ce qui est nouveau et fort ici c’est de tirer profit des médias sociaux pour transformer une référence banale en une référence chaleureuse.
3. Saisir de nouvelles opportunités avec les médias sociauxIl n'y a rien de plus tragique qu’une occasion perdue dans les ventes. Nos délégués commerciaux ont trouvé un moyen facile de les éviter : travailler avec les services autres que seul le service marketing afin de gagner des renseignements précieux.
Par exemple, une de nos représentants du service support clients a récemment repéré quelqu'un sur Twitter qui se plaignait d’une démonstration des ventes à laquelle il avait assisté chez un de nos principaux concurrents et qui laissait à désirer. Elle a immédiatement basculé le message chez un directeur des ventes, en utilisant notre outil interne de gestion de tâches. C’est là que le manager l’a récupéré et a vérifié les informations professionnelles du tweeter sur LinkedIn. Il a ainsi localisé les informations sur ses contacts. Tout cela s’est fini par une nouvelle opportunité prometteuse d’une valeur de plusieurs dizaines de milliers de dollars. C’est souvent un moyen par lequel nos clients sont contents d'avoir de nos nouvelles et de se voir offrir une solution potentielle à leurs problèmes commerciaux.
La vente à l’aide des médias sociaux vient tout juste d’arriver dans mon entreprise. De plus en plus de vendeurs, à la fois dans les grandes et petites entreprises, adoptent les médias sociaux. Par exemple, l'année dernière, IBM a signalé avoir vu un superbe poussée de 400 % de ses ventes après la mise en œuvre de son programme pilote de ventes grâce aux médias sociaux.
En tirant profit des réseaux comme LinkedIn, les pages Facebook et Twitter, les vendeurs peuvent se donner les moyens d’avoir des informations et des données utiles avec un avantage vraiment concurrentiel.
Les médias sociaux ne remplaceront pas nécessairement le téléphone ou l’e-mail mais c'est un outil nouveau et révolutionnaire que les services de ventes peuvent ajouter à leur arsenal.
Pour avoir en savoir plus sur les médias sociaux et mon entreprise, suivez-nous sur HootSuite sur LinkedIn.
Vous avez aimé cet article ? Pour me lire chaque semaine sur les médias sociaux, leleadership et les tendances en technologie, il suffit de cliquer sur le bouton ’suivre’ en haut de cette page.

mercredi 15 janvier 2014

Comment optimiser la performance d'un site web côté serveur


Compression, gestion des délais d'expiration, du cache... Le serveur web peut subir un traitement de choc qui permettra d’améliorer grandement le temps de chargement des pages. Tour d'horizon.
Comme nous l’avons vu dans l’article Pourquoi optimiser un site web ?, améliorer la vitesse de chargement des pages d’un site à au moins quatre impacts directs : le nombre de visiteurs (et par effet de levier le référencement), un manque à gagner économique et un impact environnemental réel. Ensuite, nous avons évoqué de nombreux axes d’améliorations liés aux éléments graphiques et aux pages elles-mêmes dans les articles Optimiser l’utilisation des images d’une page web et la série sur l’optimisation de la structure et de l’organisation des pages.
Dans ce nouvel article, je vais aborder une autre facette d’un site web, le serveur de publication, qui lui aussi peut subir un traitement de choc en vue de l’amélioration du temps de chargement des pages.

Optimisation serveur, choix d’une approche

Aujourd'hui, plus de 60% des sites sont hébergés sur des serveurs Apaches (Usage statistics and market share of Apache for websites). Nous allons donc porter un focus spécifique sur ce serveur. Concernant Internet Information Server, deuxième serveur utilisé, à hauteur de 17%, je vous propose de vous appuyer en parallèle sur l’article de Steve Jacobson, Translate .htaccess Content to IIS web.config, qui vous permettra d’appliquer les ajustements nécessaires pour un fonctionnement dans les environnements Microsoft ou d’utiliser la solution proposée par HeliconTech.
Donc, le fichier .htaccess est un fichier de configuration permettant de définir le comportement d'Apache pour le répertoire dans lequel il est placé ainsi que ses sous-répertoires (avec IIS, il faudra utiliser le fichier web.config).  Il est donc tout à fait possible de mettre en place différentes stratégies d’accès et de gestion de contenu dans un même site en plaçant plusieurs fichiers .htaccess à différents endroits, le fichier parent restant actif tant que les directives qu'il contient ne sont pas modifiées. Pour notre approche de l'optimisation serveur, nous allons mentionner systématiquement le fichier .htaccess placé à la racine du site, car nous cherchons à améliorer le comportement pour l'ensemble du site.
Le fichier .htaccess est un simple fichier texte que vous pouvez éditer avec n'importe quel outil.
Note : Windows a du mal à travailler avec un fichier ne comportant qu'aucune extension. Je vous suggère donc d'utiliser un éditeur texte un peu évolué ou de renommer, le temps de l'édition, le fichier en htaccess.txt, par exemple.

.htaccess : attention !

Le fichier .htaccess prend effet immédiatement, car il est lu à chaque requête sur votre serveur. Cela signifie qu'une erreur de syntaxe ou de codage provoquera immédiatement un dysfonctionnement de votre site. Par ailleurs, ce fichier permet des réglages fins et très puissants, alors ne le manipulez pas à la légère !
Enfin, rappelons, à tout fin utile de debug, qu'une ligne débutant par # est considérée comme commentaire.
Vous pouvez faire des essais avec l'exemple ci-dessous (en prenant garde à ne pas écraser un fichier .htaccess déjà présent !), en commentant / décommentant les directives d'accès au contenu de votre site.
#
#  Cette directive n'est pas prises en compte :
#     interdiction d'accès absolue au contenu
# -------------------------------------------------------
# deny from all

#
#  Alors que celle-ci est appliquée :
#     autorisation de tous les accès
# -------------------------------------------------------
allow from all

Gérer le contenu

Comme évoqué plus haut, le fichier .htaccess est lu puis interprété lors de chaque accès au site. En conséquence, limitez son contenu (donc sa taille) au minimum possible :
  • réduisez les commentaires à leur partie utile,
  • supprimez toutes les directives inutiles, par exemple :
  1. des directives pour les fichiers *.swf n'ont pas de sens si vous n'utilisez pas Flash,
  2. des directives de restriction d'accès apportent-elles quelque chose pour un site totalement public ?
Pour exemple, le fichier .htaccess de 1 Ko ci-dessous :
#
#  Controles de comportement du site : www.monsite.com
#  - auteur       : I. Ahounou
#  - modification : 1er novembre 2012
# =======================================================
# 
#
#  Types MIME
# -------------------------------------------------------
AddType text/html .htm
AddType text/html .html
AddType application/x-httpd-php .foo
AddType text/javascript .js
AddType text/css .css
AddType application/x-shockwave-flash .swf
AddType video/x-flv .flv
AddType image/gif .gif
AddType image/jpg .jpg
AddType image/png .png
AddType application/pdf .pdf
AddType application/zip .zip
#
#  Accès universel
# -------------------------------------------------------
allow from all
 
#
#  Langue par défaut et charset
# -------------------------------------------------------
AddDefaultCharset UTF-8
AddLanguage fr-FR .html .htm .css .js
#
# -------------------------------------------------------
#  Fin du fichier .htaccess
# -------------------------------------------------------
# 
Nous remarquons de nombreuses choses inutiles :
  • la quantité de lignes de commentaires,
  • la description de types MIME standards,
  • l'accès universel au contenu, appliqué par défaut.
Il ne reste donc que l'application générique de la langue et du charset, qui sont une alternative viable si vous ne les décrivez pas dans le <header> des pages.
Il est alors préférable, et recommandé, de transformer ce fichier, par exemple comme suit.
#  I. Ahounou - 01/11/2012

#  Langue par défaut et charset
AddDefaultCharset UTF-8
AddLanguage fr-FR .html .htm .css .js
Le fichier ne pèse plus que 128 octets et uniquement deux directives sont prises en compte, sans altérer le comportement du serveur, avec en prime une lisibilité accrue !

Vérifier votre serveur

Avant d’aller plus avant, il est nécessaire de vérifier que votre serveur dispose des modules nécessaires à une possible optimisation des flux. Pour cela, 3 options :
  1. vous disposez d’un accès aux paramètres et pouvez vérifier la liste des modules chargés,
  2. vous pouvez utiliser un appel à la fonction phpinfo(), si vous utilisez PHP,
  3. vous pouvez réaliser un test spécifique.
Dans le premier cas de figure, il suffit de cliquer / regarder pour obtenir l’information.
Dans le deuxième cas de figure, vous avez accès aux informations issues de PHP, ou exécutez le petit fichier phpinfo.php ci-dessous depuis votre site.
<?php
        echo phpinfo();
?>
Recherchez alors l’une des informations suivantes :
  • HTTP_ACCEPT_ENCODING : deflate
  • HTTP_ACCEPT_ENCODING : gzip
Enfin, pour le troisième cas de figure, créez un premier fichier, index.html (de préférence dans un répertoire de test) :
<!--#printenv -->
Le deuxième fichier, .htaccess, contient :
SetEnv MOD_mod_deflate 0
SetEnv MOD_mod_gzip 0
SetEnv MOD_mod_headers 0
SetEnv MOD_mod_expires 0
<IfModule mod_deflate.c>
SetEnv MODULE_deflate 1
</IfModule>
<IfModule mod_gzip.c>
SetEnv MODULE_gzip 1
</IfModule>
<IfModule mod_headers.c>
SetEnv MODULE_headers 1
</IfModule>
<IfModule mod_expires.c>
SetEnv MODULE_expires 1
</IfModule>
Appelez le fichier index.html et recherchez les informations pour MODULE_xxx. Une valeur à 1 signifie que le module est disponible.

Utiliser la compression

Apache est capable de transmettre des fichiers compressés au navigateur client qui se charge alors de les décompresser. En activant cette possibilité, les fichiers transmis sont allégés de manière souvent drastique et transitent donc plus rapidement vers l'internaute.
Vous me direz que la contrepartie est du temps de décompression. Vous avez raison. Mais au regard de la puissance des machines actuelles, le gain de temps reste largement appréciable.
Les meilleurs résultats sont obtenus avec le module MOD_DEFLATE (à partir d’Apache v2.0) que nous allons employer, uniquement s'il est disponible, en réalisant un test avec la directive <IfModule module>...</IfModule>.
Note : suivant le serveur exécutant Apache, ce module est soit mod_deflate.c pour des environnements Unix, Linux, soit mod_deflate.so pour des environnements Windows. Le code ci-dessous propose les deux tests de présence en utilisant uniquement l'identificateur mod_deflate.

Pour être véritablement efficace, il est important de préciser aux différents proxy intermédiaires de la chaîne de transmission Internet de ne pas décompresser le contenu à la place de l'internaute. Ceci est possible en ajoutant une directive de type header append vary lors de l'utilisation de la compression serveur.
Mais bien entendu, il existe des incompatibilités avec certains navigateurs, comme Netscape et Internet Explorer (pour les anciennes versions). Nous pouvons traiter ces cas par des tests avec la directive BrowserMatch test.
<IfModule mod_deflate>
   # Compression avec MOD_DEFLATE
   AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml text/javascript application/x-javascript application/x-httpd-php
 

   #Pour les navigateurs incompatibles
   BrowserMatch ^Mozilla/4 gzip-only-text/html
   BrowserMatch ^Mozilla/4.0[678] no-gzip
   BrowserMatch bMSIE !no-gzip !gzip-only-text/html
   BrowserMatch bMSI[E] !no-gzip !gzip-only-text/html

   # Les proxies ne doivent pas décompresser à la place de l'internaute
   Header append Vary User-Agent env=!dont-vary
</IfModule>
Si vous ne bénéficiez pas de MOD_DEFLATE, mais de MOD_GZIP, une autre structure est utilisable :
<IfModule mod_gzip.c>
  mod_gzip_on Yes
  mod_gzip_dechunk Yes
  mod_gzip_add_header_count Yes
  mod_gzip_send_vary Yes
  mod_gzip_item_exclude reqheader "User-agent: Mozilla/4.0[678]"
  mod_gzip_item_include file .(html?|xml|txt|css|js)$
  mod_gzip_item_include handler ^cgi-script$
  mod_gzip_item_include mime ^text/.*
  mod_gzip_item_include mime ^application/x-javascript.*
  mod_gzip_item_exclude mime ^image/.*
  mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
Bien que la syntaxe soit différente, vous avez sans aucun problème compris l’application de mod_gzip_send_vary et l’exclusion du user-agent mozilla/4.
Enfin, si vous ne bénéficiez ni de MOD_DEFLATE, ni de MOD_GZIP, procédez rapidement à une installation ou tentez un contournement avec PHP en utilisant la fonction ob_gzhandler ou zlib.output (meilleur choix) et leurs différentes possibilités. La documentation est disponible, en français, sur php.net.
Pour vérifier de manière simple que vos fichiers sont compressés, vous pouvez utiliser le service proposé par un site comme WhatsMyIP.org.
Concernant Internet Information Server, il est reconnu que la compression n’est pleinement utilisable qu’à partir de la version 6, sous réserve d’un paramétrage spécifique que vous pouvez découvrir dans la documentation de Microsoft : Using HTTP Compression for Faster Downloads (IIS 6.0) ou sur Technos Sources.

Contrôler le cache du navigateur

En contrôlant l'activité du cache du navigateur client, il est possible de le forcer à enregistrer une copie locale des fichiers statiques (images, fichiers HTML, etc.), mais en conservant hors cache les fichiers dynamiques (PGP et CGI).
En réalisant cette opération, une partie non négligeable des fichiers ne transitent plus par Internet, mais sont directement lus depuis le disque dur de l'ordinateur. Gain de temps maximal pour l'affichage des pages, du moins pour les visiteurs réguliers !
Pour contrôler les fichiers mis en cache, nous allons utiliser la directive<FilesMatch test>...</FilesMatch>, pour manipuler le header.
Note : La syntaxe des tests utilisés par la directive FilesMatch s'appuie sur les expressions régulières. Vous pouvez vous familiariser, si nécessaire avec cette syntaxe, en utilisant les tutoriaux du site Expreg.com et réaliser des tests préliminaires depuis le site Annuaire-Info.com.
<IfModule mod_headers>
  # Mise en cache pour un mois
  <FilesMatch ".(ico|jpe?g|png|gif|swf|flv|gz)$">
  Header set Cache-Control "max-age=2592000"
  </FilesMatch>

  # Mise en cache pour 2 heures
  <filesMatch ".(css|js)$">
  Header set Cache-Control "max-age=7200"
  </filesMatch>

  # Désactive la mise en cache
  <FilesMatch ".(pl|php|cgi)$">
  Header unset Cache-Control
  </FilesMatch>
</IfModule>

Gérer le délai d'expiration

Dans la même logique que la gestion du cache, il est possible de préciser au serveur que des fichiers suffisamment récents sont déjà en possession de l'utilisateur et qu'il n'est pas utile de les transmettre une nouvelle.
Pour cela, il faut utiliser les directives Expires... du module mod_expires. Par exemple :
<IfModule mod_expires>
  ExpiresActive On
  ExpiresDefault "access plus 7200 seconds"
  AddType image/x-icon .ico
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType image/ico "access plus 2592000 seconds"
  ExpiresByType image/jpg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/icon "access plus 2592000 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 2592000 seconds"
  ExpiresByType text/html "access plus 7200 seconds"
  ExpiresByType text/javascript "access plus 2592000 seconds"
  ExpiresByType application/xhtml+xml "access plus 7200 seconds"
  ExpiresByType application/x-javascript "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
</IfModule>

Gestion des versions de fichier

Le ETAG permet d'identifier la version d'un fichier. Ainsi, en l'utilisant, le serveur sait s'il y a eu une modification du fichier depuis la précédente requête et peut donc décider, opportunément, de le transmettre. L'inconvénient de cette gestion, est que le serveur et le client doivent s'informer mutuellement pour chaque fichier, ce qui consomme de la bande passante et grève le délai de réactivité.
Ma recommandation est donc de désactiver cette fonctionnalité, en insérant les lignes suivantes :
Header unset ETag
FileETag none

Essais et conclusion

En appliquant les éléments évoqués ci-dessus, voici ce que j’ai pu mesurer avec mon site personnel.
                                              

Page d'accueil
                                     
       Page d'accueil         (images optimisées)        
Premier accès, cache vide       
Sans optimisation.htaccess
6,09 s7,27 s
Avec optimisation.htaccess
3,95 s3,71 s
Gains
2,14 s (= 35%)3,56 s (= 49%)
   
Nouvel accès  
Sans optimisation
4,35 s3,65 s
Avec optimisation
2,23 s1,9 s
Gains2,12 s (= 49%)1,75 s (= 48%)
  Le constat est sans appel : en moyenne 45% de temps de chargement gagné pour chaque page.
Bien entendu, de nombreuses autres possibilités d’optimisation existent, notamment avec l’usage des Content Delivery Network, mais là, nous entrons dans le monde des experts et dépassons le cadre de cet article. De la même manière, si vous possédez votre propre infrastructure, différentes alternatives s’offrent à vous en termes de compression, routage et gestion de flux.
Quoiqu’il en soit, en matière d’optimisation, il faut toujours commencer à la source ! Maintenant, c'est à vous, car n'oublions pas qu'il est communément admis qu'à chaque seconde de chargement d'une page, c'est 10 internautes qui fuient !

PHP : faciliter la maintenance d'un site web avec la fonction include


En tirant parti de la fonction dynamique include, quelques astuces de conception permettent de rendre la maintenance d'un site web bien plus aisée. L'idée étant d'isoler les contenus récurrents dans des fichiers.
Comme nous l’avons vu dans l’article Pourquoi optimiser un site web ?, améliorer la vitesse de chargement des pages d’un site à au moins quatre impacts directs : le nombre de visiteurs (et par effet de levier le référencement), un manque à gagner économique et un impact environnemental réel. Ensuite, nous avons vu dans l’article Optimiser l’utilisation des images d’une page web comment améliorer la performance du poste le plus gourmand en ressources inutiles, les images, avec la prétention de réduire, parfois, de plus de 75% le volume global.
Pour poursuivre la série, je vous propose maintenant des astuces de conception avec lesquelles il sera bien plus aisé de maintenir votre site.

Astuces simples pour les fichiers

Dans ce chapitre, je vais évoquer l’optimisation de site Web, mais plutôt sous l’angle de la facilité de maintenance et d’évolution.
En effet, la plupart des pages adoptent une conception très similaire avec l’incontournable succession du <head> puis du <body>.
  • <head>
  1. l'ensemble des balises <meta>,
  2. un titre et une description,
  3. les appels aux fichiers CSS externes,
  4. les appels aux fichiers JavaScript externes,
  5. le code d'initialisation JavaScript
  • <body>
  1. l'en tête de la page,
  2. le breadcrumb (ou chemin de fer),
  3. le contenu, souvent organisé par colonnes et/ou blocs d'informations,
  4. le pied de page.


Si vous utilisez PHP, ce qui est le cas de 78,5% des sites[1], vous pouvez tirer un grand profit de la fonction include ! Pour rappel, cette fonction permet d’insérer, sans interprétation préalable, un fichier dans un autre. Si vous êtes prêt à transformer vos fichiers statiques HTML en fichiers dynamiques PHP, voyons comment nous pouvons très simplement améliorer la maintenance.
Note : Bien entendu, des fonctions équivalentes existent pour d’autres langages interprétés au niveau du serveur, alors consultez les documentations, l’adaptation ne devant certainement pas vous poser grand problème.
Pour le bloc <head>
A partir de la figure précédente, nous pouvons identifier des éléments communs à toutes les pages, au niveau des balises <meta>, des appels CSS et JavaScript ainsi que du code d’initialisation.
Tous ces éléments peuvent avantageusement être regroupés dans un fichierinclude/metaHeader.inc.php, appelé de manière générique et permettant ainsi de regrouper les constantes qui seront, de fait, plus faciles à maintenir sans erreur.

Pour le bloc <body>
Toujours à partir de la même figure de référence, il est possible d’identifier des éléments récurrents et statiques comme :
  • l’en-tête de page qui se déplace dans un fichier include/htmlHeader.inc.php,
  • la colonne de gauche, souvent associée à un menu, qui se retrouve dans le fichier include/htmlBodyLeft.inc.php,
  • la colonne de droite, souvent associée à de la publicité, un nuage de tags (etc.) qui s’exporte dans le fichier include/htmlBodyRight.php,
  • le pied de page, pour le copyright, les liens de contact (etc.) qui se place dans le fichier include/htmlFooter.inc.php.


En adoptant cette démarche, la structure de la page se simplifie :
<html> 
   <head>
        <?php include("include/metaHeader.inc.php"); ?>
        <!-- les éléments spécifiques de la page -->
        <title>...</title>
        <meta name="description" content="..." />
        <meta name="keywords" content="..." />
        <link href="css/maPage.css" rel="stylesheet" type="text/css" />
        <style>
              /* Ne contient que les éléments spécifiques */
              ...
        </style>
        <script src="scripts/..." type="text/javascript"></script>
        <script type="text/javascript">
              /* Ne contient que les éléments spécifiques */
              ...
        </script>
   </head>
   <body>
        <!-- en-tête -->
        <?php include("include/htmlHeader.inc.php"); ?>
        <!-- le spécifique -->
        ...
        <!-- breadcrumb -->
        ...

        <!-- colonne gauche -->
        <?php include("include/htmlBodyLeft.inc.php"); ?>
        <!-- le spécifique -->
        ...

        <!-- colonne centrale -->
        ...

        <!-- colonne droite -->
        <?php include("include/htmlBodyRight.inc.php"); ?>
        <!-- le spécifique -->
        ...
   </body>
</html>
Et, par exemple, pour le contenu du fichier include/metaHeader.inc.php, nous pouvons avoir :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="fr">
<meta http-equiv="Expires" content="never" />
<meta http-equiv="Cache-Control" content="public" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />
<meta name="distribution" content="global" />
<meta name="robots" content="Index,Follow" />
<meta name="country" content="France" />
<meta name="language" content="french" />
<meta name="copyright" content="..." />
<meta name="email" content="...@monsite.fr" />
<meta name="author" content="..." />
<meta name="designer" content="..." />
<meta name="publisher" content="..." />

<link rel="shortcut icon" href="shortcut.ico" type="image/x-icon" />
<link rel="icon" href="icon.png" type="image/png" />
<link rel="apple-touch-icon" href="apple-touch-icon.png" />
<link rel="alternate" type="application/rss+xml" title="..." href="..." />
<link href="css/default.css" rel="stylesheet" type="text/css" />
<link href="..." rel="stylesheet" type="text/css" />
<script src="scripts/default.min.js" type="text/javascript"></script>
<script src="..." type="text/javascript"></script>

<script language="javascript" type="text/javascript">
    /* code d'initialisation */
    ...
</script>
À ce stade, vous avez compris comment rationaliser votre structure de fichiers afin d'améliorer grandement la maintenance, sans qu'il soit nécessaire d'illustrer les fichiers include/html_xxx_.inc.php.
Avec cette approche, le fichier include/html_xxx_.inc.php étant appelé par une source PHP, vous pouvez aussi y associer des personnalisations contextuelles à partir d’informations obtenues depuis Apache.
L’exemple ci-dessous est un point de départ pour récupérer des informations de session, des informations concernant le navigateur de l’internaute, le script appelé ainsi que toute variable transmise. Ensuite, c’est du développement classique.
<?php

/*===================================================================
   SESSION
  (nécessite que ce script soit appelé en premier dans la page)
===================================================================*/
session_start();

// Transfo. des variables de session en variables PHP
if (isset($_SESSION)) {
   while (list($key, $value) = each($_SESSION))
         $$key = stripslashes($value);
} 

/*===================================================================
PARAMETRES
===================================================================*/

// Informations utilisateur / navigateur
define("_USER_AGENT",         $_SERVER['HTTP_USER_AGENT']);
define("_USER_LANGUAGE",      $_SERVER['HTTP_ACCEPT_LANGUAGE']);
define("_USER_ENCODING",      $_SERVER['HTTP_ACCEPT_ENCODING']);

// Informations page web appelée
define("_DOC_ROOT",           $_SERVER['DOCUMENT_ROOT']);
define("_DOC_FILENAME",       $_SERVER['SCRIPT_FILENAME']);
define("_DOC_QUERY_STRING",   $_SERVER['QUERY_STRING']);
define("_DOC_URI",            $_SERVER['REQUEST_URI']);
define("_DOC_SCRIPT",         $_SERVER['SCRIPT_NAME']);

/*===================================================================
VARIABLES TRANSMISES
===================================================================*/
// Pour assurer la compatibilité avec les versions inférieures à 4.1.0
if (!empty($_POST))  { $HTTP_POST_VARS = $_POST; }
if (!empty($_GET))   { $HTTP_GET_VARS = $_GET; }

// Transfo. des variables de l'URI et de formulaires en variables PHP
if (isset($HTTP_POST_VARS)) {
   while (list($key, $value) = each($HTTP_POST_VARS))
         $$key = stripslashes($value);
}
if (isset($HTTP_GET_VARS)) {
   while (list($key, $value) = each($HTTP_GET_VARS))
         $$key = stripslashes($value);
}

/*===================================================================
Code à partir d'ici
==v==v==v==v==v==v==v==v==v==v==v==v==v==v==v==v==v==v==v==v==v==v=*/
 
?>
La suite du travail de rationalisation ne devrait vous demander que peu d'effort pour être adapté à votre site.
Ce que nous venons d’évoquer est parfaitement applicable à des sites "simples", en prenant garde à ne pas faire d’amalgame entre la notion de simplicité et le nombre de pages. Dans le cas de sites bien plus complexes, cette approche n’est pas forcément pertinente et il sera bien plus efficace de s’appuyer sur des gestionnaires de templates[1] plus évolués. Dans cette logique, un premier pas peut-être réalisé avec des solutions comme WordPressJoomla ou Drupal. Vous pouvez vous faire une idée des CMS[2] les plus utilisés sur W3Techs.

Conclusion

Avec ce nouvel article, vous disposez de pistes sérieuses pour l’amélioration de la structure de votre site. Combinez cela avec tous les éléments déjà abordés et vous pourrez vous vanter d’avoir très largement contribué à l’optimisation de votre site web.
Impatient de connaitre la suite ? Alors rendez-vous très rapidement pour reprendre notre fil rouge de l’optimisation !
[3] Content Management System : gestionnaire de contenu