Dotclear, pagination et titrage des pages


Audiofeeline
WRInaute accro
WRInaute accro
 
Messages: 5257
Inscription: 20 Oct 2005

Dotclear, pagination et titrage des pages

Message le Sam Fév 16, 2008 1:33

Bonjour à tous,
j'utilise DC sur mon site ziik.fr mais voilà j'utilise la pagination qui est très pratique mais génère me semble-t-il du duplicate (même titre sur toutes ces pages) du coup j'ai pas mal d'articles qui se sont désindexés (j'ai pourtant un sitemap).

Auriez-vous une idée pour coder un truc qui m'afficherait le numéro de la page dans ma balise title ?

Merci.

mariea
WRInaute impliqué
WRInaute impliqué
 
Messages: 732
Inscription: 6 Mai 2005

Message le Sam Fév 16, 2008 10:17

Faut éditer le fichier template du theme et faire des modifications.


cedric_g
WRInaute accro
WRInaute accro
 
Messages: 3552
Inscription: 18 Jan 2006

Message le Sam Fév 16, 2008 11:15

Bonjour

Je n'ai à priori pas ce soucis... Le contenu de chaque page change trop souvent de mon côté (je pense ; je tâche de publier 2 à 4 articles par semaine) ; de toute façon il est peut-être préférable de ne pas indexer ces pages, justement (balise META Robots à "noindex,follow") ; je ne l'ai pas fait pour ma part.

Tu veux faire quoi dans le titre : rajouter le n° de page ? Je ne suis pas sûr que cela servira à quelque chose :roll:

Pour ma part j'ai ajouté un nuage de tags et optimisé le code pour le title et les balises description et keywords à partir de ça (en plus des catégories et de ma page "table des matières", autre plugin sympa...) ; cf artice dans WRI :wink:


Me suis rendu compte hier que mes nouveaux articles sont indexés en moins de 3 heures 8O


Audiofeeline
WRInaute accro
WRInaute accro
 
Messages: 5257
Inscription: 20 Oct 2005

Message le Sam Fév 16, 2008 11:38

Le soucis c'est que certains de mes vieux articles sont désindexés.
Je ne sais pas trop quoi faire.


Audiofeeline
WRInaute accro
WRInaute accro
 
Messages: 5257
Inscription: 20 Oct 2005

Message le Sam Fév 16, 2008 12:38

On parle bien de DotClear ici. :)


cedric_g
WRInaute accro
WRInaute accro
 
Messages: 3552
Inscription: 18 Jan 2006

Message le Sam Fév 16, 2008 13:50

Effectivement, on parle bien de Dotclear :lol: :roll: :wink:

De mon côté, depuis que j'ai mis en place "tags" et "billets connexes", l'indexation se faire à une vitesse vertigineuse :roll:


Audiofeeline
WRInaute accro
WRInaute accro
 
Messages: 5257
Inscription: 20 Oct 2005

Message le Sam Fév 16, 2008 15:06

Je précise aussi que je suis sous la 1.2.x :)

djoh
WRInaute discret
WRInaute discret
 
Messages: 94
Inscription: 1 Fév 2008

Message le Mer Fév 27, 2008 11:12

Bonjour,

Je viens moi aussi d'installer le plugin pagination, mais je m'inquiète du duplicate content.

Avez-vous trouver une solution, et si oui, laquelle ?

Comme j'ai une génération des meta suivant le mode, j'ai d'abord mis un noindex,follow sur les pages pagination. Sauf que la page d'accueil est elle aussi en mode pagination, et c'est pourtant bien celle là que je veux indexer la première.
Il y a donc la solution du robots.txt.
Sauf que !
un disallow : Disallow: /blog/?p*
arrêtera aussi les pages dont l'url commence par P.

Une solution ?


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Message le Mer Fév 27, 2008 11:27

djoh a écrit:Bonjour,

Je viens moi aussi d'installer le plugin pagination, mais je m'inquiète du duplicate content.

