L’utilizzo di un tag contenente l’URL canonico delle pagine è una pratica SEO molto utilizzata, che permette di evitare il problema degli url duplicati, cosa che accade di frequente utilizzando i CMS, che generano pagine dinamiche spesso raggiungibili mediante diversi indirizzi (si pensi ad esempio alle pagine di riepilogo di un blog, che contengono ciascuna numerosi articoli ed utilizzano un sistema di paginazione, esse avranno un url diverso per ogni pagina).

Per ovviare a questo problema, si inserisce uno specifico link nella sezione HEAD di ognuna delle pagine, che punterà alla versione “canonica” della pagina, ovvero quella che vogliamo sia indicizzata dal motore di ricerca (le altre pagine verranno così ignorate). Il link avrà la seguente sintassi:

<link rel="canonical" href="https://esempio.com/categoria/titolo-articolo" />

Diversamente da quanto accade in WordPress o in Drupal, il core di Joomla non mette a disposizione una modalità automatica per generare questo tipo di link, sebbene essi siano piuttosto importanti per la SEO, non tanto per i singoli articoli, i cui url sono generati in maniera molto pulita dal nuovo sistema di routing implementato a partire dalla versione 3.8, quanto per le categorie, che invece hanno un sistema di visualizzazione con paginazione che genera dei duplicati.

Il problema può essere risolto utilizzando delle estensioni presenti nella Joomla Extension Directory, tuttavia sono soluzioni che vanno poi tenute aggiornate (molte non funzionano con il nuovo Joomla 4.0) ed in alcuni casi sono a pagamento, quindi potrebbe essere preferibile una soluzione manuale basata sulla funzionalita dei “campi aggiuntivi“.

Vediamo passo per passo la procedura, sia nella versione classica per gli articoli, che in quella per le categorie che, come accennato, spesso risulta essere necessaria per evitare problemi con l’indicizzazione.

Inserire l’url canonico in un articolo

Per prima cosa si deve creare un campo personalizzato che contenga (lato back office, nella scheda di inserimento degli articoli) l’URL canonico.
Per ottenere un risultato più pulito ed ordinato possiamo, sebbene non sia strettamente necessario, creare un gruppo di campi in cui inserire il campo aggiuntivo che conterrà il canonical.
La voce per crearlo si trova all’interno del menù contenuti, come da figura:

Menu di joomla con le voci per i campi aggiuntivi

Selezioniamo quindi “Gruppi di campi aggiuntivi” e quindi il pulsante “nuovo”, creando il gruppo che potrà essere denominato “SEO“:

Creazione del gruppo di campi aggiuntivi

Creato il gruppo, passiamo ad impostare il campo personalizzato che conterrà l’URL canonico, selezionando la voce “campi aggiuntivi” dal menù contenuti:

Campi aggiuntivi
Creazione del campo aggiuntivo

Nelle caselle della maschera vanno impostati i seguenti valori:

  • Tipo: selezionare URL per avere un controllo formale sul testo inserito, in questo modo se si inserisce per errore un url non valido il sistema non permette di continuare.
  • Nome, etichetta e descrizione: inserire i valori che si desidera siano poi visualizzati in fase di inserimento dell’url.
  • Obbligatorio: No.
  • Usa solo in sottomodulo: No.
  • Valore predefinito: lasciare in bianco.
  • Protocolli: selezionare HTTP e HTTPS, che sono gli unici tipi di url validi che verranno ammessi.
  • URL relativi: selezionare No in quanto andrà inserito un url completo compreso di intestazione.
  • Mostra URL: Sì.
  • Gruppo del campo aggiuntivo: selezionare il gruppo appena creato, in questo esempio il nome è SEO.
  • Categoria: Tutte.
  • Accesso: Public.

Nella scheda Opzioni lasciare vuote o inalterate la maggior parte delle voci, ad eccezione di:

  • Modificabile in: scegliere entrambi, questo permette di modificare sia da backend che eventualmente dal frontend (solo dall’utente amministratore o eventuali utenti abilitati).
  • Visualizza campo: scegliere non visualizzare automaticamente, che consente di non mostrare il campo direttamente nel contenuto dell’articolo.

Una volta creato il campo aggiuntivo possiamo controllare la sua effettiva implementazione andando a modificare un articolo del nostro sito, e verificando che sia presente la nuova scheda che lo contiene (nell’esempio la scheda si chiama SEO):

Scheda campo aggiuntivo
Scheda contenente il campo aggiuntivo nella finestra modifica articolo

Come si può notare, la nuova scheda si posiziona tra Opzioni e Pubblicazione, con all’interno il campo per poter inserire l’URL canonico.
Inserendo all’interno del campo l’url completo, comprensivo di http:// o https:// si termina il lavoro dal lato backoffice.

