Référencement d'un forum phpBB
Par Damien Le Peillet, le 10 Mai 2004
Résumé
Cet article rappelle les problèmes d'indexation des forums phpBB, en particulier avec Google, puis donne des solutions simples et précises. N'importe quel webmaster possédant un forum phpBB pourra ainsi avoir toutes les discussions de son forum indexées dans Google.
Cet article est constitué de 3 grandes parties :
- Les problèmes d'indexation avec phpBB
- le problème des pages dynamiques
- Le problème de l'identifiant de session sid
- Les solutions pour indexer votre forum phpBB
- Gestion de l'identifiant de session
- La réécriture des URL
- Pour finir...
- Quelques mods utiles
- Le mot de la fin
2- Les solutions pour indexer votre forum phpBB
Source : Le problème des sessions pour le référencement.
Rassurez-vous, il est possible d'améliorer tout ça :)
Commençons par ce qui me semble le plus gros obstacle : le session identifier
2.1 Gestion de l'identifiant de session
La solution peut paraître simple : le supprimer tout simplement ! Impossible ! Le sid représente votre session, c'est à dire votre connexion au forum. Sans lui, vous ne seriez plus reconnu et tous les utilisateurs seraient considérés comme non connectés et identiques... Impossible donc d'effectuer des actions comme avoir un profil, poster des messages, et toute autre action individuelle.
Par contre, la présence du sid dans les URL n'a rien d'obligatoire
puisque cette valeur est déjà stockée
sous forme de cookies et la session dans la base
de données (table phpbb_sessions).
La valeur dans l'URL n'est utilisée que si
aucun cookie n'a été créé !
(Se référer au fichier includes/sessions.php
pour les détails). Il est donc possible de
supprimer le sid dans les URL (et
seulement dans les URL) : vous gardez votre
identifiant de session de toute façon.
A moins que... votre navigateur n'accepte pas les cookies... ce qui est le cas des googlebots !
Mais nous avons vu plus haut que le sid n'était finalement
utile qu'aux utilisateurs connectés, qu'il
est indispensable de reconnaitre comme individus.
Or, les robots Google ne se connectent jamais et
sont donc toujours reconnus en tant qu'invités.
Conclusion : il faut supprimer le sid dans les URL pour les invités !
A ma connaissance, le meilleur mod pour faire ceci est Guest Sessions Mod de CyberAlien, qui suit :
#
#-----[ OUVRIR ]---------------------------------------
#
includes/sessions.php
#
#-----[ TROUVER ]---------------------------------------
# vers la ligne 139
$sql = "UPDATE " . SESSIONS_TABLE . "
SET session_user_id = $user_id, session_start =
$current_time, session_time = $current_time, session_page
= $page_id, session_logged_in = $login
WHERE session_id = '" . $session_id . "'
AND session_ip = '$user_ip'";
#
#-----[ REMPLACER PAR ]---------------------------------
#
$sql_ip = $user_id == ANONYMOUS ? " AND session_ip
= '$user_ip'" : '';
$sql = "UPDATE " . SESSIONS_TABLE . "
SET session_ip = '$user_ip', session_start = $current_time,
session_time = $current_time, session_page = $page_id,
session_logged_in = $login
WHERE session_id = '" . $session_id . "'
$sql_ip
AND session_user_id = '$user_id'";
#
#-----[ TROUVER ]---------------------------------------
# vers la ligne 186
$SID = 'sid=' . $session_id;
#
#-----[ REMPLACER PAR ]---------------------------------
#
$SID = $user_id > 0 ? 'sid=' . $session_id : '';
#
#-----[ TROUVER ]---------------------------------------
# vers la ligne 256
$SID = ($sessionmethod == SESSION_METHOD_GET ||
defined('IN_ADMIN')) ? 'sid=' . $session_id : '';
#
#-----[ REMPLACER PAR ]---------------------------------
#
$SID = $userdata['user_id'] > 0 ? (($sessionmethod
== SESSION_METHOD_GET || defined('IN_ADMIN')) ?
'sid=' . $session_id : '') : '';
#
#-----[ TROUVER ]---------------------------------------
# vers la ligne 303
//
// If we reach here then no (valid) session exists.
So we'll create a new one,
#
#-----[ AVANT, AJOUTER ]--------------------------------
#
elseif(empty($sessiondata))
{
// try to login guest
$sql = "SELECT u.*, s.*
FROM " . SESSIONS_TABLE . " s, "
. USERS_TABLE . " u
WHERE s.session_ip = '$user_ip'
AND s.session_user_id = " . ANONYMOUS . "
AND u.user_id = s.session_user_id
LIMIT 0, 1";
if ( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_ERROR, 'Error doing DB query
userdata row fetch', '', __LINE__, __FILE__, $sql);
}
$userdata = $db->sql_fetchrow($result);
if ( isset($userdata['user_id']) )
{
if ( $current_time - $userdata['session_time'] >
60 )
{
$sql = "UPDATE " . SESSIONS_TABLE . "
SET session_time = $current_time, session_start
= $current_time, session_page = 0
WHERE session_id = '" . $userdata['session_id']
. "'";
if ( !$db->sql_query($sql) )
{
message_die(CRITICAL_ERROR, 'Error updating sessions
table', '', __LINE__, __FILE__, $sql);
}
}
return $userdata;
}
}
Veuillez noter que votre code sera légèrement différent suivant les mods déjà installés (notamment le mod Last Visit de Niels) et votre version de phpBB.
Suite de l'article :
- Les problèmes d'indexation avec phpBB
- le problème des pages dynamiques
- Le problème de l'identifiant de session sid
- Les solutions pour indexer votre forum phpBB
- Pour finir...
- Quelques mods utiles
- Le mot de la fin
