Optimiser les URLS pour google actus

Les sites publiant de l’information de type « nouvelles » peuvent prétendre à être indexés par le site google actualités. Pour cela il faut qu’ils répondent à quelques caractéristiques précises qui sont énoncées ici par google. L’une de ces caractéristiques est que l’url de l’article doit comporter un nombre unique composé d’au moins 3 caractères.

Un article traitant du même sujet avait été publié par James il y a quelques années. Le présent article en propose une réactualisation utilisant les pipelines de SPIP.

Le résultat recherché

Avec les url arborescentes de SPIP, on a presque le type d’url qu’il faudrait pour que l’indexation par google actus soit effective :

http://www.regards.fr/environnement/il-y-a-du-gaz-dans-l-eau

Il manquerait seulement une terminaison en « ,123 » au titre de l’article, comme ceci :
http://www.regards.fr/environnement/il-y-a-du-gaz-dans-l-eau,123

L’objectif est donc :
1. calculer un nombre unique de 3 chiffres minimum pour chaque article du site
2. repérer où et comment l’url arborescente d’un article est calculée
3. ajouter à l’url d’un article le nombre précédemment calculé

1. Calculer un nombre unique d’au moins 3 chiffres

On se base bien évidemment sur le numéro de l’article. Pour les sites ayant déjà un peu vécu, le nombre d’articles publié est supérieur à 100, on peut donc afficher le id_article à la suite du titre de tous les articles nouveaux et le tour est joué. Mais pour les sites plus jeunes, et dans tous les cas pour les articles dont l’id_article est inférieur à 100, il faut ajouter une série de zéros avant le id_article.

Pour cela c’est la fonction php str_pad qui va être utilisée de la manière suivante dans notre fonction SPIP :

str_pad($objet['id_objet'], 3, "0", STR_PAD_LEFT)

Ce qui signifie : « prend l’id (de l’article), et jusqu’à arriver à 3 chiffres, complète-le avec des 0, sur sa gauche ».

2. Le pipeline utilisé pour la construction des url

Pour le cas des url arborescentes, il s’agit du pipeline arbo_creer_chaine_url qui permet de créer une chaine texte correspondant à une url.

On va donc se brancher sur ce pipeline SPIP pour ajouter le nombre à 3 chiffres minimum précédemment obtenu.

3. La fonction qui ajoute le nombre à l’url

Sur le site programmer.spip.org il est rappelé que l’on peut utiliser les pipelines aussi bien dans un plugin que hors plugin (dans les options du site).

Bien qu’il soit souvent préférable, pour des questions d’organisation, de rangement et de maintenance, de déclarer ses pipelines dans un plugin, il est plus rapide d’ajouter quelques lignes dans le fichier mes_options.php du site.

Tout d’abord le branchement du pipeline vers notre nouvelle fonction :

$GLOBALS['spip_pipeline']['arbo_creer_chaine_url'] .= "||googlenews_arbo_creer_chaine_url";

Puis la fonction elle-même :

function googlenews_arbo_creer_chaine_url($x) {
    $objet = $x['objet'];
    if ($objet['type'] == 'article') {
        $x['data'] .= "," . str_pad($objet['id_objet'], 3, "0", STR_PAD_LEFT);
    }
    return $x;
}

Ce qui pourrait donner le fichier mes_options suivant :

<?php
/***
 * Ajoute une virgule et un nombre de 3 chiffres
 * a la suite d'une url
 * @param $x
 * @return string
 */
$GLOBALS['spip_pipeline']['arbo_creer_chaine_url'] .= "||googlenews_arbo_creer_chaine_url";
function googlenews_arbo_creer_chaine_url($x) {
    $objet = $x['objet'];
    if ($objet['type'] == 'article') {
        $x['data'] .= "," . str_pad($objet['id_objet'], 3, "0", STR_PAD_LEFT);
    }
    return $x;
}
?>

Utilisation

Désormais, si vous avez fait le choix des urls arborescentes pour votre site SPIP et que la fonction « google news » est en place, toutes les urls d’articles se terminent par « ,123 ».

Choix des url arboresentes dans SPIP
Choix du type d’url en SPIP 2.1 sur la page ?exec=config_fonctions