A questo punto occorre procedere con l’inserimento del campo appena creato all’interno del codice web delle pagine create da Joomla. Per poter eseguire questa operazione si deve intervenire sui file del template, la cui modifica diretta è però sconsigliata in quanto ad ogni nuovo aggiornamento dello stesso si perderebbero tutte le modifiche fatte ed andrebbero ripetute.
Il metodo consigliato è quello di procedere con un override, una procedura standard di Joomla che consente di creare una copia di alcuni file utilizzati dal template, in modo che possano essere modificati a piacere senza intaccare il codice originale, e che quindi permettano di mantenere le personalizzazioni anche a seguito di aggiornamenti del tema.

Per creare l’override si entra nella maschera relativa ai template da Sistema -> Template del sito -> *nome template* Dettagli e File, quindi si seleziona la scheda Crea override.
Qui si apre una schermata che contiene tutti i Moduli, Componenti, Plugin e Layout su cui può essere effettuato un override, selezionare com_content nel riquadro Componenti ed infine la sottovoce article, come indicato in figura:

Creazione di un override


Il sistema avvisa che è stato creato un override, nella cartella *nome template*/html/com_content/article/ e, se la procedura è andata a buon fine, si potrà trovare il file da modificare, chiamato default.php, all’interno della cartella stessa.
Nel caso in cui il file non sia presente è possibile andarlo a recuperare manualmente, copiandolo (senza spostarlo) dalla sua posizione originale, che è components/com_content/tmpl/article/default.php.

A questo punto si procede con l’override vero e proprio, aggiungendo al default.php il codice che permette di aggiungere il link canonico all’html dell’articolo, che è il seguente:

//Cerca tra i campi aggiuntivi il campo dell'URL canonico
foreach ($this->item->jcfields as $field) {

        //Utilizzare il valore presente nel campo descrizione del campo aggiuntivo
	if ($field->title === 'Canonical URL') {
		//Controlla che il campo non sia vuoto e quindi inserisce il codice
		if ($field->rawvalue !== '') {
			$canonicalLink = '<link rel="canonical" href="' . $field->rawvalue . '" />';
			$document = JFactory::getDocument();
			$document->addCustomTag($canonicalLink);
		}
		continue;
	}
};

Questo codice può essere inserito in qualsiasi punto del file default.php, purché sia successivo all’istruzione defined(‘_JEXEC’) or die;

A questo punto la procedura è completata, e si possono osservarne i risultati aprendo l’articolo (lato frontend) con un browser e visualizzando l’HTML della pagina, si noterà la presenza della riga contenente l’url canonico.

Codice HTML dell’articolo con evidenziato il link canonical inserito

Inserire l’url canonico in una categoria

Come già accennato, il problema degli url canonici in Joomla è maggiore nelle pagine di riepilogo delle categorie che in quelle degli articoli, perché utilizzando la visualizzazione “Categoria blog” si ottiene un certo numero di pagine contenenti articoli della stessa categoria, entrambi avranno lo stesso url al quale verrà aggiunto un suffisso con la sintassi https://www.esempio.com/categoria?start=*numero articolo di partenza*.

Appare evidente come in questo modo vengano create varie versioni della stessa pagina, tanto maggiori quanti saranno gli articoli presenti nel sito, con il motore di ricerca che le considererà come duplicati.

L’aggiunta del rel=”canonical” è quindi assolutamente raccomandata in questo caso, con la procedura che è molto simile a quella già vista per gli articoli.

L’inserimento del gruppo di campi aggiuntivi e del conseguente campo aggiuntivo avviene in maniera identica, avendo però l’accortezza, nella maschera di inserimento, di selezionare “Categoria” invece di “Articolo” nel menù a tendina posto in alto a sinistra.

Inserimento di campi aggiuntivi per una categoria

Altra cosa da ricordare è che non si può riutilizzare più volte lo stesso nome, quindi se si è già utilizzato il nome “Canonical URL” per gli articoli, sarà necessario inserirne uno diverso per le categorie (nell’esempio Canonical URL categorie”).

Terminata la procedura backend, le cui istruzioni sono presenti nell’analoga procedura già descritta per gli articoli, si procede lato frontend con la creazione dell’override, che sarà effettuato sempre in maniera similare a quello già visto ma sulla voce category di com_content.

Creazione di un override per le categorie

In questo caso la cartella con l’override si chiamerà *nome template*/html/com_content/category/ ed il file da modificare blog.php (attenzione in questo caso non va modificato default.php, che pure sarà presente nella cartella).

Anche per le categorie è possibile recuperare manualmente il file nel caso in cui non sia presente, copiandolo da components/com_content/tmpl/category/blog.php.

Il codice da aggiungere, sempre da posizionare dopo l’istruzione defined(‘_JEXEC’) or die; è molto simile a quello già visto per gli articoli, con l’accortezza di sostituire category ad item nel ciclo foreach:



//Cerca tra i campi aggiuntivi il campo dell'URL canonico
foreach ($this->category->jcfields as $field) {

        //Utilizzare il valore presente nel campo descrizione del campo aggiuntivo
	if ($field->title === 'Canonical URL categorie') {
		//Controlla che il campo non sia vuoto e quindi inserisce il codice
		if ($field->rawvalue !== '') {
			$canonicalLink = '<link rel="canonical" href="' . $field->rawvalue . '" />';
			$document = JFactory::getDocument();
			$document->addCustomTag($canonicalLink);
		}
		continue;
	}
};

Applicate le modifiche si potrà notare la presenza del link canonico all’interno delle pagine delle categorie.

In conclusione è importante ricordare come questa modifica non sia automatica, e quindi nel caso in cui si dovesse cambiare per un qualsiasi motivo l’url di uno o più articoli (o categorie) è necessario ripetere la modifica anche sul nuovo campo che contiene l’url canonico, per non incorrere in grossi problemi di indicizzazione.

La procedura, pur non essendo immediata e semplicissima, consente tuttavia di effettuare la modifica mantenendo il pieno controllo su di essa, cosa non sempre possibile con le estensioni che potrebbero generare problemi in futuro, ad esempio nel momento in cui si aggiorna ad una versione più recente (come già accennato in quest’ultimo aggiornamento alla 4.0 molte estensioni sono divenute inutilizzabili ed installarle provocherebbe un crash del sistema).

Categorie: JoomlaSEO

11 commenti

Luigi · 22 Nov 2022 alle 12:34

Tutto abbastanza chiaro tranne per due cose

Le modifiche del file default.php vanno fatte direttamente nella cartella sul server? Io ho utilizzato filezilla, scaricato il file in locale, fatta la modifica e ricaricato nella stessa posizione. E’ corretto?

Una volta impostato l’URL canonico per le categorie, qual è l’URL che effettivamente andrà scritto nel campo aggiuntivo così creato?

    Chris · 22 Nov 2022 alle 21:44

    Non è necessario che la modifica sia fatta direttamente sul server, va benissimo come ha fatto, scaricare il file, modificarlo e ricaricarlo.

    Nel campo aggiuntivo andrà scritto l’url della pagina categoria blog, ad esempio nomedelsito.com/categoria, oppure se si è scelto di aggiungere il suffisso html nomedelsito.com/categoria.html

      Luigi · 23 Nov 2022 alle 10:28

      quindi, ricapitolando, nella nuova scheda SEO mi ritrovo due nuovi campi, quello per l’URL canonico dell’articolo e quello per l’URL della categoria, li compilo entrambi per ogni articolo passato e futuro.

      Tutto molto chiaro e soprattutto utile.

      Grazie ancora

        Chris · 23 Nov 2022 alle 17:12

        In realtà i nuovi campi sono sì due, ma non compaiono mai assieme, perché uno (che nell’esempio è chiamato canonical url) appare solo se si modifica un articolo, mentre l’altro (nell’esempio canonical url categorie) solo quando si apportano modifiche ad una categoria.
        Per il resto sì, è bene compilarli per tutti gli articoli

Maurizio · 17 Feb 2023 alle 12:11

Ciao, grazie per l’esposizione chiarissima ed utile.
Ho una domanda.
Vedo l’override fatto su Cassioeia: va fatto per ciascun template utilizzato?
O meglio, fa vatto per il template usato per mostrare l’articolo/la categoria su cui si sta lavorando per impostare il canonical?

Grazie
Maurizio

    Chris · 20 Feb 2023 alle 18:14

    Sì, l’override nell’esempio è fatto su Cassiopeia ma va effettuato per ciascun template utilizzato dal sito, altrimenti le pagine che usano il template su cui non si fa l’override non mostreranno poi il canonical

tommaso · 10 Mar 2023 alle 15:37

a me non funziona forse perchè non ho aggiunto quello della categoria?
in caso grazie per l’aiuto,
ps non capisco perchè joomla 4 e gli sviluppatori hanno lasciato invano una cosa cosi importante
saluti

    Chris · 16 Mar 2023 alle 12:33

    per vederlo nelle categorie devi aggiungere quello della categoria, per gli articoli va utilizzata la prima parte della procedura, funzionano anche uno indipendentemente dall’altro

Marco · 1 Mag 2023 alle 14:26

Ciao Chris, complimenti per l’intuitivo articolo.
Provato e riscontro il corretto funzionamento sui singoli articoli, mentre, pur copiando le stesse operazioni e passaggi, non riesco ad avere il Canonical sulle pagina categoria.
Hai mai riscontrato simile problema?
Grazie

    Chris · 12 Mag 2023 alle 16:31

    Potresti provare ad inserirlo più in basso, prima della chiusura ?> del php iniziale, in uno dei siti ho risolto in questo modo

Farshid · 9 Dic 2023 alle 12:23

Grazie, è stato molto utile.
Buon lavoro
Farshid

Lascia un commento

Segnaposto per l'avatar

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *