Sessions et moteurs de recherche

L'utilisation de sessions est nécessaire dans plusieurs cas et notamment pour :

  • Tracker le chemin du visiteur sur le site
  • Mémoriser certaines informations (comme le contenu d'un panier)

Les informations liées à la session sont stockées dans un fichier sur le serveur. Ce fichier est unique et un identifiant est généré pour chaque utilisateur. Cet identifiant est une chaîne de texte composée au minimum de 32 caractères. Il permet de faire la correspondance entre l'utilisateur et le fichier contenant les informations de la session.

L'identifiant peut être stocké dans un cookie (sur le poste de l'utilisateur donc). Il s'agit de la situation la plus commune. Toutefois, si l'utilisateur n'accepte pas les cookies, il est possible de transmettre cet identifiant via l'URL. Vous avez d'ailleurs certainement vu des URL contenant une chaîne ressemblant à ?PHPSESSID=a9e8dc705da1560e9b6d4c1a65ae3245.

Les problèmes des sessions pour le référencement

Il faut savoir que les moteurs de recherche n'acceptent pas les cookies. Par conséquent de nombreux sites contournent ce problème en utilisant les URL pour transmettre l'identifiant de session, et c'est là où les problèmes commencent.

Les robots indexent ce type d'URL, d'ailleurs nous pouvons le vérifier aisément. Pour ce faire, il suffit de saisir la requête suivante dans le moteur de votre choix.

Session et référencement dans google

En moyenne (cela dépend de la configuration du serveur), les fichiers de session sont conservés pendant trente minutes. Ainsi, lorsque le robot va revenir, une nouvelle session se déclenchera avec une nouvelle URL à indexer. Notons que le contenu sera identique à la page précédemment visitée par le robot. Les robots (aussi bien Google, Yahoo que Live) pourront alors indexer des centaines de fois la même page.

Comme vous pouvez l'imaginer, au bout d'un certain temps, les moteurs de recherche détectent 2 principaux problèmes :

  • URL non pérenne
  • Duplication de contenu
  • Nombre infini de pages à indexer

Une solution pour faire disparaître les sessions ?

Dire qu'il ne faut pas utiliser des sessions n'est pas une solution concevable. En effet, les sessions peuvent être très pratiques pour les développeurs comme nous l'avons vu au début de cet article. Alors comment faire pour supprimer les ID de session dans les URL ? Plusieurs solutions sont envisageables :

  • N'ouvrir la session que lorsque cela est utile. Certains sites ouvrent une session dès la première page visitée alors qu'il ne l'utilise vraiment qu'après que l'internaute soit logué.
  • Passer l'identifiant en priorité par les cookies et non par l'URL
  • Se priver des internautes qui n'acceptent pas les cookies et interdire le passage d'identifiants dans les URL
  • Détecter les robots et démarrer des session qu'avec les internautes

Interdire les identifiants de session dans l'URL avec htaccess

SetEnv SESSION_USE_TRANS_SID 0

Interdire les identifiants de session dans l'URL via le php.ini

session.use_trans_sid = 0

Pour les serveurs IIS, j'ai déjà vu un admin réseau régler le problème via une simple option de son panel d'administration.

Interdire le passage des identifiants de session dans l'URL

/* Désactivation de la reconnaissance de l'identifiant de session dans l'URL */
ini_set('session.use_trans_sid', "0");
/* Autorisation de l'utilisation des cookies */
ini_set('session.use_cookies', "1");
/* Autorisation d'utiliser QUE les cookies */
ini_set('session.use_only_cookies', "1"); */
/* Interdiction d'ajouter l'identifiant de session dans le code html généré */
ini_set("url_rewriter.tags","");
/* Tout est sous contrôle, on démarre la session */ session_start();

Il serait possible de faire plus court mais je vous ai livré ici le code en version paranoïaque :)

Détecter les robots en PHP

Il existe plusieurs méthodes pour détecter les robots. Il est par exemple possible de contrôler le user agent, l'hôte et l'IP de chaque visiteur puis de démarrer ou non une session. Voici une proposition pour contrôler le user agent uniquement :

<?php
function checkUaRobot(){
  $robot = false;
  $_UA = array("GoogleBot", "Slurp","MsnBot");
  // Complétez cette liste avec tous les UA que vous désirez

  foreach($_UA as $ua) {
    // On compare le user agent du visiteur à notre liste
    if(eregi($ua,$_SERVER["HTTP_USER_AGENT"])) return true;
  }

  // L'UA n'est pas dans notre liste, il s'agit d'un visiteur humain
  return false;
 }
?>

// On appelle la fonction
if (!checkUaRobot()) { session_start(); }
?>

Une dernière "solution" est de laisser Google se débrouiller. Il fera le ménage de lui même un jour ou l'autre en supprimant les pages dupliquées...

Recevez par email nos prochains conseils

Oseox sur Facebook Notifications via Facebook Oseox sur Twitter Notre actu sur twitter

Une question ? Venez la poser sur notre forum référencement !

A propos de l'auteur

Aurélien Bardon

Editeur du portail Oseox.fr, Aurélien Bardon est expert en création de trafic et e-commerçant. Après avoir travaillé en agence et chez l'annonceur, aussi bien pour des petites sociétés que pour de grands comptes, il fonde en 2009 l'agence web Aseox.