SEO: Les fichiers .htaccess sont à utiliser avec modération
17 Sep 2012
écrit parLes fichiers .htaccess vous permettent de modifier rapidement la configuration de votre serveur Apache et d'ajouter des règles et directives en fonction de différents paramètres pour des répertoires spécifiques.
C'est un peu la boîte à outils des SEO puisque c'est via ces fichiers que les règles de réecriture et les redirections 301 en tout genre sont configurées.
Mais ils peuvent devenir un obstacle à la vitesse de chargement, qui a son importance comme vous le savez, pour Google, ses crawlers, et les internautes de manière plus générale.
Fonctionnement des fichiers .htaccess
Il y a un élément important à bien retenir: les fichiers .htaccess ne sont que des extensions du fichier de configuration Apache, le fichier de configuration étant apache2.conf ou httpd.conf en général. Ils fournissent une méthode pour modifier la configuration du serveur pour les répertoires dans lesquels ils se trouvent.
Le problème est que les règles présentent dans les fichiers .htaccess sont parcourus pour chaque fichier, il y a donc un accès disque à ce fichier pour chaque requête sur le serveur.
Cela peut être d'autant plus pénalisant quand le fichier contient des vérifications sous la forme de RewriteCond (conditions pour lesquelles des règles de réecriture s'appliquent).
Pour chaque appel de fichier, Apache va vérifier la présence d’un fichier .htaccess dans tous les répertoires: Si j'appelle l'URL suivante http://www.yapasdequoi.com/wp-content/themes/edeco/uploads/yapasdequoinommerunfichier.png, Apache va d'abord vérifier la présence ou non d'un fichier .htaccess dans les répertoires
- /uploads
- puis /edeco
- puis /themes
- puis /wp-content.
et dès qu'il en trouve, il applique les directives qu'il contient
Un schéma sera probablement plus clair:
Les directives de configuration d'un fichier .htaccess s'appliquent au répertoire dans lequel le fichier .htaccess se trouve, ainsi qu'à tous ses sous-répertoires (sachant qu'il peut y avoir des fichiers .htaccess dans les répertoires de niveau supérieur). Les directives sont appliquées selon l'ordre dans lequel elles sont rencontrées. (source Tutoriel du serveur HTTP Apache : fichiers .htaccess)
Ainsi, les directives d'un fichier .htaccess situé dans un répertoire particulier peuvent écraser les directives se trouvant dans des fichiers .htaccess situés à un niveau supérieur dans l'arborescence des répertoires. Et ces dernières peuvent elles-mêmes avoir écrasé des directives d'un fichier .htaccess situé à un niveau encore plus haut, ou dans le fichier de configuration du serveur principal.
Vous l'aurez compris, cela peut s'avérer assez gourmand en terme de ressources.
Comment ne plus les utiliser?
Les éléments ci-dessous ne concerne que ceux d'entre vous qui ont accès aux fichiers de configuration du serveur Web. Dans le cas d'un hébergement mutualisé, les fichiers .htaccess sont très utiles puisqu'il est bien souvent impossible d'accéder aux fichiers de configuration du serveur Apache, que ce soit hôtes virtuelles ou httpd.conf.
Si vous avez un serveur dédié, il est donc préférable de placer vos règles de réécriture et autres directives directement dans les fichiers de configuration: apache2.conf, httpd.conf ou hôtes virtuelles généralement placées dans le dossier /etc/apache2/sites-availables.
Les sections de configuration Apache
Les directives des fichiers de configuration peuvent s'appliquer au serveur dans son ensemble, ou seulement à des répertoires (Directory), fichiers (Files), hôtes (VirtualHost). Vous allez donc pouvoir placer vos règles de réécriture directement dans la section
Exemple:
<Directory "/var/www/monsite1"> AllowOverride None RewriteRule ^ancienne-url.html$ /nouvelle-url.html [R=301,L] </Directory>
La directive AllowOverride None indique à Apache l'absence de fichiers .htaccess pour le répertoire /var/www/monsite1 dans notre cas: cela évite au serveur d'aller chercher la présence ou non d'un fichier .htaccess dans l'arborescence de ce répertoire pour chaque requête, et améliore donc les performances du serveur.
Il ne faut pas oublier de relancer Apache: c'est aussi l'intérêt d'utiliser directement les fichiers de configurations Apache (apache2.conf, httpd.conf ou vhosts) car les directives qu'ils contiennent sont chargées directement au démarrage du serveur puis montées en mémoire.
Le gain de performances
Edit du 19/09/2012
Suite à une discussion avec @Gwaradenn qui trouvait qu'il manquait à cet article un comparatif sur les performances entre les deux solutions présentés ci-dessus (avec et sans htaccess), je me suis décidé de faire un petit benchmark afin de savoir dans quelle mesure ces fichiers pouvaient impacter la vitesse de chargement d'un site.
Mon fichier de configuration contient des directives relatives à l'utilisation du plugin WP-Supercache, les règles de réécriture de WordPress par défaut ainsi que quelques redirections 301 et un peu de cloaking.
J'ai utilisé l'outil Apache Benchmark afin de tester les performances de mon site (sur le port 8080 comme j'ai Varnish en frontal) en faisant un test de 30 secondes avec 5 requêtes concurrentes:
#ab -t 30 -c 5 http://www.yapasdequoi.com:8080/
Voici les résultats du test:
[table “7” not found /]Les chiffres parlent d'eux mêmes:
- Deux fois plus de requêtes/secondes ont pu être effectuées sans .htaccess pendant la durée du test à savoir 30 secondes (367.89 [#/sec] contre 708.04 [#/sec]) soit un total de 21242 requêtes (11038 requêtes seulement avec un htaccess...)
- Le temps moyen par requête est presque divisé par deux (7.062 [ms] contre 13.591 [ms])
En cas de pic de trafic, la présence de la directive AllowOverride None soulagera votre serveur et lui permettra non seulement de traiter les requêtes plus rapidement mais aussi de réduire les temps de réponses.
Merci encore à Karim qui m'a bien guidé pour ce test. A ce sujet, un petit lien vers sa nouvelle société 6IX IT - audit de données personnelles ne fait pas de mal!
Conclusion: Les fichiers .htaccess c'est bien, mais seulement quand on ne peut pas faire autrement!;-)
écrit dans Serveurs web - Apache Varnish par |