CMS – Content Management System

Guide su come utilizzare i CMS, Content Management System, per la gestione di siti con molti contenuti

Joomla: articoli orfani non collegati a menu

0

Uno dei bug più fastidiosi delle vecchie versioni di Joomla in versione SEF, bug ancora presente in moltissimi plugin scritti in pessimo php e con scarso supporto SEF, riguarda la creazione di pagine duplicate per articoli non assegnati ad alcun menù oppure non presenti in alcuna categoria collegata direttamente ad un menù.

Commettere l’errore di non controllare plugin di terze parti (oppure di utilizzare versioni vecchie di Joomla) avendo abilitato gli URL search engine friendly può essere fatale, dato che questi articoli orfani possono creare montagne di pagine duplicate.

Non esistono al momento estensioni di Joomla per trovare questi articoli orfani non associati a nessun menù, ma con una semplice query SQL (da eseguire su shell o in phpMyAdmin) potete iniziare ad avere delle indicazioni importanti.

La seguente interrogazione SQL incrocia i dati delle tabelle jos_menu e jos_content e vi indica tutti gli articoli non associati direttamente ad un menù.


SELECT * FROM `jos_content` AS co WHERE co.id NOT IN (SELECT c.id FROM `jos_menu` as m join `jos_content` as c on m.link = concat('index.php?option=com_content&view=article&id=',c.id));

 

Tenete però presente che la query qui sopra vi inserirà tra i risultati anche gli articoli (decine, centinaia o migliaia) che hanno un loro url univoco e che non presentano potenziali problemi, perchè associati ad una voce di menù di tipo “aspetto categoria” o “aspetto categoria blog”, come può essere ad esempio una sezione NEWS.

Se avete una soluzione per rimuovere questi “falsi positivi” segnalatemelo. La soluzione data da un sito a pagamento (expert-exchange) qui di seguito NON funziona.

SELECT * FROM `jos_content` AS co WHERE co.id NOT IN (SELECT c.id FROM `jos_menu` as m join `jos_content` as c on m.link = concat('index.php?option=com_content&view=article&id=',c.id))
AND co.catid NOT IN (SELECT SUBSTRING_INDEX(`link`,'=',-1) FROM `jos_menu` WHERE `link` LIKE 'index.php?option=com_content&view=&category%' AND `published` = 1)

Rimuovere pagine duplicate da VirtueMart

3

VirtueMart è un componente aggiuntivo Open Source per Joomla che permette di installare sul vostro sito web un carrello elettronico, in modo da realizzare un vero e proprio eCommerce con il vostro sito Joomla.

Virtue Mart, sebbene sia gratuito, è un componente molto complesso e a mio avviso completo, in continua evoluzione grazie alla vasta comunità di sviluppatori ed utilizzatori che ne sono interessati.

A livello SEO però VirtueMart ha dei grandissimi problemi, almeno per quanto riguarda le versioni da me testate: VirtueMart crea un numero spropositato di pagine duplicate, problema molto grave per chi guarda al proprio sito internet nell’ottica del posizionamento sui motori.

Nel sito oggetto di studio (Veramente Naturale, negozio di cosmetici naturali) sono stati innanzitutto abilitati gli URL SEF nel pannello di controllo di Joomla agganciando VirtueMart all’url /shop : le pagine duplicate erano esattamente quelle riportate qui sotto. Il cliente aveva inoltre creato manualmente dei link invertendo l’ordine dei parametri della query string, in modo che vi fossero ulteriori versioni duplicate con i parametri invertiti.

