Visualizzare il numero di pagina nell’elemento title

Come differenziare tra loro le pagine di un blog su Wordpress, specificando il numero di pagina nell’elemento title di ciascuna di esse. Con un pizzico di attenzione si ottengono risultati estremamente interessanti.

Questo è un post tecnico di 7 anni fa. Le istruzioni potrebbero non essere più valide.

Qualche giorno fa un utente del mio forum mi ha chiesto di aiutarlo a inserire nell’elemento title della pagina, qualora il post di WordPress o la pagina “statica” fosse suddivisa su più pagine, il numero di pagina attualmente visualizzata: in altre parole, avere un titolo di questo tipo “Titolo della pagina – Pagina 7”. Mentre era riuscito a farlo con le pagine di archivio, non aveva avuto altrettanto successo con quelle dei post (e, aggiungo io, con quelle delle pagine statiche).

Il motivo è semplice: la variabile $paged, che contiene il numero di pagina attualmente visualizzata, è attiva nella home e nell’archivio, cioè data, autore, categoria, tag; per i post e le pagine che si estendono su più pagine bisogna usarne un’altra: la semplice $page.

La richiesta del lettore è stata molto istruttiva per me e il merito di questo post, dunque, va dato a lui, che ringrazio per avermi spinto ad analizzare questa faccenda e a farmi entrare nei meandri di /wp-includes/post-template.php. Ho anche approfittato dell’occasione per implementare questa soluzione in Ubuntu block notes, che in questo articolo vi mostro.

Inserire il numero di pagina attuale nell’elemento title

Di solito nel file header.php troviamo che il tag title è generato da una riga simile:

<title>
	<?php wp_title('&laquo;', true, 'right'); ?> <?php bloginfo('name'); ?>
</title>

che ci restituisce:

<title>Titolo del post << Titolo del blog</title>

o, se siamo in un archivio di categoria, sarà:

<title>Nome categoria << Titolo del blog</title>

Questa soluzione, però, può essere migliorata dando al lettore altre informazioni più chiare e dettagliate. Credo che anche dal punto di vista SEO si abbiano miglioramenti, ma non ho verificato.

Nel mio header.php la semplice riga è stata sostituita con le seguenti, che differenziano il titolo ogni volta che si accede a un determinato tipo di pagina: articolo, pagina statica, archivio. Ecco le righe:

<title>
 <?php
  /**
   * Prepara il titolo della pagina a seconda del tipo
   * Stampa anche il numero di pagina a partire dalla seconda
   *
   * $paged contiene l'attuale numero di pagina nella home e nell'archivio
   * $page  contiene l'attuale numero di pagina di un articolo multipagine o di una pagina multipagine
   *
   */
  if (is_home()) {
   echo 'Home';
   // Si può usare `if (is_paged())` oppure `if ($paged)` oppure `if ($paged > 1)`
   // Nella prima pagina di una serie, $paged è sempre 0
   if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_category()) {
   echo 'Archivio della categoria &laquo;'.single_cat_title('', false).'&raquo;';
   if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_tag()) {
   echo 'Archivio del tag &laquo;'.single_tag_title('', false).'&raquo;';
   if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_day()) {
   echo 'Archivio del '.get_the_time('j F Y');
   if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_month()) {
   echo 'Archivio di '.get_the_time('F Y');
   if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_year()) {
   echo 'Archivio per l\'anno '.get_the_time('Y');
   if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_author()) {
   $author = $wp_query->get_queried_object();
   echo 'Archivio di '.$author->display_name;
   if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_search()) {
   echo 'Risultati della ricerca di &laquo;'.wp_specialchars($s).'&raquo;';
   if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_404()) {
   echo 'Errore 404: Non trovato';
  } elseif (is_single() || is_page()) {
   wp_title('');
   // qui non si può usare $paged: si usa $page al suo posto
   if ($page) { echo ' | Pagina '.$page; }
  }
  echo ' &lsaquo; '.get_bloginfo('name');
 ?>
</title>

Ci sono dei commenti nel codice: penso siano chiari.