Avez-vous trouver une solution, et si oui, laquelle ?

Comme j'ai une génération des meta suivant le mode, j'ai d'abord mis un noindex,follow sur les pages pagination. Sauf que la page d'accueil est elle aussi en mode pagination, et c'est pourtant bien celle là que je veux indexer la première.
Il y a donc la solution du robots.txt.
Sauf que !
un disallow : Disallow: /blog/?p*
arrêtera aussi les pages dont l'url commence par P.

Une solution ?


1) Modifier le titre des pages quand tu es en mode pagination (sauf dans le cas de la page 1)
2) rediriger via htaccess la page 1 de pagination sur la page d'accueil du blog

Tout ce que j'aspire à faire sur mon blog dès que j'en aurai le temps.

djoh
WRInaute discret
WRInaute discret
 
Messages: 94
Inscription: 1 Fév 2008

Message le Mer Fév 27, 2008 11:32

Je trouve la méthode un peu tordue...

Est-ce qu'il ne serait pas plus facile de donner un autre nom que "p" aux pages de pagination, comme "billets-plus-anciens" ?
exemple :
djoh.net/blog/?p2
djoh.net/blog/?billets-plus-anciens

Et dans ces cas-là, le robots.txt devient beaucoup plus facile à écrire ...

Je mets le nez dans le code du plugin, mais pour l'instant je suis perdu...
Tu as un avis concernant cette idée ?


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Message le Mer Fév 27, 2008 11:37

djoh a écrit:Je trouve la méthode un peu tordue...

Est-ce qu'il ne serait pas plus facile de donner un autre nom que "p" aux pages de pagination, comme "billets-plus-anciens" ?
exemple :
djoh.net/blog/?p2
djoh.net/blog/?billets-plus-anciens

Et dans ces cas-là, le robots.txt devient beaucoup plus facile à écrire ...

Je mets le nez dans le code du plugin, mais pour l'instant je suis perdu...
Tu as un avis concernant cette idée ?


Je suis pas super fan. La modif que je propose à pour côté positif de moins toucher au moteur de DC (du plugin pagination en fait ici), car l'ensemble des modifs se fait directement via le template où via ajout de ligne dans le htaccess.

Stefano
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 273
Inscription: 12 Fév 2006

Message le Mer Jan 07, 2009 11:36

Bonjour,

Modifier le titre des pages quand tu es en mode pagination (sauf dans le cas de la page 1)

Je me greffe sur ce vieux sujet car je voudrais faire exactement ceci ajouter donc un simple page 2/ page 3... aux page suivantes. Est-ce que vous y êtes parvenus ?

Merci de vos réponses.

Stefano

djoh
WRInaute discret
WRInaute discret
 
Messages: 94
Inscription: 1 Fév 2008

Message le Mer Jan 07, 2009 12:40

C'est pas hyper la classe au niveau coding, mais ca marche. Et GWT apprecie.

Dans prepend.php
Code: Tout sélectionner
function dcHeadLinks2(){

   global $blog, $cat_id, $rs_cat;
   
   if (!$rs_cat->isEmpty() && !$cat_id)
   {
      while (!$rs_cat->EOF())
      {
         if ($rs_cat->f('nb_post') > 0)
         {
            $id = $rs_cat->f('cat_libelle_url');
            $libelle = $rs_cat->f('cat_libelle');
            $lien = sprintf($blog->front_url['cat'],$id);
         }
         $rs_cat->moveNext();
      }
      $rs_cat->moveStart();
   }
   
   $arry_months = $GLOBALS['arry_months'];
   $comp_url = '';
   if ($cat_id) {
      $comp_url = $cat_id.'/';
   }
   foreach ($arry_months as $ts => $d)
   {
      $titre = dt::str('%B %Y',$ts);
      $url = sprintf($blog->front_url['archive'],$comp_url.date('Y',$ts),date('m',$ts));
      #echo '<link rel="archive" href="'.$url.'" title="'.$titre.'" />'."\n";
   }
   
   if ($GLOBALS['mode'] == 'home')
   {
      echo $GLOBALS['news']->getHeadLinks();
   }
}


