Pays-Froid.Net

Qu'est ce que Pays-Froid.Net

PHPBB - Url rewiting : Aide au référencement

Les tutoriaux de divers langages

PHPBB - Url rewiting : Aide au référencement

Messagede Patoch le 29 Nov 2006 17:25

Avant de commencer , veuillez noter que presque toutes les explications à suivre sont tirées du site Webrankinfo .


Comme le savent les webmasters , Google n'aime pas les forums phpbb : il se contente le plus souvent de référencer la page index et semble ne pas noter l'existence des autres ....


Pourquoi ? Parce que phpbb utilise les pages dynamiques , c'est à dire changeante en fonction du contexte .
Par exemple le fichier viewtopic.php ( les liens sont ceux de phpbb.com )

:arrow: http://www.phpbb.com/phpBB/viewtopic.ph ... 77&start=0
:arrow: http://www.phpbb.com/phpBB/viewtopic.ph ... &start=480


Alors que le fichier est le même , son contenu est différent selon les paramètres de l'URL . Dans ce cas , selon t ( qui désigne le numéro du topic dans la base de données ) et start ( qui désigne le numéro du post par lequel doit commencer le topic ) .
En conséquence , pour le topic 177077 , qui comporte 500 posts , il y a 500 liens possibles : viewtopic.php?t=177077&start=0 jusqu'à viewtopic.php?t=177077&start=500 .
Et ça pour un seul topic !



Et on peut compliquer :
http://www.phpbb.com/phpBB/viewtopic.ph ... &start=440 Cette URL envoit aussi vers le sujet .
Mis bout à bout , le nombre de possibilités devient gigantesque : si Google référençait toutes les combinaisons possible de viewtopic.php sur phpbb.com , cela lui prendrait plus que la totalité des pages déjà indexés dans son répertoire !


En conséquence , les robots indexeurs de Google se limitent généralement à deux paramètres pour les url .Ceci est le premier obstacle à l'indexation des pages par Google .
Source


Deuxième problème , le sid ( session identifier ) .
Exemple sur cette url : http://www.phpbb.com/phpBB/faq.php?sid=5394a4ef8c6b471636f8fc49e50a9960 .
Alors que faq.php est un fichier sans paramètres dynamiques , phpbb ajoute le sid . Le sid changeant à chaque session , l'url vers la FAQ est différent à chaque visite des robots de Google .
Le nombre de sessions étant quasiment infini , si les bots référençaient de telles url , ils satureraient le moteur de recherche .
Les bots évitent donc l'indexation de ces pages .
Source


Rassurez-vous , il est possible d'améliorer tout ça :)


1. Commençons par ce qui me semble le plus gros obstacle : le session identifier .

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 individualités . Or , les robots Google ne se connectent jamais et sont donc toujours 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 :

Code: Tout sélectionner
#################################################################
      ## MOD Title: Guest Sessions MOD
      ## MOD Version: 0.04
      ## MOD Author: CyberAlien <no@public_email> (Vjacheslav Trushkin) http://www.phpbbstyles.com
      ## MOD Description:
      ##      This mod removes session id for guests from url and this way
      ##      guests who don't have cookies like different robots will use
      ##      correct urls. It can be used to allow googlebot and other
      ##      search engines to spider your forum correctly.
      ##
      ## Installation Level:   Easy
      ## Installation Time:   1-2 Minutes
      ## Files To Edit (1): includes/sessions.php
      ##############################################################
      ## For Security Purposes, Please Check: http://www.phpbb.com/mods/ for the
      ## latest version of this MOD. Downloading this MOD from other sites could cause malicious code
      ## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered
      ## in our MOD-Database, located at: http://www.phpbb.com/mods/
      ##############################################################
      ## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
      ##############################################################

      #
      #-----[ OPEN ]---------------------------------------------
      #
      includes/sessions.php

      #
      #-----[ FIND ]---------------------------------------------
      # around line 157
         $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, session_admin = $admin
            WHERE session_id = '" . $session_id . "'
               AND session_ip = '$user_ip'";

      #
      #-----[ REPLACE WITH ]---------------------------------------
      #
         $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, session_admin = $admin
            WHERE session_id = '" . $session_id . "' $sql_ip
               AND session_user_id = '$user_id'";

      #
      #-----[ FIND ]---------------------------------------------
      # around line 210
         $SID = 'sid=' . $session_id;

      #
      #-----[ REPLACE WITH ]---------------------------------------
      #
         $SID = $user_id > 0 ? 'sid=' . $session_id : '';

      #
      #-----[ FIND ]---------------------------------------------
      # around line 288
                  $SID = ($sessionmethod == SESSION_METHOD_GET || defined('IN_ADMIN')) ? 'sid=' . $session_id : '';

      #
      #-----[ REPLACE WITH ]---------------------------------------
      #
                  $SID = $userdata['user_id'] > 0 ? (($sessionmethod == SESSION_METHOD_GET || defined('IN_ADMIN')) ? 'sid=' . $session_id : '') : '';

      #
      #-----[ FIND ]---------------------------------------------
      # around line 340
         //
         // If we reach here then no (valid) session exists. So we'll create a new one,
      #
      #-----[ BEFORE, ADD ]---------------------------------------
      #
         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;
            }
         }

      #
      #-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
      #
      # EoM