Per capire subito di cosa parliamo, vi propongo un esempio concreto di come VirtueMart crea pagine duplicate, ovvero molte versioni identiche dello stesso prodotto

  1. /index.php?option=com_virtuemart&page=shop.browse&category_id=29&lang=it&Itemid=233&vmcchk=1
  2. /index.php?option=com_virtuemart&page=shop.browse&category_id=29&lang=it&Itemid=233
  3. /index.php?option=com_virtuemart&page=shop.browse&category_id=29&lang=it
  4. /index.php?option=com_virtuemart&page=shop.browse&category_id=29
  5. /shop?page=shop.browse&category_id=29&lang=it&Itemid=233&vmcchk=1
  6. /shop?page=shop.browse&category_id=29&lang=it&Itemid=233
  7. /shop?page=shop.browse&category_id=29&lang=it
  8. /shop?page=shop.browse&category_id=29

Come potete vedere, VirtueMart crea per la stessa pagina 8 versioni identiche. Sebbene Google sia in grado di stabilire se i parametri della query string siano necessari o no per identificare univocamente la pagina, alcune varianti duplicate restano, e la nostra pagina risulta di scarso valore agli occhi dei motori di ricerca.

Vi sono alcune soluzioni per ovviare al problema: la prima comporta l’installazione di plugin aggiuntivi per Joomla che sono in grado di trasformare VirtueMart nella versione con URL SEF , la seconda richiede la modifica del file .htaccess per rimuovere la maggior parte delle pagine duplicate grazie all’utilizzo dei redirect permanenti (redirect 301 di mod_rewrite di Apache).

1- Utilizzo di plugin SEF di Joomla

sh404SEF è a detta di molti esperti il migliore plugin SEF per VirtueMart. Personalmente preferisco evitare l’utilizzo di plugin esterni e limitarmi al core SEF di Joomla, pertanto passerò alla seconda soluzione, quella ingegneristicamente più interessante, molto difficile da trovare sul web.

2- Modifica del file .htaccess e mod_rewrite

La soluzione che proporrò nelle prossime righe è altamente complessa ed è intesa unicamente ad offrire spunti a chi già conosce .htaccess e mod_rewrite.

In questo caso gli URL di VirtueMart non sono veri e propri URL SEF, dal momento che permangono alcuni parametri nella query string. Tuttavia ho personalmente riscontrato ottimi risultati a livello SEO anche senza gli URL SEF su virtuemart, dunque rimango del parere che sia meglio affidarsi al proprio ingegno per risolvere un problema di duplicazione delle pagine piuttosto che affidarsi a plugin che non conosciamo.

Iniziamo a vedere le righe di codice da inserire nel file .htaccess per rimuovere alcuni dei parametri della query string non necessari. Dopo il codice cercherò di spiegare il significato delle istruzioni, numerate da 1 a 9 per comodità.

  1. RewriteEngine On
  2. RewriteCond %{QUERY_STRING} (.*)(^Itemid=[a-zA-Z0-9]+&?|^&Itemid=[a-zA-Z0-9]+&|&Itemid=[a-zA-Z0-9]+)(&?.*)
  3. RewriteRule (.*) %{REQUEST_URI}?%1%3 [L,R=301]
  4. RewriteCond %{QUERY_STRING} (.*)(^lang=[a-zA-Z0-9]+&?|^&lang=[a-zA-Z0-9]+&|&lang=[a-zA-Z0-9]+)(&?.*)
  5. RewriteRule (.*) %{REQUEST_URI}?%1%3 [L,R=301]
  6. RewriteCond %{QUERY_STRING} ^(.+&)option=com_virtuemart(.+)?$ [NC]
  7. RewriteRule ^index\.php$ http://%{HTTP_HOST}/shop$1?%1%2 [R=301,L]
  8. RewriteCond %{QUERY_STRING} ^(.+&)?option=com_virtuemart&(.+)?$ [NC]
  9. RewriteRule ^index\.php$ http://%{HTTP_HOST}/shop$1?%1%2 [R=301,L]