Dans template.php
Code: Tout sélectionner
<head>
   
   <?php include('themes/default/header-perso.php');?>

   <link rel="stylesheet" type="text/css" href="<?php dcInfo('theme'); ?>/style.css" media="screen" />
   
   <?php dcHeadLinks2(); ?>
   
   <meta name="MSSmartTagsPreventParsing" content="TRUE" />
   <meta name="DC.title" content="ton-Title" />

   <link rel="shortcut icon" href="<?php dcInfo('theme'); ?>/images/favicon.ico" />
   <link rel="alternate" type="application/rss+xml" title="RSS" href="http://feedproxy.google.com/ton-flux" />
   <link rel="alternate" type="application/xml" title="Atom" href="http://feedproxy.google.com/ton-flux" />

</head>


Et le geniallissime header-perso.php
Code: Tout sélectionner
<?php
   
     // Fonction permettant de retourner les x premiers mots d'un texte
     function s_premiersmots($MyString,$nbmots,$separ){
      $StringTab=explode(" ",$MyString);
      for($i=0;$i<$nbmots;$i++)
         $NewString.=$separ."$StringTab[$i]";
      return $NewString;
     }
   
     // Fonction de nettoyage de chaine de caractere (code pas nickel mais ca fonctionne !)
     function s_nettoyerpourkeywords($MyString){
      $NewString=trim($MyString);
      $NewString=str_replace(array('(', ')', '!', '?', '+', '...', '"', '[',']', ':', '&quot;', ','), array('', '', '', '', '', '', '', '', '', '', '', ''), $NewString);
      $NewString=str_replace(array('/','.','-'),array(' ',' ',' '),$NewString);
      $NewString=str_replace(array(' ',' '),array(' ',' '),$NewString);
      $NewString=str_replace(' ',',',$NewString);
      $NewString=str_replace(',,',',',$NewString);
      return $NewString;
     }
   
     // Recuperation du titre complet normal affiche par defaut par Dotclear
     ob_start();
     dcSinglePostTitle('%s - ');dcSingleCatTitle('%s - ');dcSingleMonthTitle('%s - ');dcCustomTitle('%s - ');dcInfo();
     $TitreComplet = strip_tags(ob_get_contents());
     ob_end_clean();
   
     // Recuperation du titre du billet seulement (sera vide si l'on n'affiche pas un billet seul)
     ob_start();
     dcSinglePostTitle('%s');
     $TitreDuBillet = trim(strip_tags(ob_get_contents()));
     ob_end_clean();
   
   if($mode != 'tocHome'){
      // Recuperation des 40 premiers mots du chapo
      ob_start();
      dcPostChapo();
      $DebutDuBillet = trim(s_premiersmots(trim(str_replace('"', '', strip_tags(ob_get_contents()))), 40, ' '));
      ob_end_clean();
      
      if(strlen($DebutDuBillet)==0){
        // Le chapo est vide, donc recuperation du debut du contenu du billet (le cas echeant), soit les 40 premiers mots
        ob_start();
        dcPostContent(40); // Une surcharge de la methode dcPostContent permet de recuperer le nombre de mots specifie : bien pratique !
        $DebutDuBillet = trim(str_replace('"','',strip_tags(ob_get_contents())));
        ob_end_clean();
      }
   }
   
   
     ########## Gestion du plugin Tags : recupeation du tag en cours, le cas echeant
     ob_start();
     twTags::title();
     $TagEnCours = trim(strip_tags(ob_get_contents()));
     ob_end_clean();
   
     ########## Definition des differentes balises dediees SEO
     if(strlen($TitreDuBillet)>0){
      // On definit la balise Titre par le titre du billet en cours (si billet en cours il y a !)
      $BaliseTitre=$TitreDuBillet . " - Djoh En Inde !";
      if(strlen($DebutDuBillet)>0){
        // Definition de la balise Description par le contenu du billet (25 premiers mots du chapo, ou du billet, selon cas)
        $BaliseDescription=$TitreDuBillet." - ".$DebutDuBillet."...";
      } else {
        // Gestion des billets "vides" de texte
        $BaliseDescription=$TitreDuBillet;
      };
      $BaliseKeywords=(strlen($TagEnCours)>0?"tag,":"") . s_nettoyerpourkeywords($BaliseDescription);
     } else {
      // On n'est pas dans un billet, donc gestion de l'unicit? du titre et de la description (qui seront identiques) avec prise en charge des tags
      $BaliseTitre=(strlen($TagEnCours)>0?"$TagEnCours - ":"").$TitreComplet;
      $BaliseDescription="La tu fais une super description, genre pas que des keywords";
      $BaliseKeywords="et, la, une, vraie, liste, de, keywords";
     };
   
    

   if($mode == 'tocHome'){
      $BaliseTitre = "Table des matieres";
      $BaliseDescription = "Tous les articles, toutes les archives. C est le grenier du blog !";
      $BaliseKeywords = "grenier, blog, tout ca, tout ca";
   }
   
   
   $BaliseRobots="<meta name=\"robots\" content=\"";
   $pageSuivante = false;
   $currentURL = $_SERVER['REQUEST_URI'];   
   if($mode== 'pagination' ){
      if (($dc_orig_mode == 'month')||($dc_orig_mode == 'day')||($dc_orig_mode == 'search')||($dc_orig_mode == 'cat')) {
         $BaliseRobots .= "index,follow\" />";
      }
      else {
         $i=0;
         while($i++ < 10){
            $needle="p" . $i;
            if(strpos($currentURL, $needle)) {
               $BaliseRobots .= "index,follow\" />";
               $pageSuivante = true;
               break;
            }
         }
         if(!($pageSuivante)){
            $BaliseRobots .= "index,follow\" />";
         }
      }
   }
   else {    $BaliseRobots .= "index,follow\" />";
   }
   
   if( strpos($currentURL, "tag") || strpos($currentURL, "2006") || strpos($currentURL, "2007") || strpos($currentURL, "2008") || ($err_msg != '') ) $BaliseRobots = '<meta name="robots" content="noindex,follow" />';
   
   for($i=1;$i<10;$i++){
      if(strpos($currentURL, "p".$i)) {
         $BaliseTitre = $BaliseTitre . " - page " . substr($currentURL, 8, 15) ;
         $BaliseDescription = "Page " . substr($currentURL, 8, 15) . " - " . $BaliseDescription;
      }
   }

   
     ########## Ecriture des balises ##########
   
     // écriture de la balise TITLE
     echo "
   <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />   
   <title>$BaliseTitre</title>
   <meta name=\"description\" lang=\"fr\" content=\"$BaliseDescription\" />
   <meta name=\"keywords\" lang=\"fr\" content=\"$BaliseKeywords\" />
   $BaliseRobots
   ";
   echo dcPostNext(1,'<link rel="next" href="%3$s" title="%2$s" />'."\n");
   echo dcPostNext(-1,'   <link rel="previous" href="%3$s" title="%2$s" />'."\n");   
   
?>


Tout ca, c'est inspire des conseils de WRI et egalement de l'Ajblog.

Et Vive dotclear. Vive moi.


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Message le Mer Jan 07, 2009 12:54

Perso j'ai fait ça uniquement en me basant sur le test suivant dans template.php :

Code: Tout sélectionner
if (isset($GLOBALS['pagination_current']) && ($GLOBALS['pagination_current']>1))
{

Stefano
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 273
Inscription: 12 Fév 2006

Message le Mer Jan 07, 2009 14:08

Merci beaucoup pour vos conseils ! En effet le header-perso je l'avais déjà ajouté (même si un peu personnalisé)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

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