Provate, ora, a dare un’occhiata al titolo pagina della pagina 2 del blog: mentre nella 1 (la homepage) il numero non viene stampato, lo vediamo dalla 2 in poi; così anche date un’occhiata alla categoria WordPress, al tag Guide del blog, a un archivio basato su anno o su ricerca.

Date ora uno sguardo a un post suddiviso su più pagine: il title presenta solo il titolo dell’articolo più il nome del blog, mentre nella pagina 2 vediamo scritto anche il numero.

Specificare anche il numero totale di pagine

E se volessimo aggiungere anche il numero complessivo delle pagine, nella forma: “Pagina 3 di 10”?

Anche in questo caso dovremmo distinguere se si tratta di Home/Archivio e di Post/Pagina. Nel primo caso useremmo:

if ($paged) { echo ' | Pagina '.$paged.' di '.$wp_query->max_num_pages; }

mentre nel secondo dobbiamo agire diversamente perché non abbiamo una variabile diretta fuori dal loop:

global $page;
$pages = count( explode( '<!--nextpage-->', $wp_query->post->post_content ) );
if ($page) { echo ' | Pagina '.$page.' di '.$pages; }

Usare queste forme in altre parti del tema

Chiaramente questa soluzione può essere usata altrove. Io l’ho fatto nel template single.php nel caso il post sia suddiviso su più pagine: a lato del testo appare la dicitura che restituisce le informazioni. L’ho usata anche nelle ricerche che si estendono su più pagine e anche nelle pagine d’archivio: penso sia un servizio in più che si fornisce al lettore.

Mi fermo qui, con la promessa di scrivere qualcosa di più dettagliato su questo argomento e anche su come ho agito per personalizzare il mio archivio e le informazioni che ne escono.

Autore: Aldo Latino

Aldo Latino usa con entusiasmo Linux nella distribuzione Ubuntu, è un appassionato di WordPress e si diletta a fare il blogger. Ha anche una lista dei desideri. Per altre informazioni visita la sua .

19 pensieri riguardo “Visualizzare il numero di pagina nell’elemento title”

  1. Pingback: Marco
  2. Ciao Aldo, sono stato io a porti la domanda sul forum. Ti assicuro che ci ha provato parecchia gente senza riuscire a risolvere. Ho messo risolto nel forum. Grazie tante. Ti dirotterò un pò di gente che ha lo stesso problema. Una cosa: cosa intendi con “questa soluzione, però, può essere migliorata dando al lettore altre informazioni più chiare e dettagliate”?
    Buona giornata.

    1. Ciao Claudio, benvenuto.
      Con quella frase stavo facendo un confronto tra la soluzione standard che troviamo generalmente in un tema di WordPress e quella nuova che spiego nel post: se inserisco nel title “Titolo dell’articolo – Pagina 3”, sto effettivamente dando informazioni più chiare e dettagliate al lettore. :smile:

      1. Allora avevo capito giusto. Ti posso dire che il problema è nato proprio pensando a come migliorare il SEO dei post paginati (titolo e descrizioni duplicate), senza ricorrere al canonical oppure al robots.
        Posso garantire per esperienza diretta che c’è un netto miglioramento ai fini SEO, a patto di eliminare dai post in questione il tag description. Non mi dilungo su questo aspetto per non andare off topic.

        :grin:

        1. Ho appurato personalmente che i post si posizionano bene anche senza avere
          una description (tranne su Bing del quale non ho ancora compreso l’algoritmo). In assenza di questo meta tag infatti, gli spider non fanno altro che usare (come descrizione nella snippet) il contenuto della pagina più attinente alla keyword inserita nel campo cerca del motore, aumentando anche la percentuale di click. Questa è la mia esperienza personale ed anche la tecnica usata da blog prestigiosi che addirittura non mettono description neanche nella home (vedi ad esempio tagliablog). Nello specifico dei post paginati, la tua soluzione elimina il titolo duplicato ma se si lascia la descrizione questa sarà duplicata e può essere penalizzante. Personalmente uso title e description solo in home. Nei post, dopo vari test, ho deciso di rimuovere definitivamente la descrizione. Questo perchè ho constatato che con tale soluzione i risultati in termini di posizionamento, click, e pagerank, sono migliori.

        2. È probabile che tu abbia ragione, ma non ho verificato quanto la descrizione possa incidere lato SEO. In ogni caso, ad agosto scorso scrissi un articolo su come specificare una descrizione precisa e tag precisi in ogni post: penso che includendo nel post questi elementi e differenziando così la pagina dal resto, si dovrebbero ottenere buoni risultati. O no?

  3. Per chi segue i commenti via email o feed, ho aggiornato il post nel paragrafo “Specificare anche il numero totale di pagine”, grazie a John che mi ha dato una mano qui.

  4. Vero Aldo, sempre io ero che ti chiesi lumi su come si poteva fare a modificare il codice; purtroppo subito dopo, a causa dei title e description duplicati nei post paginati dovetti rimuovere il tuo ottimo script. Non ti ho fatto sapere i risultati SEO perchè l’ho usato solo un paio di settimane ed una analisi basata su 15 giorni non credo possa essere affidabile. I risultati SEO di cui ti parlavo sopra erano riferiti ad altri esperimenti fatti in tempi più lunghi e considerando anche le strategie adottate da altri blog. Adesso mi tocca velocizzare il più possibile il blog (molti segnali mi fanno pensare che l’algoritmo Caffeine di Google sia alle porte) dopodichè rimetto lo script per i meta tag e riparto con un nuovo test. Sarai il primo a saperne i risultati. Mi sa che frequenterò più spesso il tuo blog. Mi stai dando un sacco di dritte e insegnamenti utili. :smile:

  5. Aldo scusa ma mi si è accesa la lampadina del dubbio su una cosa. Mi pare che su wordpress proprio per eliminare i problemi evidenziati in questo post sia stato adottato il canonical. Non è che comunque wordpress continua ad ignorare i contenuti delle pagine successive alla prima nei post paginati, fregandosene dello script in oggetto? Che dici è il caso di disattivare il canonical?

    1. L’elemento link con attributo canonical è stato inventato da Google perché serve al motore di ricerca: quindi, in questo caso, a noi interessa che il motore legga correttamente i dati e non WordPress.

      Questo attributo, poi, specifica quale sia il link “canonico” per un gruppo di pagine con gli stessi contenuti o, in altre parole, quale link noi vogliamo che Google tenga come principale fra più pagine dal contenuto identico (o con lievi differenze). Si dia il caso di un mio post pubblicato sul mio blog e ripubblicato via feed su altri 10 siti: con il link “canonical” Google saprà quale sia quello originale.

      Ma se ho cinque pagine di un singolo articolo che parlano di un dato argomento, il link “canonical” in testa alla pagina dirà a Google che la pagina principale è la prima. L’unica cosa che mi fa pensare è che il contenuto è completamente diverso tra le 5 pagine dell’articolo (ovviamente), ma immagino che Google tenga comunque come link “canonico” quello alla pagina 1. Potrei sbagliarmi, visto che non sono esperto di SEO, per cui chiederei conferma a chi è ferrato sull’argomento.

  6. …immagino che Google tenga comunque come link “canonico” quello alla pagina 1…
    infatti è proprio così. Col canonical google indicizza solo il contenuto e i link presenti nella prima pagina e non delle successive. Purtroppo nell’ultima versione di wordpress il canonical è implementato diciamo di serie. Io cerco di capire come posso rimuovere la funzione che genera il canonical su wordpress.

    1. remove_action('wp_head', 'rel_canonical');

      da inserire nel tuo functions.php anche se penserei a come migliorarlo invece che a toglierlo globalmente.

      1. Hai ragione. Ho letto l’ottimo articolo di jeff. Ci ragionerò sopra per bene prima di decidere cosa fare.

  7. Anche perchè coi post paginati si crea anche il problema dei commenti che si ripetono in tutte le pagine. Intanto ho impostato su disallow i commenti. Non è una soluzione ma un tampone temporaneo. Cavolo quando si pensa di aver risolto un problema, ecco che se ne presenta un altro.

  8. Pingback: layers.com

I commenti sono chiusi