Vediamo il significato di ogni istruzione.

  1. RewriteEngine On
    Indica a Apache di utilizzare mod_rewrite per la riscrittura degli URL
  2. RewriteCond %{QUERY_STRING} (.*)(^Itemid=[a-zA-Z0-9]+&?|^&Itemid=[a-zA-Z0-9]+&|&Itemid=[a-zA-Z0-9]+)(&?.*)
    Ricerca all’interno della query string la stringa Itemid= , inutile utilizzando VirtueMart con URL SEF
  3. RewriteRule (.*) %{REQUEST_URI}?%1%3 [L,R=301]
    Rimuove la stringa cercata dall’URL con un redirect permanente
  4. RewriteCond %{QUERY_STRING} (.*)(^lang=[a-zA-Z0-9]+&?|^&lang=[a-zA-Z0-9]+&|&lang=[a-zA-Z0-9]+)(&?.*)
    Ricerca la stringa lang= nella query string, aggiunta dal plugin Joomfish non in uso
  5. RewriteRule (.*) %{REQUEST_URI}?%1%3 [L,R=301]
    Rimuove la stringa cercata dall’URL con un redirect 301 permanente
  6. RewriteCond %{QUERY_STRING} ^(.+&)option=com_virtuemart(.+)?$ [NC]
    Ricerca la stringa option=com_virtuemart in mezzo o alla fine della query string
  7. RewriteRule ^index\.php$ http://%{HTTP_HOST}/shop$1?%1%2 [R=301,L]
    Sostituisce la stringa option=com_virtuemart con /shop e rimuove /index.php, utilizzando un 301 permanent redirect
  8. RewriteCond %{QUERY_STRING} ^(.+&)?option=com_virtuemart&(.+)?$ [NC]
    Ricerca la stringa option=com_virtuemart all’inizio della query string
  9. RewriteRule ^index\.php$ http://%{HTTP_HOST}/shop$1?%1%2 [R=301,L]
    Sostituisce la stringa index.php?option=com_virtuemart con shop, usando un redirect 301

Ci tengo a sottolineare che questa soluzione va adattata alle vostre esigenze, e che non basta un copia-incolla per risolvere il vostro problema delle pagine duplicate su VirtueMart.

Grazie a tutti questi rewrite riusciamo così a passare dall’url /index.php?option=com_virtuemart&page=shop.browse&category_id=29&lang=it&Itemid=233 all’url /shop?page=shop.browse&category_id=29

Consiglio ai non esperti di prestare grande attenzione nella modifica di .htaccess: invece di rimuovere pagine duplicate, rischiate seriamente di introdurne di nuove e, soprattutto, di compromettere le funzionalità di VirtueMart.

Joomla: INVALID TOKEN

5

Joomla è un grande CMS, uno dei migliori tra quelli disponibili Open Source.
Purtroppo ci sono però dei problemini che ancora non sono stati sistemati, come ad esempio il famigerato errore Error Loading Modules o quello di cui ci occupiamo ora: INVALID TOKEN.

Il messaggio compare in varie occasioni, in particolare in momenti critici come l’invio di una mail di contatto e all’atto del login nel frontend del sito.

Nel caso del problema nell’invio di email di contatto il componente che viene coinvolto è com_contacts.

Come al solito questo messaggio è molto generico ed anche utilizzando la funzione di debug del sistema di Joomla non è possibile ricavare delle informazioni esaurienti.

La soluzione al problema INVALID TOKEN (un workaround) è disabilitare la cache di Joomla seguendo il percorso SITO -> CONFIGURAZIONE -> SISTEMA ed impostando il valore di CACHE a NO.
A questo punto vi sarà sufficiente cancellare la cache seguendo il percorso STRUMENTI -> PULISCI CACHE : selezionate tutti gli elementi e fate click sul bottone CANCELLA.

A livello tecnico c’è un errore nella gestione dei token di sessione quando la cache è abilitata: una patch da applicare al core di Joomla è disponibile qui: http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=19435

Il mio consiglio è di non utilizzare la cache se non indispensabile, almeno finchè non verrà rilasciata una versione ufficiale di Joomla che ripari il problema.

Migliorare prestazioni Joomla

2

Dopo le anticipazioni di Matt Cutts di qualche tempo fa, è apparso chiaramente sul blog di google che in futuro la velocità di un sito ne influenzerà il posizionamento ed il trust da parte del motore di ricerca.

In particolare è stato pubblicato un interessante post sulle prestazioni intitolato “quanto è veloce il tuo sito?”, che illustra un nuovo tool disponibile in via sperimentale all’interno di google webmaster tools.

Questo tool analizza il tempo di caricamento delle pagine del vostro sito, sulla base dei dati forniti dalla Google Toolbar e fa un paragone tra il vostro sito e tutti gli altri siti analizzati.

Per fare un esempio, un sito di un nostro cliente al quale è stata fatta una consulenza seo è risultato ottimo dal punto di vista SEO, ma con dei tempi di caricamento disastrosi.
Questo è il messaggio che compare all’interno di Google Webmaster Tools:

Panoramica delle prestazioni del sito

In media, il caricamento delle pagine nel tuo sito richiede 7,2 secondi (ultimo aggiornamento: 03/dic/2009). È più lento del 86% dei siti. Il seguente grafico mostra le variazioni nei tempi di caricamento medi delle pagine del tuo sito nel corso degli ultimi mesi. Come riferimento, mostra anche il valore del 20° percentile in tutti i siti, distinguendo i tempi di caricamento lenti da quelli veloci.

Come noterete, il risultato di questo test è disastroso: il sito è molto lento.

Sono stato incaricato personalmente di analizzare questo grave problema della lentezza del sito e di trovare una soluzione per rendere il sito più veloce e, forse, maggiormente appetibile da Google.

L’analisi delle prestazioni del sito è iniziata utilizzando l’estensione per Firefox fornita da Google per i benchmark: Page Speed.

È bastato apportare delle modifiche al cms (Joomla 1.5 in questo caso) ed al file di configurazione di Apache per ottenere dei risultati interessanti.

Per migliorare le prestazioni di velocità di Joomla 1.5 è sufficiente configurarlo come si deve:

  • Attivare il plugin System – Cache

Joomla offre un plugin per la cache delle pagine, in modo da rendere un cms basato su database molto più simile ad un normale sito fatto con html statico.

Per default però il plugin è disattivato: sarà sufficiente attivarlo, impostare un tempo di cache abbastanza lungo ed abilitare la browser caching per ottenere dei buoni risultati

  • Abilitare la Cache di Joomla

Per abilitare la cache di Joomla seguire il percorso Sito -> Configurazione -> Sistema  , selezionare Sì alla voce Cache ed impostare un tempo abbastanza lungo a seconda delle vostre esigenze.

  • Abilitare la compressione Gzip di Joomla

Per abilitare la compressione Gzip di Joomla seguire il percorso Sito -> Configurazione -> Server e scegliere Sì alla voce Compressione pagine GZIP.

  • Installare CssJsCompress

CssJsCompress è un plugin per comprimere attraverso Gzip i file CSS e Javascript. Lo trovate all’indirizzo http://extensions.joomla.org/extensions/site-management/cache/7350 e vi permette di avere una buona compressione dei file CSS e Javascript senza dover configurare nulla. Per attivarlo andate in Estensioni -> Gestione Plugin e aprite System – CssJsCompress , selezionate alle voci Optimize CSS Files, Optimize JavaScript Files, GZip JavaScript and CSS e salvate.

Per quanto riguarda Apache, un accorgimento molto importante è quello di attivare il caching a livello del server.

Aprite il vostro file di configurazione (httpd.conf) ed inserite le seguenti righe:

ExpiresActive On
ExpiresByType image/png “now plus 60 days”
ExpiresByType image/jpeg “now plus 60 days”
ExpiresByType image/gif “now plus 60 days”
ExpiresByType application/javascript “now plus 60 days”
ExpiresByType application/x-javascript “now plus 60 days”
ExpiresByType text/javascript “now plus 60 days”
ExpiresByType text/css “now plus 60 days”

Per maggiori informazioni su Apache e la cache: Apache Mod_Expires.

Notifiche di sicurezza da google

0

Dopo aver introdotto quasi un anno fa uno strumento di notifica quando viene trovato un potenziale problema di sicurezza, Google è pronto a introdurre un miglioramento a questo strumento.
Infatti Google annuncia oggi dal blog ufficiale che sta per lanciare un sistema che controllerà, ove possibile, la versione del software utilizzato dal vostro sito web e vi invierà delle notifiche attraverso google webmaster tools se ci dovessero aggiornamenti disponibili.
Ad esempio se utilizzate cms o applicazioni web quali Joomla, WordPress, Drupal o qualunque altro cms che inserisca nel codice html la versione del software, Google sarà in grado di stabilire se dobbiate aggiornare il vostro cms o il vostro blog.
Questo non solo per il software in sè, ma anche per i componenti aggiuntivi, come i moduli di Drupal o le estensioni di Joomla o ancora i plugin di WordPress.
Sembra che BigG stia disponendo di potere computazionale immenso, tanto grande da non aver bisogno di utilizzare le proprie risorse al 100% per la costruzione e l’aggiornamento delle serp.

Plugin e estensioni SEO per wordpress

0

WordPress è un ottimo software opensource per costruire un blog e per diffondere in modo facile e veloce le notizie sul web.

È inoltre molto apprezzato dai motori di ricerca, che sembrano amare la struttura coerente e semplice delle notizie pubblicate: il posizionamento di un blog con wordpress sembra molto più semplice e veloce che quello di un qualunque altro weblog o cms.

Una delle caratteristiche più utili di WordPress, assieme all’utilizzo dei template per cambiare e gestire l’aspetto estetico del blog, è la presenza di numerosissimi plugin ed estensioni che danno la possibilità di aggiungere un numero elevatissimo di nuove caratteristiche alla versione base.

Le estensioni seo per wordpress

Per ottimizzare wordpress a livello seo servono solo alcuni piccoli accorgimenti e l’installazione di pochi plugin di base.

Permalink o SEF URL

Come noto a chiunque abbia avuto esperienze seo, i motori di ricerca si trovano a loro agio più con gli url sef  (Search Engine Friendly) che con gli url dinamici.

In wordpress per avere sef url è sufficiente cambiare le impostazioni del core per abilitare i permalink: basta andare nella sezione IMPOSTAZIONI ==> PERMALINK (o direttamente dal browser inserendo l’indirizzo /wp-admin/options-permalink.php ) e selezionare una qualunque struttura di permalink diversa da quella predefinita.

All in one SEO pack

Il plugin All in one SEO pack offre moltissime caratteristiche indispensabili a livello SEO:

  1. Possibilità di specificare titolo, meta descriptions e meta keywords per la home page
  2. Supporto per utilizzare wordpress come un cms
  3. Moltissime ottimizzazioni seo a worpress
  4. Possibilità di ottimizzare il titolo e di specificare qualunque tipo di META a pagine e articoli
  5. Feature per creare in modo automatico le meta keywords
  6. Utilizzo dei canonical url per evitare contenuti duplicati

Un plugin indispensabile, con molte altre caratteristiche rispetto a quelle citate.

Google XML sitemap

Google XML Sitemap (conosciuto anche come Google Sitemap Generator) è secondo me uno dei migliori plugin seo per wordpress disponibili.

La caratteristica principe è quella di creare sitemap secondo il protocollo ufficiale per le sitemap xml e, soprattutto, di segnalare ai motori di ricerca quando una sitemap è cambiata.

Questa estensione per le sitemap aggiorna la vostra mappa xml ogni volta che inserite una nuova pagina o un nuovo post, mettendo in cima alla sitemap l’ultimo articolo inserito.

La segnalazione della nuova sitemap ai motori di ricerca è una caratteristica indispensabile e ben apprezzata dai motori stessi, che inviano il loro spider entro pochi minuti dalla segnalazione e che, se il vostro blog ha un certo trust, includono la nuova pagina in pochissimo tempo (nell’ordine dei minuti!).

Esistono poi chiaramente moltissimi altri plugin correlati al seo, ma a mio avviso questi due presentati, assieme all’utilizzo dei permalink, sono sufficienti a fare di WordPress un prodotto estremamente seo friendly.

Conviene usare un CMS per fare un sito?

0

È una domanda che mi è stata spesso posta, in quanto vi è la credenza che i motori di ricerca apprezzino di più un sito fatto in html puro rispetto ad un sito web gestito da un CMS (Content Management System).

A mio modo di vedere le cose, se il cms è uno dei cms moderni e se adottate i giusti accorgimenti a livello seo, il motore di ricerca non noterà assolutamente nessuna differenza.

I cms moderni sono molto versatili e, oltre a facilitare la gestione dei contenuti e ad organizzarne la pubblicazione in modo organico, possono essere l’arma vincente nell’ottimizzazione per i motori di ricerca.

Ovviamente ci sono delle condizioni da rispettare affinchè il cms sia search engine friendly:

  • il cms deve generare codice html corretto
  • il cms generi SEF url e non url dinamici, con richieste GET che inseriscono spiacevoli parametri negli url
  • il cms consenta di generare META TITLE e META DESCRIPTION differenti per ogni pagina
  • il cms si occupi di gestire eventuali url duplicati
  • il template del cms deve essere valido e non deve generare troppo codice inutile

Quasi tutti i moderni cms offrono, in modo nativo o grazie a delle patch o dei plugins, le caratteristiche indispensabili e a mio avviso il loro utilizzo è altamente consigliato!

A patto che non abbiate solo due pagine da pubblicare….

Joomla 1.5 – Error Loading Modules

7

Joomla è un CMS molto potente, versatile e webmaster-friendly.
Capita però a volte di imbattersi in situazioni spiacevoli…

Un bel giorno dopo aver scritto del codice in php che interrogava il database (codice richiamato con il plugin Jumi), mi è comparso questo messaggio tanto generico quanto terribile

“Error loading Modules“

Messaggio generico perchè non spiega assolutamente la fonte del problema, terribile perchè si perdono ore o peggio giorni interi per capire cosa sia successo.

Jumi è un plugin molto interessante che permette di incluedere del codice all’interno di un modulo o di un qualunque articolo.
Comodissimo, io lo uso in joomla per piccole query su database senza dover scrivere componenti o moduli.

Dove sta il problema quindi di questo messaggio “Error loading Modules“ ?

Mysql si comporta in modo “strano“: se si aprono 100 connessioni a 100 diversi database sullo stesso server, MySql utilizza lo stesso id di connessione per ognuna di esse!

Quindi se fate qualcosa del tipo:

$db1 = mysql_connect($host, $user, $pass);
$db2 = mysql_connect($host, $user, $pass);
mysql_select_db(’db1′, $db1);
mysql_select_db(’db2′, $db2);

avrete una situazione chiamata race condition: solamente db2 viene selezionato.
Ecco spiegato perchè i moduli non vengono visualizzati!

Come risolvere il problema dell’errore nel caricamento dei moduli?

La mia soluzione al problema delle connessioni multiple è questa:

$host1 = “localhost”;
$host2 = “127.0.0.1″;
$host3 = “127.0.0.1:3306″;
$host4 = “localhost:3306″;
$db1 = mysql_connect($host1, $user, $pass);
$db2 = mysql_connect($host2, $user, $pass);
$db3 = mysql_connect($host3, $user, $pass);
$db4 = mysql_connect($host4, $user, $pass);

Spero che questa soluzione vi risparmi un bel po’ di tempo!

Go to Top