( 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 ) .


2. La réécriture des URL
Nous avons vu plus haut que Google n'aimait pas les URL complexes avec plusieurs paramètres . Que cela ne tienne , nous allons donc les réécrire , en language de webmaster , utiliser l'URL REWRITING .


En quoi cela consiste-t-il ? En transformer les URL "à la volée" : c'est à dire qu'elles sont modifiées en direct , et non en passant par les fichiers .
Il est donc possible de garder ce bon viewtopic.php et ses paramètres , nous allons simplement le présenter différemment .


L'objectif est de transformer : http://www.phpbb.com/phpBB/viewtopic.ph ... &start=480 en
une url sans paramètres , par exemple topic_154611_480.html
.
Cette nouvelle url contient les mêmes données mais est simplement présentée différemment !


Cela se passe en deux étapes :
Le fichier .htaccess
Ce brave petit va faire croire que ces deux url sont identiques et renvoyer http://www.phpbb.com/phpBB/topic_154611_480.html vers sa vraie destination , http://www.phpbb.com/phpBB/viewtopic.ph ... &start=480 , de manière totalement transparente . Pour tous , l'url sera http://www.phpbb.com/phpBB/topic_154611_480.html .

Malheuresement , certains hébergeurs n'autorisent pas les .htaccess , et ceux qui le font peuvent interdire les fonctions dont nous allons avoir besoin . :(

Déjà si vous êtes sur un hébergement gratuit , vous pouvez arrêter votre lecture , aucun à ma connaissance n'autorise ceci . Vous pouvez trouver sur ce topic une courte liste des hébergeurs permettant l'utilisation de cette technique .

