SEO: Les fichiers .htaccess sont à utiliser avec modération

écrit par Aymeric

htaccess-fileLes 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:

répertoires htaccess

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 ou de votre serveur Apache.

allowoverride none

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:

AllowOverride All (avec .htaccess)AllowOverride None (sans .htaccess)
Benchmarking www.yapasdequoi.com (be patient)
Completed 5000 requests
Completed 10000 requests
Finished 11038 requests
www.yapasdequoi.com (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Finished 21242 requests
Server SoftwareApacheApache
Server Hostnamewww.yapasdequoi.comwww.yapasdequoi.com
Server Port80808080
Document Path//
Document Length35898 bytes35898 bytes
Concurrency Level55
Time taken for tests30.004 seconds30.001 seconds
Complete requests1103821242
Failed requests00
Write errors00
Total transferred400326184 bytes768529254 bytes
HTML transferred396242124 bytes762581214 bytes
Requests per second367.89 [#/sec] (mean)708.04 [#/sec] (mean)
Time per request13.591 [ms] (mean)7.062 [ms] (mean)
Time per request2.718 [ms] (mean, across all concurrent requests)1.412 [ms] (mean, across all concurrent requests)
Transfer rate13029.89 [Kbytes/sec] received25016.21 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max
Connect: 0 2 2.4 3 17
Processing: 2 11 3.0 11 40
Waiting: 0 3 2.7 2 24
Total: 2 13 2.2 13 40
min mean[+/-sd] median max
Connect: 0 3 1.3 3 11
Processing: 2 4 1.5 4 13
Waiting: 0 2 1.5 2 10
Total: 6 7 1.1 7 14
Percentage of the requests served within a certain time (ms) 50% 13
66% 13
75% 13
80% 13
90% 14
95% 17
98% 20
99% 21
100% 40 (longest request)
50% 7
66% 7
75% 7
80% 7
90% 7
95% 9
98% 12
99% 13
100% 14 (longest request)

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 Apache par Aymeric | 38 commentaires

38 commentaires "SEO: Les fichiers .htaccess sont à utiliser avec modération"

  • Christian dit:
    • Aymeric dit:
  • Amandine dit:
  • Anonymouse ou pas dit:
    • Aymeric dit:
  • Sylvain dit:
  • Baptiste dit:
  • Christian dit:
  • Le Juge dit:
  • Desbieys Guillaume dit:
    • Aymeric dit:
  • Amlil71 dit:
    • Aymeric dit:
  • lereferenceur dit:
  • Aurélien dit:
  • Jérémy dit:
  • arthus dit:
  • Silvain dit:
    • Aymeric dit:
  • arnaud dit:
    • Aymeric dit:
  • Christian dit:
  • Nicolas Augé dit:
    • Aymeric dit:
  • Ramenos dit:
  • Arnaud dit:
  • Guillaume dit:
  • massage ayurvédiques paris dit:
  • François-Olivier dit:
    • Aymeric dit:
  • Guillaume dit:
  • Fichier htaccess: tout ce qu'il faut savoir dessus en SEO dit:
  • Julien dit:
  • Pit dit:
  • GeekPress dit:
    • Aymeric dit: