• Menu
  • Skip to primary navigation
  • Skip to secondary navigation
  • Skip to content
  • Skip to primary sidebar
  • Skip to footer

Ing. Flavio Albano

Il tuo SEO e SMM ad Agrigento

  • Home
  • Blog
  • Su di me
  • Servizi Offerti
    • Webmaster
    • SEO
    • SMM
    • Copywriter
  • Contattami
    • Form di Contatto
    • Come Arrivare
    • Info di Contatto
  • Privacy Policy
  • Home
  • Blog
  • Su di me
  • Servizi Offerti
    • Webmaster
    • SEO
    • SMM
    • Copywriter
  • Contattami
    • Form di Contatto
    • Come Arrivare
    • Info di Contatto

Ottimizziamo i Tags di WordPress con Luca Terribili

Home » Blog » SEO » Ottimizziamo i Tags di WordPress con Luca Terribili
screenshot del frontend di wordpress appena installato con tema di default
Di User:Uusijani (screenshot), WordPress.org (design) - Self-made screenshot, GPL, https://commons.wikimedia.org/w/index.php?curid=11428658

7 Novembre 2017 //  by Flavio Albano//  Leave a Comment

Quest’oggi vi presento l’ottimo Luca Terribili di NetworkTrading.it, autore di questo pezzo.

 


Chi utilizza WordPress conoscerà sicuramente i tags, ma in quanti sanno utilizzarli correttamente? In questo articolo non daremo i soliti consigli, ma andremo un po’ più sul tecnico, smanettando sul codice della piattaforma per rendere questi elementi più appetibili per i motori di ricerca.

Sicuramente starete utilizzando il plugin Yoast, avrete già aggiunto title e meta description, ma obiettivamente si può fare molto di più, anche non avendo particolari conoscenze di web design e programmazione.

Vediamo da che parte cominciare. Se non l’avete ancora fatto, dobbiamo creare un child theme in modo che queste modifiche non vengano sovrascritte al primo aggiornamento del tema. All’interno della cartella del child theme dobbiamo creare, oltre al foglio di stile indispensabile per il funzionamento, due files ulteriori: functions.php e tag.php.

WordPress richiama le pagine in ordine gerarchico, se è presente un child theme, la piattaforma scorrerà al suo interno, altrimenti si rivolge direttamente al parent theme. Allo stesso modo, anche i files sono disponibili per gerarchia: quando l’utente visualizza la pagina dei tags, WordPress cercherà da prima il file tag.php, se questo non è presente la richiesta sarà soddisfatta dal più generico archive.php, valido per tutti tags, categorie, data e autore.

Detto questo, ci basterà copiare il file tag.php dalla cartella del parent theme a quella del child theme. Se questo non è presente, prendiamo il file archive.php, copiamolo nella nuova destinazione e rinominiamolo in tag.php.

Ci siamo, ora passiamo alle ottimizzazioni. Il primo intervento che vi propongo è mostrare la descrizione dei tag solo nella prima pagina, in modo da non avere testo ripetuto nelle pagine successive. Ora, ciascun tema ha la sua struttura, ma in linea di massima dovremmo avere una stringa che richiama descrizione nel seguente formato, più o meno

PHP
1
the_archive_description('<div class="entry-content">', '</div>');

 

 

Per mostrare la descrizione solo nella prima pagina, dobbiamo intercettare la richiesta dall’url. Come facciamo? Sostituiamo la stringa precedente, con questa porzione di codice

PHP
1
2
3
4
5
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
if(1 == $paged)
{
the_archive_description('<div class="entry-content">', '</div>');
}

 

 

Se i vostri tags non contengono molti articoli, possiamo anche eliminare la paginazione, lasciandola però intatta nelle categorie. In questo modo possiamo risparmiare del prezioso crawling budget. Questa volta dobbiamo operare sul file functions.php andando a modificare la main query che genera il loop.

Dobbiamo agganciarci all’hook pre_get_posts, in modo da modificare l’output finale. Per chi non lo sapesse, gli hooks sono delle “zone” nevralgiche di WordPress, dove lo sviluppatore può inserirsi e personalizzare il CMS a suo piacimento. Aggiungiamo quindi un’action sull’hook in questione.

1
add_action('pre_get_posts', 'remove_pagination_for_tags');

PHP
1
add_action('pre_get_posts', 'remove_pagination_for_tags');

 

Come vediamo la funzione add_action contiene due parametri: il primo è il gancio dove inserirsi e il secondo è la funzione personalizzata dove scrivere il nostro codice. La nostra funzione personalizzata andrà a modificare la main query

PHP
1
2
3
4
5
6
7
function remove_pagination_for_tags($query)
{
if (is_tag() && $query->is_main_query())
{
  $query->set('nopaging', 1);
}
}

 

A questo punto, tutti gli articoli che popolano i tags saranno visualizzati solo nella prima pagina. Purtroppo la modifica non è definitiva, diciamo che abbiamo solamente ingannato WordPress, che continuerà a creare un certo numero di pagine, pari al rapporto tra elementi totali e numero di articoli visualizzabili per pagina. In parole povere avremo una serie di pagine duplicate.

Per ovviare a questo problema, riportiamoci all’interno del file tag.php e aggiungiamo alla fine del codice che abbiamo inserito in precedenza, una semplice condizione che reindirizza alla prima pagina quando viene fatta una richiesta di pagina successiva.

Per tanto, il codice precedente sarà così:

PHP
1
2
3
4
5
6
7
8
9
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
if(1 == $paged)
{
the_archive_description('<div class="entry-content">', '</div>');
}
else
{
wp_redirect(get_term_link(get_queried_object()->term_id));
}

 

Infine vi suggerisco una terza personalizzazione, un pochino più complessa. Con questa strategia, lasciando intatta la paginazione, andremo a spostare gli articoli dalla prima pagina, compensandoli con un nuovo elemento nella paginazione. Nella prima pagina metteremo quello che ci pare, ad esempio del testo introduttivo. Ripeto che la modifica è articolata, per cui prima di procedere fate un bel backup.

Portiamoci sul file functions.php e spostiamo tutti gli articoli avanti di una pagina

PHP
1
2
3
4
5
6
7
8
9
10
11
add_action('pre_get_posts', 'my_query_offset', 1);
 
function my_query_offset(&$query)
{
if(is_tag())
{
  $offset = $posts_per_page = get_option('posts_per_page');
  $page_offset = $offset - (($query->query_vars['paged']-1) * $posts_per_page);
  $query->set('offset', $page_offset );
}
}

 

Completiamo la modifica aggiungendo un nuovo elemento nella paginazione

PHP
1
2
3
4
5
6
7
8
9
10
11
add_filter('found_posts', 'my_offset_pagination', 1, 2 );
 
function my_offset_pagination($found_posts, $query)
{
if(is_tag())
{
  $offset = get_option('posts_per_page');
  return $found_posts + $offset;
}
else return $found_posts;
}

 

Ora andiamo sul file tag.php, useremo come riferimento il codice presente nel tema Twenty Twelve. La porzione di codice che ci interessa modificare è la seguente:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
/* Start the Loop */
while ( have_posts() ) : the_post();
/*
* Include the post format-specific template for the content. If you want to
* this in a child theme then include a file called called content-___.php
* (where ___ is the post format) and that will be used instead.
*/
get_template_part( 'content', get_post_format() );
endwhile;
twentytwelve_content_nav( 'nav-below' );
?>
<?php else : ?>
<?php get_template_part( 'content', 'none' ); ?>
<?php endif; ?>

 

Ed ecco la versione modificata:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
if($paged == 1):
// siamo in prima pagina, mostriamo contenuto personalizzato
// qui il tuo contenuto personalizzato
twentytwelve_content_nav( 'nav-below' );
else:
/* Start the Loop */
while ( have_posts() ) : the_post();
/*
* Include the post format-specific template for the content. If you want to
* this in a child theme then include a file called called content-___.php
* (where ___ is the post format) and that will be used instead.
*/
get_template_part( 'content', get_post_format() );
endwhile;
twentytwelve_content_nav( 'nav-below' );
?>
<?php else : ?>
<?php get_template_part( 'content', 'none' ); ?>
<?php endif; ?>

 

Dove c’è il commento “qui il tuo contenuto personalizzato” potete mettere quello che vi pare: uno slider, del testo personalizzata, gli articoli più letti, etc. Potete anche creare un file apposito, da richiamare la funzione get_template_part. Le possibilità sono infinite, basta solo sapere dove mettere le mani.

Correlati

Categoria: SEO, WordpressTag: SEO On-Site

About Flavio Albano

Da sempre appassionato di tecnologia non ho mai smesso di credere nell'open-source e nella condivisione della conoscenza. Laureato in ingegneria civile per un errore di gioventù ed utilizzatore di Linux dal 1998 (la prima distribuzione era una Slackware... e la prima non si scorda mai ;) )

Previous Post: «macchina da scrivere ed altri strumenti utili per un copywriter Il Seo Copywriter, Una Figura Indispensabile Per Produrre I Giusti Contenuti
Next Post: Il Seo Engineer, Una Figura Indispensabile Per Il Tuo Sito ing flavio albano seo engineer»

Reader Interactions

Rispondi Annulla risposta

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Primary Sidebar

Articoli recenti

  • Social Media Manager: Mestiere o Missione?
  • Storytelling: come raccontare un Brand
  • Come Ottimizzare robots.txt e .htaccess per il SEO
  • SEO ed OSINT: Una piccola raccolta di tool per l’intelligence
  • Vendere online negli USA

Commenti recenti

  • Flavio Albano su SEO ed OSINT: Una piccola raccolta di tool per l’intelligence
  • Fabio Sermatica su SEO ed OSINT: Una piccola raccolta di tool per l’intelligence
  • Flavio Albano su Come Ottimizzare robots.txt e .htaccess per il SEO
  • Aldo su Come Ottimizzare robots.txt e .htaccess per il SEO
  • Flavio Albano su Come Ottimizzare robots.txt e .htaccess per il SEO

Classifica Articoli e Pagine

  • SEO ed OSINT: Una piccola raccolta di tool per l'intelligence
  • Growth Hacking su Instagram con Everliker
  • I Principali Test per un Sito Web in Ottica SEO
  • Homepage
  • Su di me
  • Come Ottimizzare robots.txt e .htaccess per il SEO

Categorie

Grafica Intelligence Interviste Marketing Python Security SEO SMM Varie Webmaster Wordpress

Tag

Agrigento Amazon AWS Brand CLA CMS Copywriting Cybersecurity Debian Docker Grafica Raster Grafica Vettoriale Growth Hacking Immagini Instagram Java Let's Encrypt Link Building Linux Local SEO Marketing Intelligence SEO Off-Site SEO On-Site Serpchecker Siciliani all'estero Storytelling Turismo Ubuntu

Footer

Contatti

Indirizzo
Via Papa Luciani, 5 - 92100 - Agrigento (AG)

Telefono
+39.0922.1901512

Cellulare
+39.320.8482814

Email
flavio@ingegnerealbano.com

Copyright

I contenuti presenti sul sito ingegnerealbano.com, dei quali l’Ing Calogero Flavio Albano è autore, non possono essere copiati, riprodotti, pubblicati o redistribuiti perché appartenenti all’autore stesso. È vietata la copia e la riproduzione dei contenuti in qualsiasi modo o forma. È vietata la pubblicazione e la redistribuzione dei contenuti non autorizzata espressamente dall’autore.

Disclaimer

Questo blog non rappresenta una testata giornalistica in quanto viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62 del 07/03/2001.

Seguimi sui Social

  • Privacy Policy

Copyright © 2019 Ing. Flavio Albano · P.IVA: 02921790842 · All Rights Reserved