Votre hébergeur est dans cette liste ? Passons à la suite alors ( S'il n'y figure pas , vous pouvez tenter de mettre un fichier .htaccess à la racine de votre site : si lorsque vous accédez à ce dernier , une erreur 500 apparait , c'est que votre hébergeur ne gère pas les .htaccess : supprimez ce fichier ) .


Que doit comporter ce fichier ?
Et bien toutes les règles de réécriture que vous désirez . Sur la plupart des forums que vous rencontrerez , le fichier .htaccess utilisé est tiré de ce post sur phpbb.com , que nous allons également prendre pour référence .
Le voici :

Code: Tout sélectionner
            RewriteEngine On
            RewriteRule ^forums.* index.php
            RewriteRule ^mforum([0-9]*).* viewforum.php?f=$1&mark=topics
            RewriteRule ^viewforum([0-9]*)-([0-9]*)-([0-9]*).* viewforum.php?f=$1&topicdays=$2&start=$3
            RewriteRule ^forum([0-9]*).* viewforum.php?f=$1
            RewriteRule ^ptopic([0-9]*).* viewtopic.php?t=$1&view=previous
            RewriteRule ^ntopic([0-9]*).* viewtopic.php?t=$1&view=next
            RewriteRule ^stopic([0-9]*)-([0-9]*).* viewtopic.php?t=$1&watch=topic&start=$2
            RewriteRule ^utopic([0-9]*)-([0-9]*).* viewtopic.php?t=$1&unwatch=topic&start=$2
            RewriteRule ^ftopic([0-9]*)-([0-9]*)-([a-zA-Z]*)-([0-9]*).* viewtopic.php?t=$1&postdays=$2&postorder=$3&start=$4
            RewriteRule ^ftopic([0-9]*)-([0-9]*).* viewtopic.php?t=$1&start=$2
            RewriteRule ^ftopic([0-9]*).* viewtopic.php?t=$1
            RewriteRule ^ftopic([0-9]*).html viewtopic.php?t=$1&start=$2&postdays=$3&postorder=$4&highlight=$5
            RewriteRule ^setopic_([0-9]*)-([a-zA-Z0-9]*).* viewtopic.php?t=$1&highlight=$2
            RewriteRule ^sutra([0-9]*).* viewtopic.php?p=$1
            RewriteRule ^newtopic([0-9]*).* viewtopic.php?t=$1&view=newest



Si vous êtes hébergé par Sivit ou OVH , vous devez utiliser le .htaccess suivant ( remplacez /forum/ par le chemin relatif vers votre forum ) :

Code: Tout sélectionner
            RewriteEngine On
            RewriteRule ^forums.* /forum/index.php
            RewriteRule ^mforum([0-9]*).* /forum/viewforum.php?f=$1&mark=topics
            RewriteRule ^viewforum([0-9]*)-([0-9]*)-([0-9]*).* /forum/viewforum.php?f=$1&topicdays=$2&start=$3
            RewriteRule ^forum([0-9]*).* /forum/viewforum.php?f=$1
            RewriteRule ^ptopic([0-9]*).* /forum/viewtopic.php?t=$1&view=previous
            RewriteRule ^ntopic([0-9]*).* /forum/viewtopic.php?t=$1&view=next
            RewriteRule ^stopic([0-9]*)-([0-9]*).* /forum/viewtopic.php?t=$1&watch=topic&start=$2
            RewriteRule ^utopic([0-9]*)-([0-9]*).* /forum/viewtopic.php?t=$1&unwatch=topic&start=$2
            RewriteRule ^ftopic([0-9]*)-([0-9]*)-([a-zA-Z]*)-([0-9]*).* /forum/viewtopic.php?t=$1&postdays=$2&postorder=$3&start=$4
            RewriteRule ^ftopic([0-9]*)-([0-9]*).* /forum/viewtopic.php?t=$1&start=$2
            RewriteRule ^ftopic([0-9]*).* /forum/viewtopic.php?t=$1
            RewriteRule ^ftopic([0-9]*).html /forum/viewtopic.php?t=$1&start=$2&postdays=$3&postorder=$4&highlight=$5
            RewriteRule ^setopic_([0-9]*)-([a-zA-Z0-9]*).* /forum/viewtopic.php?t=$1&highlight=$2
            RewriteRule ^sutra([0-9]*).* /forum/viewtopic.php?p=$1
            RewriteRule ^newtopic([0-9]*).* /forum/viewtopic.php?t=$1&view=newest



Pour rappel , ce fichier doit se mettre à la racine de votre forum , et non de votre site .
Note : certaines configurations n'autorisent pas l'existence d'un fichier nommé .htaccess ( car ce n'est qu'une extenstion ) , dans ce cas , donnez-lui un autre nom puis renommez le une fois sur le FTP .

Deuxième note : pour les personnes possédant leur propre serveur , il est possible d'activer le module mod_rewrite , je conseille la lecture de cette page aux heureux propriétaires .



S'il vous est totalement impossible d'utiliser un .htaccess ou le module mod_rewrite Apache , vous pouvez tenter d'utiliser cette technique qui affiche les variables comme des sous-répertoires . Attention , ceci est en version béta et n'est pas validée par le groupe phpBB ! Utilisez le à vos risques et périls .


Modifications des fichiers du forum
Maintenant il faut générer http://www.phpbb.com/phpBB/topic_154611_480.html ! Sinon cela ne sert à rien de transformer cette URL , puisqu'elle n'est jamais utilisée .
Pour se faire , il faut cibler les générateurs de pages : includes/page_header.php et includes/page_tail.php .
Voici les modifications à effectuer :

Code: Tout sélectionner
            #
            #-----[ OUVRIR ]------------------------------------------
            #
            includes/page_header.php


            #
            #-----[ TROUVER ]------------------------------------------
            #
            #

            $template->set_filenames(array(
               'overall_header' => ( empty($gen_simple_header) ) ? 'overall_header.tpl' : 'simple_header.tpl')
            );

            #
            #-----[ APRES, AJOUTER ]------------------------------------------
            #
            ob_start();
            function replace_mod_rewrite($s)
            {
               $urlin = array(
                  "'(?<!/)viewforum.php\?f=([0-9]*)&amp;topicdays=([0-9]*)&amp;start=([0-9]*)'",
                  "'(?<!/)viewforum.php\?f=([0-9]*)&amp;mark=topics'",
                  "'(?<!/)viewforum.php\?f=([0-9]*)'",

                  "'(?<!/)viewtopic.php\?t=([0-9]*)&amp;view=previous'",
                  "'(?<!/)viewtopic.php\?t=([0-9]*)&amp;view=next'",
                  "'(?<!/)viewtopic.php\?t=([0-9]*)&amp;view=newest'",
            "'(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)watch=topic&(?:amp;)start=([0-9]*)'",
            "'(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)unwatch=topic&(?:amp;)start=([0-9]*)'",
                  "'(?<!/)viewtopic.php\?t=([0-9]*)&amp;postdays=([0-9]*)&amp;postorder=([a-zA-Z]*)&amp;start=([0-9]*)'",      "'(?<!/)viewtopic.php\?t=([0-9]*)&amp;start=([0-9]*)&amp;postdays=([0-9]*)&amp;postorder=([a-zA-Z]*)&amp;highlight=([a-zA-Z0-9]*)'",
                  "'(?<!/)viewtopic.php\?t=([0-9]*)&amp;start=([0-9]*)'",
                  "'(?<!/)viewtopic.php\?t=([0-9]*)&amp;highlight=([a-zA-Z0-9]*)'",
                  "'(?<!/)viewtopic.php\?t=([0-9]*)'",
                  "'(?<!/)viewtopic.php\?p=([0-9]*)'");

               $urlout = array(
                  "viewforum\\1-\\2-\\3.php",
                  "mforum\\1.php",
                  "forum\\1.php",

                  "ptopic\\1.php",
                  "ntopic\\1.php",
                  "newtopic\\1.php",
                  "stopic\\1-\\2.php",
                  "utopic\\1-\\2.php",
                  "ftopic\\1-\\2-\\3-\\4.php",
                  "ftopic\\1-\\2-\\3-\\4-\\5.php",
                  "ftopic\\1-\\2.php",
                  "setopic_\\1-\\2.html",
                  "ftopic\\1.php",
                  "sutra\\1.php");

               $s = preg_replace($urlin, $urlout, $s);

               return $s;
            }

            #
            #-----[ OUVRIR ]------------------------------------------
            #
            includes/page_tail.php

            #
            #-----[ TROUVER ]------------------------------------------
            #
            $db->sql_close();

            #
            #-----[ APRES, AJOUTER ]------------------------------------------
            #

            $contents = ob_get_contents();
            ob_end_clean();
            echo replace_mod_rewrite($contents);
            global $dbg_starttime;


            #
            #-----[ TROUVER ]------------------------------------------
            #
               $gzip_contents = ob_get_contents();
               ob_end_clean();

            #
            #-----[ APRES, AJOUTER ]------------------------------------------
            #


               echo replace_mod_rewrite($contents);
               global $dbg_starttime;


Voilà , faites maintenant un tour sur votre forum , vos url ont changées !
Voici un exemple de forum utilisant exactement ces modifications : http://mods.best-dev.com/ , vous aurez les mêmes URL relatives .


3. Quelques mods utiles ( merci de poser les questions relatives à ces mods dans leur topic ) :
=>Google Track Visit v1.0.0 & son ADDON Google Visit Counter v1.0.0 pour le MOD Google Track Visit v1.0.0
=>Log Bot
=>Google Visit Counter v1.0.0
En anglais :
==>Bot Indexing MOD
==>phpBB Search Engine Optimization
==>phpBB Search Engine Indexer


Ne confondez pas faciliter le référencement et le faire : appliquer ses modifications ne fera pas venir les googlebots sur votre forum , il faut les attirer les petits ! Vous pouvez lire les conseils du site en lien au début du post , vous en trouverez de nombreux de qualités .


Pour conclure , pensez surtout au contenu de votre forum , le but n'est pas de faire un forum numéro un sur Google avec deux inscrits ....


Bon référencement à tous :wink:
Dernière édition par Patoch le 22 Fév 2007 20:09, édité 2 fois.
Avatar de l’utilisateur
Patoch
Administrateur
Administrateur
 
Messages: 1343
Inscription: 13 Nov 2006 1:53
Localisation: Sur la Banquise

Re: [PHPBB] Url rewiting : Aide au référencement

Messagede Darklg le 30 Nov 2006 22:18

Patoch a écrit:Pour conclure , pensez surtout au contenu de votre forum , le but n'est pas de faire un forum numéro un sur Google avec deux inscrits ....

Mouaahhahaaaaa :lol:
Darklg
Petit Pinguin
Petit Pinguin
 
Messages: 57
Inscription: 27 Nov 2006 2:17

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron

Copyright © Pays-Froid.Net

Nous contacter | Notre Histoire | Plan du site | Nos partenaires | Mentions légales | Fil RSS | XHTML 1.0 | CSS 2.0

Partenaire : Waliwaloo - Darklg - Yagoort - Meilleur du Web - Hit Parade