Et pour notre site, même l’article N°001 fonctionne : http://www.regards.fr/societe/bourges-tant-que-l-ete-suit-le,001 ! Et l’article dont on parlait au début aussi, mais avec un nombre un peu plus important : http://www.regards.fr/environnement/il-y-a-du-gaz-dans-l-eau,5036.

Il ne reste plus qu’à se signaler auprès de google actus, et d’attendre que l’indexation se fasse.

Nota : pour que la nouvelle déclaration de pipeline soit prise en compte, il faut vider le cache de SPIP. Les URLs avaient peut-être déjà été calculées auparavant. Pour forcer un recalcul, vous pouvez lancer par exemple &var_mode=urls sur une page listant toutes les urls d’articles (comme sur le plan du site).

Discussion

7 discussions

  • 1

    Bonjour,
    J’ai fait une màj de spip 2.1 à spip 3.1, et la réécriture d’URL avec cette méthode qui ajoutait un nombre (id_article) à la fin des urls des articles, ne fonctionne plus :

    $GLOBALS[’spip_pipeline’][’propres_creer_chaine_url’] .= « |googlenews_propres_creer_chaine_url » ;
    function googlenews_propres_creer_chaine_url($x) {
    $objet = $x[’objet’] ;
    if ($objet[’type’] == ’article’) {
    $x[’data’] .= $objet[’id_objet’] ; // ajoute id_article à la fin de chaque article
    }
    return $x ;
    }

    Ce code est dans config/mes_options.php. Savez-vous s’il y a des changements avec spip 3.1 et 3.2 ?

    • En fait finalement en regardant mieux les autres commentaires, j’ai doublé le | avant googlenews_propres_creer_chaine_url et j’ai effacé le cache, et ça a marché aussi sous spip 3.1.16. Merci.

    Répondre à ce message

  • 1

    Bonjour,

    J’ai une question : est-ce que cette réécriture d’URL oblige à modifier les liens internes au site utilisant le format de réécriture pour Google Actualités ?
    Autrement dit, est-ce les URLs sans la virgule et les 3 chiffres à la fin seront toujours utilisables ?

    Merci,
    Bien cordialement,
    Bruno.

    • oui.

      Ceci dit, pour faire des liens internes il faut de préférence utiliser [->XX] ou [->artXX] dans les textes, et #URL_ARTICLE dans les squelettes...

    Répondre à ce message

  • 5

    Je n’arrive pas non plus à faire fonctionner le code sous SPIP 3.0.5, que ce soit en plugin ou dans « mes_options.php ».

    Y a-t’il eu des changements, ou est-ce que je m’y prends mal ?

    • salut captain !

      j’ai eu le même problème que toi avec spip3. Après une semaine d’arrachage de cheveux, j’en suis venu à une solution (que je qualifierais d’un peu cracra) :
      j’ai modifié le plugin « urls_etendues » de spip.

      pour ce faire, je suis allé dans plugins-dist/urls_etendues/urls/arbo.php et j’ai rajouté le traitement suivant ligne après la ligne 194 :

      if ($objet[’type’] == ’article’)
      $url .= « _ » . str_pad($objet[’id_objet’], 3, « 0 », STR_PAD_LEFT) . « _ » . $objet[’id_parent’] ;

      je pense que ça ne sera pas top sur le long terme, mais c’est la seule méthode qui à fonctionné.

    • Ok, je confirme un mini bug.

      En fait il faut déclarer le pipeline avec 2 pipes (||) pour le forcer à passer à la fin des autres calculs d’urls, et donc particulièrement à la fin du calcul de l’url arborescente pour ajouter l’identifiant de l’article.

      Enfin, il faut vider le cache, et recalculer les urls (var_mode=urls sur une page ayant les urls à recalculer, comme sur le plan du site).

      J’ai corrigé l’article.

      $GLOBALS['spip_pipeline']['arbo_creer_chaine_url'] .= "||googlenews_arbo_creer_chaine_url";
    • Dankon, Matteo ;-)

    • Merci Mathieu, ça marche ’achement mieux maintenant !

    • Super !

      merci !

    Répondre à ce message

  • 3

    Cela ne fonctionne pas chez moi, sous SPIP 3 :-(

    • Personne ? :-(

    • Je remarque d’ailleurs que je ne peux mêmepas activer les URLs propres...
      Je me retrouve avec des URLs de ce type si je les active :
      spip.php ?page=article&id_article=9695

    • Y avait une petite erreur dans l’article. Il faut 2 || dans la déclaration

      $GLOBALS['spip_pipeline']['arbo_creer_chaine_url'] .= "||googlenews_arbo_creer_chaine_url";

    Répondre à ce message

  • 5

    Pour utiliser cette manip sur les url propres qs, le code est bien :

    /***
     * Ajoute une virgule et un nombre de 3 chiffres ( pour google news )
     * a la suite d'une url
     * @param $x
     * @return string
     */
    $GLOBALS['spip_pipeline']['propres_qs_creer_chaine_url'] .= "|googlenews_propres_qs_creer_chaine_url";
    function googlenews_propres_qs_creer_chaine_url($x) {
        $objet = $x['objet'];
        if ($objet['type'] == 'article') {
            $x['data'] .= "," . str_pad($objet['id_objet'], 3, "0", STR_PAD_LEFT);
        }
        return $x;
    }

    Ca n’a pas l’air de marcher en tout cas..
    Qu’en pensez vous ?

    Merci d’avance !.

    • Finalement, j’utilise les urls propres et le code

      /***
       * Ajoute une virgule et un nombre de 3 chiffres ( pour google news )
       * a la suite d'une url
       * @param $x
       * @return string
       */
      $GLOBALS['spip_pipeline']['propres_creer_chaine_url'] .= "|googlenews_propres_creer_chaine_url";
      function googlenews_propres_creer_chaine_url($x) {
          $objet = $x['objet'];
          if ($objet['type'] == 'article') {
              $x['data'] .= "-" . str_pad($objet['id_objet'], 3, "0", STR_PAD_LEFT);
          }
          return $x;
      }

      Notez que j’ai remplacé la ’,’ par un ’-’ suite au recommandation de Loiseau2nuit...

      Ca marche lorsque l’on clique sur ’Voir en ligne’ un article depuis la partie privée. L’article se voit attribuer sa nouvelle adresse. Par contre, les autres articles restent avec leur anciennes adresses, sans les chiffres donc...

      Est ce que quelqu’un sait comment faire forcer la génération des nouvelles adresses pour tous les articles ? Pour info spip 2.1.0...

      Merci d’avance !

    • Hello,

      peut-être vider la table spip_urls ?

      TRUNCATE TABLE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF91cmxzPC9jb2RlPg=="></span>
    • On y a penser, mais les urls des articles référencés par google vont mener nul part, non ?

    • .Gilles

      Oui, et c’est le genre de manip’ à éviter.
      De toute manière, si ici l’objectif est d’optimiser pour Google Actu, alors les anciens articles ne sont plus dans cette catégorie.
      Autant ne pas risquer de leur faire perdre leur référencement actuel ;)

    • Non mais en fait ce sont surtout les URLs propres-qs qu’il faut éviter. Quoique vous fassiez pour les optimiser, elles ne seront jamais indexées vraiment correctement par les moteurs de toute façon...

    Répondre à ce message

  • 4

    Au fait pour vider le cache, c’est pas plutôt ’http://www.monsite.com/ecrire/?exec=admin_vider ?
    Enfin, il me semble...

    • Selon http://www.spip.net/fr_article4453.html c’est var_mode=urls pour recalculer toutes les urls présentes dans la page

      Donc, tu peux te faire un squelette bidon.html qui a une boucle article de TOUS les articles de ton SPIP, avec dedans #URL_ARTICLE et tu appelles sur cette page var_mode=urls.

    • Ah ah, on me souffle dans l’oreillette d’IRC (merci Cédric)

      <cerdic> marcimat: pour http://www.spip-contrib.net/Optimiser-les-URLS-pour-google-actus#forum458843
      <cerdic> Il suffit d'activer la configuration avancée des urls dans spip 3
       et d'aller dans la page Gestion des urls
       "Mettre à jour toutes les URLs"
      <marcimat> ah ah
       tu veux pas répondre ? je le fais ?
      <cerdic> vas y :)
      <marcimat> j'avais pas du voir ce bouton ou ne pas m'en être aperçu :)
    • Merci de votre aide ! Ca a marché pour plus de 3000 articles !!!

      Pour un spip 2.1.0.

      Voici le code de mon squelette appelé ’tous-les-articles.html’ :

      <!--
      To change this template, choose Tools | Templates
      and open the template in the editor.
      
      A utiliser avec var_mode=urls pour forcer la ré-écriture des urls sous spip 2
      Ex : http://www.monsite.com/spip.php?page=tous-les-articles&var_mode=urls
      
      
      -->
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
        <head>
          <title>Tous les articles</title>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <INCLURE{fond=inc-head}>
        </head>
        <body>
           <ul>
                      <BOUCLE_articles(ARTICLES){! par id_article}>
                      <li>
                          <h3><a href="#URL_ARTICLE">#ID_ARTICLE #TITRE</a></h3>
                      </li>
                      </BOUCLE_articles>
                  </ul>
        </body>
      </html>

      A mettre en ligne et a appeler par l’url : http://www.monsite.com/spip.php?page=tous-les-articles&var_mode=urls !!! Attention, ne pas oublier le « &var_mode=urls », c’est lui qui fait tout !
      Penser à retirer le squelette une fois l’opération faite pour éviter de laisser trainer des choses qui ne servent plus à rien...

    • Alors je ne connaissais pas le var_mode url et l’option dont parle Cerdic, je ne l’ai pas vue non plus ... oO

      Sinon ya un autre moyen pour tout calculer aussi (et en passant, spotter les erreurs 404 résiduelles d’un site et autres redirections foireuse) c’est de passer l’URL de son site à Xenu pour qu’il check les urls en profondeur (et donc, en toute logique, les calculer à la volée)

      http://home.snafu.de/tilman/xenulink.html

      C’est cadeau !

    Répondre à ce message

  • 2

    J’avoue que ce suffixage à l’aide d’une virgule me chifonne beaucoup.

    D’une manière générale, j’aime (et Google aussi) quand une url se termine par une extension de fichier connues, ce qui facilite (et donc accélère) son indexation dans le moteur ! (je n’ai pas dit « améliore »)

    Par ailleurs, sur les séparateurs, en général on utilisera plutôt un tiret simple « - » la virgule pouvant poser problème en fonction du parseur d’url qu’il y a en face. Et les bots GG ne font pas exception.

    Aussi pour moi (ca reste une conviction, pas une vérité SEO certifiée) l’url idéale serait plutôt
    http://site/arbo/titre-de-l-article-123.html

    Autre chose, pour ce qui touche Google actu plus spécifiquement :

    • dans les url, il aime bien les dates
      http://site/2012/06/21/titre-de-l-article.html peut dans certains cas suffir à obtenir une indexation par GG News
    • La mise en oeuvre, telle que décrite dans l’article ou telle que je la ferais moi ne garantie aucunement d’indexation je cite « effective » dans Google Actu. C’est encore lui qui décide s’il indexe ou pas mais faire la modif vous met en bonne place dans la liste d’attente.
    • Cette modification n’est rien si vous ne mettez pas en oeuvre les modifications qu’ils préconisent au niveau du Sitemap. Mon conseil serait même de produire un sitemap dédié pour vos contenus d’actualités, isolé du sitemap.xml principal (mais lié par lui !)

    C’était la « minute SEO » ... euh... nécessaire ? Vraiment ??? ... de Loiseau2nuit ^^

    • Merci pour le commentaire ;-)

      En fait on peut facilement remplacer la virgule par tout autre caractère. L’objectif de l’article était d’une part de réactualiser le vieil article de James vieux de 6 ans, d’autre part de parler de la fonction php str_pad, et enfin de montrer un exemple de branchement de pipelines.

      Tiens, d’ailleurs on pourrait très bien imaginer de proposer un type d’urls « date » ou « date_google » qui créerait une arborescence de dates comme dans ton exemple. Ce type d’url pourrait même être complétée de la terminaison unique à 3 caractères mini... Du boulot pour cet été ;-)

    • En fait, dans ce que tu me dis :

      d’autre part de parler de la fonction php str_pad

      Je me dis qu’il nous manque un tableau complet des fonctions qu’il est possible d’appliquer à une URL pour compléter la documentation de URLs éditables

      et d’autre part, ce qui serait génial surtout c’est de pouvoir définir un pattern de ré-écriture d’url sur commande et ce, soit pour l’ensemble du site, et au cas par cas pour certaines rubriques ... ( parce que pour ma part, il n’y a aucun intérêt à booster pour indexation google news toutes les pages d’un site. Seul la rubrique publiant réellement des news devrait être optimisée en ce sens)

      Effectivement, heureusement que l’été est calme d’un point du vue activité ^^

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom