Posts tagged apache
Rimuovere pagine duplicate da VirtueMart
3VirtueMart è 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
- /index.php?option=com_virtuemart&page=shop.browse&category_id=29&lang=it&Itemid=233&vmcchk=1
- /index.php?option=com_virtuemart&page=shop.browse&category_id=29&lang=it&Itemid=233
- /index.php?option=com_virtuemart&page=shop.browse&category_id=29&lang=it
- /index.php?option=com_virtuemart&page=shop.browse&category_id=29
- /shop?page=shop.browse&category_id=29&lang=it&Itemid=233&vmcchk=1
- /shop?page=shop.browse&category_id=29&lang=it&Itemid=233
- /shop?page=shop.browse&category_id=29&lang=it
- /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à.
- RewriteEngine On
- RewriteCond %{QUERY_STRING} (.*)(^Itemid=[a-zA-Z0-9]+&?|^&Itemid=[a-zA-Z0-9]+&|&Itemid=[a-zA-Z0-9]+)(&?.*)
- RewriteRule (.*) %{REQUEST_URI}?%1%3 [L,R=301]
- RewriteCond %{QUERY_STRING} (.*)(^lang=[a-zA-Z0-9]+&?|^&lang=[a-zA-Z0-9]+&|&lang=[a-zA-Z0-9]+)(&?.*)
- RewriteRule (.*) %{REQUEST_URI}?%1%3 [L,R=301]
- RewriteCond %{QUERY_STRING} ^(.+&)option=com_virtuemart(.+)?$ [NC]
- RewriteRule ^index\.php$ http://%{HTTP_HOST}/shop$1?%1%2 [R=301,L]
- RewriteCond %{QUERY_STRING} ^(.+&)?option=com_virtuemart&(.+)?$ [NC]
- RewriteRule ^index\.php$ http://%{HTTP_HOST}/shop$1?%1%2 [R=301,L]
Vediamo il significato di ogni istruzione.
- RewriteEngine On
Indica a Apache di utilizzare mod_rewrite per la riscrittura degli URL - 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 - RewriteRule (.*) %{REQUEST_URI}?%1%3 [L,R=301]
Rimuove la stringa cercata dall’URL con un redirect permanente - 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 - RewriteRule (.*) %{REQUEST_URI}?%1%3 [L,R=301]
Rimuove la stringa cercata dall’URL con un redirect 301 permanente - RewriteCond %{QUERY_STRING} ^(.+&)option=com_virtuemart(.+)?$ [NC]
Ricerca la stringa option=com_virtuemart in mezzo o alla fine della query string - 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 - RewriteCond %{QUERY_STRING} ^(.+&)?option=com_virtuemart&(.+)?$ [NC]
Ricerca la stringa option=com_virtuemart all’inizio della query string - 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.
CentOS 5: aggiornare php alla versione 5.3
0Con il sistema operativo CentOS 5 ogni tanto si ha la necessità di disporre dell’ultima versione di un software e la soluzione non è immediata.
Nel caso oggetto di studio in questo articolo, si andrà ad aggiornare php dalla versione 5.1 alla versione 5.3 (in realtà sarebbe stato sufficiente aggiornarla alla 5.2 per risolvere problemi di compatibilità con un’applicazione web, l’estensione per Joomla! Glossary, che crea un glossario dei termini utilizzati sul sito in Joomla).
Per risolvere il problema, è necessario aggiornare il repository in cui yum, il sistema di gestione dei pacchetti di CentOS, cerca versioni aggiornate dei software.
Operiamo nel seguente modo, installando i pacchetti epel (necessario per la gestione delle dipendenze) e il repository remi.
Importante: prima di digitare i comandi che verranno proposti, effettuare un backup completo di tutti i database.
Questi i comandi :
# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
# rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm
Una volta installati i pacchetti, digitare il seguente comando per aggiornare php, abilitando il repository remi:
#yum –enablerepo=remi update php
Potrebbe capitare di incorrere nel seguente errore:
Transaction Check Error:
file /etc/my.cnf from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/charsets/Index.xml from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/charsets/cp1250.xml from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/czech/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/danish/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/dutch/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/english/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/estonian/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/french/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/german/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/greek/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/hungarian/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/italian/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/japanese/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/korean/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/norwegian-ny/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/norwegian/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/polish/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/portuguese/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/romanian/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/russian/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/serbian/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/slovak/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/spanish/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/swedish/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
file /usr/share/mysql/ukrainian/errmsg.sys from install of mysql-libs-5.1.50-2.el5.remi.i386 conflicts with file from package mysql-5.0.77-4.el5_5.3.i386
In questo caso è necessario aggiornare mysql, che provvederà automaticamente ad aggiornare php alla versione 5.3.3
# yum –enablerepo=remi update mysql
Completato l’aggiornamento sarà necessario riavviare mysql e php, affinchè il webserver apache utilizzi l’ultima versione installata:
# service mysqld restart
# service httpd restart
Potrete ora controllare la versione di php e mysql con i seguenti comandi:
# php –version
# mysql –version
Spostare una pagina mantenendo il pagerank
0Per rendere il proprio sito maggiormente appetibile dai motori di ricerca, un’ottimizzazione molto utile è cambiare gli url in modo da renderli congruenti con le keywords della pagina.
Quindi ad esempio se abbiamo una pagina che parla di body per ginnastica artistica con URL /articoli/contenuti/122 e vogliamo posizionarci su “body da ginnastica” , sarà opportuno cambiare l’url in /body-da-ginnastica.
Una volta cambiato l’indirizzo della pagina però Google e gli altri motori di ricerca vedranno una pagina non trovata (/articoli/contenuti/122) e un contenuto completamente duplicato (/body-da-ginnastica identica alla vecchia pagina /articoli/contenuti/122 che si trova ancora nell’indice). Un po’ come accade quando si ha la necessità di fare un redirect da non-www a www.
Per spostare una pagina mantenendo il posizionamento ed il pagerank, usiamo un redirect 301 permanente per dire che la vecchia pagina si è definitivamente spostata in quella nuova.
Il redirect 301 serve anche a mantenere i link in entrata, in modo da non perdere pagerank e link popularity.
Questo esempio funziona se avete un <u>webserver Apache con mod_rewrite</u>. Inserite questa riga nel vostro file .htaccess nella directory root del vostro sito.
Redirect 301 /articoli/contenuti/122 VOSTROSITO/body-da-ginnastica
Ricordatevi di cambiare VOSTROSITO con l’indirizzo del vostro sito web (ad esempio: http://www.matteogiannone.com/ se la pagina nuova diventa http://www.matteogiannone.com/body-da-ginnastica
Se non avete un file .htaccess, dovete crearne uno che conterrà una riga aggiuntiva, che si assicura che mod_rewrite di Apache sia attivo.
RewriteEngine On
Redirect 301 /articoli/contenuti/122 VOSTROSITO/body-da-ginnastica
301 permanent Redirect da non-www a www
1Un problema molto comune quando si analizza un sito a livello SEO è la presenza di contenuti duplicati.
Dal momento che Googlebot e gli altri spider considerano matteogiannone.com e www.matteogiannone.com due siti diversi, è necessario spiegare a Google e agli altri motori di ricerca che si tratta dello stesso sito.
La soluzione al problema è un Redirect 301 (Permanent Redirect) che spiega ai motori di ricerca la destinazione corretta.
Vediamo come risolvere il problema se si sta utilizzando il webserver Apache con installato mod_rewrite.
Apache con mod_rewrite
Inserire le seguenti righe nel file .htaccess e posizionatelo all’interno della directory root ( / ), inserendo l’indirizzo corretto del vostro sito web
RewriteEngine On
RewriteCond %{HTTP_HOST} ^matteogiannone\.com
rewriterule (.*) http://www.matteogiannone.com/$1 [R=301,L]
Provate ora ad accedere al vostro sito web senza il www (nel mio caso matteogiannone.com) e vedrete che il vostro browser verrà reindirizzato all’indirizzo con il www (www.matteogiannone.com).
In caso di problemi controllate se il redirect funziona con il tool per il controllo dei redirect.
Altro