Permalink e Rewrite con WordPress

20 lug 2009

Struttura dei permalink di WordPress

Una volta erano semplicemente link, o URL, ora si chiamano permalink, e c’è la sua bella differenza.
C’è parecchio studio dietro i permalink, gli esperti di SEO trattano questo argomento continuamente e ne discutono parecchio, ma io ancora non ho le idee ben chiare quale sia il permalink migliore.

Pur senza sottovalutare i consigli dei più esperti, istintivamente io preferisco far prevalere la praticità e se vogliamo la comodità di un permalink non troppo costruito, anzi,  che sia più semplice possibile, e per questo ho scelto il sistema più semplice che WordPress mette a disposizione, il titolo dell’articolo, e quando me lo ricordo lo semplifico pure, come in questo caso.

Perché proprio il titolo?

Il titolo dell’articolo deve dire già molto, e invitare il visitatore a proseguire la lettura, e non di meno ha una importanza fondamentale nelle strategie di ottimizzazione e posizionamento. Non dimentichiamoci delle Keywords…

Io ci faccio caso, quando faccio una ricerca sui motori di ricerca, al permalink che il passaggio del mouse mette in evidenza, ed ho notato che i permalink troppo lunghi e articolati hanno un minore impatto sulla scelta delle pagine che decido di aprire.

Per giocare con i permalink in WordPress basta poco, un comodo pannello nelle impostazioni permette di configurarli a piacimento, a patto però che il sistema di Rewrite del server web utilizzato sia attivo e funzionante.

I permalink secondo WordPress

Appena installato, WordPress propone il suo classico permalink, molto “nuke”, una cosa tipo

http://www.robrota.com/?p=14

Brutto da vedere, difficile da ricordare, di certo non invoglia un click.

È lo stesso WordPress ad avvisare, nella pagina delle impostazioni dei permalink, che è preferibile personalizzarli, e propone alcune soluzioni semplici ed efficaci. È possibile andare anche oltre, grazie alla grande versatilità del nostro CMS preferito.

Giusto per la cronaca, i Permalink in WordPress si impostano in

Bacheca > Impostazioni > Permalink

Ma il rewrite funziona?

Facciamo un passo indietro, perché se il Rewrite non funziona anche i permalink personalizzati fanno cilecca…

Per poter funzionare, i permalink diversi da quello standard offerto da WordPress occorre che la funzione Rewrite del server web sia installata e attiva. Di solito lo è, altrimenti occorre attivarla.
Nel dubbio non c’è che da verificare.

Non dovesser funzionare, e se il blog è ospitato da qualche Internet Provider, occorre contattare il supporto tecnico e chiederne l’attivazione.
Se invece il server web lo si gestisce autonomamente occorre ricorrere alla documentazione del server stesso, anche se sulla rete sono presenti numerosi tutorial sull’argomento per qualsiasi server web.
Se si utilizza Apache su una qualche versione di Linux o Mac OS X, in genere il modulo è già attivo nella configurazione standard.
Se si vuole approfondire l’argomento, qui si trova la documentazione ufficiale di Apache 2  sul modulo Rewrite (in inglese).

Due Tips
Se su Apache, con il modulo rewrite attivo, i permalink non funzionano a dovere, probabilmente si deve fare una piccola modifica alla configurazione del tuo VirtualHost.
Bisogna cercare la riga contenente l’istruzione AllowOverride, e se non lo è provare a settarla in AllowOverride All.
Probabilmente qualcuno mi deve una birra.

Se nonostante questo non funzionano, meglio controllare che nella directory principale del blog sia presente il file .htaccess e che questo abbia inserite le modifiche di WordPress per far funzionare correttamente il rewrite. In genere WordPress avverte quando non riesce a creare o a modificare questo importante file, ed occorre intervenire manualmente.

Il permalink migliore è quello che ci piace di più.

Ora che si è certi che tutto funziona per benino, bisogna scegliere quale struttura di permalink utilizzare.
Le più utilizzate sono quelle proposte direttamente da WordPress, e non è un caso. Una delle più utilizzate è quella che, prima del titolo della pagina, inserisce l’anno o anche il mese. taluni ci mettono anche il giorno.
Si tratta delle prime due offerte da WordPress dopo quella standard, le ho utilizzate per un po’ ma mi hanno stancato presto.

L’ultima tra quelle offerte da WordPress, la versione numerica, non la considero nemmeno.

Come si può notare, io utilizzo la versione con il solo titolo dell’articolo, la trovo più semplice, immediata ed efficace di tutte, e si ottiene con questo codice inserito nella struttura personalizzata:

/%postname%

Alcuni lasciano un ulteriore slash (/) in fondo, come propone wordpress, ma a me non piace.

Una alternativa che non mi dispiace, e che vedo spesso in giro, è quella di anteporre al titolo dell’articolo il nome della categoria in cui è archiviato. Alle volte però il permalink diventa lungo una quaresima. Se però  l’idea piace, si ottiene così:

/%category%/%postname%

Altrimenti, se nel blog ci sono più autore a firmare gli articoli, si potrebbe valutare anche la soluzione con il nome dell’autore prima del titolo:

/%author%/%postname%

Visto che ci siamo, se il blog è in lingua italiana nella stessa pagina di configurazioni dei permalink si trovano anche le opzioni riguadanti le categorie ed i tag. Di default, WordPress costruisce i link degli archivi per tag e categorie anteponendo rispettivamente “tag” o “category” .
Tag va bene, ma Category proprio non mi piace, io ho preferito impostarlo nel nostrano “categoria”.
Se si ritiene che questo è un suggerimento utile, basta scrivere “categoria” alla voce “Base delle categorie”.

E se un domani si cambia idea?

WordPress quando si decide di cambiare la struttura dei permalink la cambia a tutti gli articoli del nostro blog. Cambiare in corso d’opera, con un blog avviato e magari ben conosciuto, a prima vista potrebbe sembrare un suicidio in termini di errori 404 (pagine non trovate), ma si rmedia facilmente ed elegantemente.

Abbiamo due possibilità, una più facile aggiungendo un ulteriore plugin al nostro sistema, una più complicata utilizzando a mano il rewrite, ma che risparmia un plugin (troppi plugin rallentano tutto il sistema).

1. Soluzione Permalinks Migration Plugin

Facile facile, si scarica Permalinks Migration Plugin di Dean Lee e lo si installa come tutti i plugin per WordPress, nella sua pagina di configurazione gli si indica il vecchio permalink ed il nuovo e il gioco è fatto, ci pensa lui a gestire tutti i redirect con il sacro 301.

2. Soluzione manuale con rewrite

Un doveroso e sempiterno ringraziamento all’amico PowerUser per il prezioso supporto per il rewrite e le espressioni regolari.

Abbiamo mosso i primi passi con la funzione Rewrite dei server web per i permalink, la stessa ci sarà di prezioso aiuto per far sì che i “vecchi” permalink si trasformino automaticamente nei nuovi.

Ad esempio, se all’inizio come il sottoscritto si fosse scelta la struttura dei permalink basata su anno e mese, e con il blog avviato si decidesse di cambiare i permalink con il solo titolo dell’articolo, basta inserire manualmente nel file .htaccess una regola basata sulle [W:Regular Expression]:

RewriteRule ^/[0-9]+/[0-9]+/([^/]+)/ http://www.robrota.com/$1 [R=301,L]

Nota bene: questa regola di rewrite funziona nel mio caso dove ho volutamente tolto dai permalink lo slash (/) finale proposto da WordPress. Nel caso lo si voglia mantenere, occorre modificare la regola di conseguenza.

Anche se si decide di cambiare base delle categorie da category a categoria, come descritto sopra, basta aggiungere una seconda regola come questa:

RewriteRule ^/category/(.+) http://www.robrota.com/categoria/$1 [R=301,L]

Nessun problema quindi per tutte le pagine linkate su altri siti web, nei motori di ricerca o nei bookmark.

Credo sia tutto, come si noterà la struttura dei permalink è sì importante per il tuo blog, ma molto dipende anche dai gusti personali del blogger.

Un paio di link utile, in italiano, sullo stesso argomento:



Leggi anche:

22 commenti

  1. [...] di Rewrite utili per siti web 7 set 2009 di robrota. Abbiamo già incrociato i RewriteRule per i permalink di WordPress, quando si trattava di capire qual’era l’URL più utile e amichevole da utilizzare per [...]

  2. Ciao Rob…
    Volevo chiederti perchè, se non inserisco index.php davanti alla stringa della struttura personalizzata, mi restituisce l’errore 404?

  3. Non dovrebbe, sbagli per caso sintassi?
    Prova a postarla

    rob

  4. Grazie Rob….
    SOno uno stupido. Sono andato a vedere nel File httpd.conf ed ho trovato che…
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    # Options FileInfo AuthConfig Limit
    #
    AllowOverride None

    Ho cambiato in…

    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    # Options FileInfo AuthConfig Limit
    #
    AllowOverride All

    Ora mi permette di togliere index.php

    Ora il problema è che nell’archivio dei motori di ricerca c’è un’altra URL.
    Quindi usciranno fuori una catastrofe di errori 404.

    Quella regoletta che hai scritto sopra io non l’ho capita…. bada bene, son io che sono scarfso in queste cose….
    Cosa dovrei scrivere esattamente per ovviare a questo problema?
    Il mio htaccess è questo…

    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress

  5. La modifica di AllowOverride è necessaria affinché il rewrite funzioni.

    Ora devi risolvere il problema dei 404 con delle regole di rewrite, ma bisogna sapere la struttura originale, ossia che cosa c’era prima come URL e cosa c’è adesso, molte cose le puoi semplificare con le espressioni regolari.

    C’era anche un plugin che aiutava in questo, proprio per evitare problemi in caso di modifiche ai permalink, ma non me lo ricordo in questo momento…

  6. rettifico, il plugin l’avevo indicato alla fine dell’articolo, opsss…. ;-)

  7. Prima la URL era composta in questo modo…
    http://bareden.syte.net/index.php/nome dell’articolo
    ora
    http://bareden.syte.net/nome dell’articolo

    se potessi evitare il plugin sarebbe meglio….

    COme ti ho detto non sono pratico e non so cosa siano le espressioni regolari.
    Potrei fare solamente un copia e incolla, se mi scrivi la formula :-)

  8. Per quel tipo di URL una cosa del genere nell’htaccess dovrebbe funzionare:

    RewriteRule ^/index.php/(.+) http://bareden.sytes.net/$1 [R=301,L]

    Mettila alla fine dell’htaccess, dopo la parte scritta da wordpress.

    rob

  9. Immenso, grandissimo ROB!!!!!
    Funziona!!!!!

  10. seguirà fattura… ;-)

    tieni presente che forse avrai altri permalink da modificare, categorie tags etc, ma basta che fai delle rules ad arte partendo da quella sopra.

    rob

  11. Ancora grazie ROBBBBBBBB!!!!

  12. Purtroppo dopo avere fatto le modifiche al modulo rewrite, rendendolo attivo, il tempo di caricamento delle pagine è diventato impossibile… ho dovuto rimettere tutto come prima :-( (

  13. Non credo sia un problema del rewrite, a meno che tu non abbia scritto male qualche regola, piuttosto qualcosa che non è configurato bene in apache. difficile dirlo pero’ così…

  14. Questa è ciò che è scritto in htaccess..

    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    RewriteRule ^/index.php/(.+) http://bareden.sytes.net/$1 [R=301,L]
    # END WordPress

    Penso anche io che possa dipendere dalla configurazione di Apache…
    Però io non ho toccato nulla, ho solo attivato il mod rewrite…. non saprei proprio dove mettere le mani.

  15. Guarda, io ho degli htaccess con decine e decine di regole, quello di tevac supera credo il centinaio di regole abbondanti. Lo stesso apache di tevac gestisce una 10ina di blog in wordpress, e in nessuno ho installato supercache o come diavolo si chiama.

    Chiaro che apache deve essere comunque ottimizzato, la configurazione di default specie su Mac OS X non è il massimo, specie se si utilizza ancora la versione 1.3.x, occorre vedere quanti processi gestisce, come si comporta il sistema quando vengono chiamate le pagine, se il load average si alza molto e altre cosine del genere.

    Insomma non è banale…

  16. Ho capito… ci rinuncio, pazienza.
    Semmai quando installerò Snow Leopard sul server proverò di nuovo.
    Comunque grazie.

  17. Per fare invece il rewrite in htaccess dei tag in modo da avere la seguente situazione:

    da
    mioblog.com/tag/pippo

    a
    mioblog.com/pippo

    Sapete come si fa?

  18. esattamente come descritto sopra:

    RewriteRule ^/tag/(.+) http://mioblog.com/$1 [R=301,L]

    rob

  19. Ciao Rob!

    Avrei una curiosità:
    Ho da poco installato l’ultima versione di WordPress. 2.9.2 XXL.
    Ho adottato il permanent link nella versione

    /%category%/%postname%

    E funziona…
    L’inconveniente è nel momento in cui clicchi sul link della categoria corrispondente (esempio news) l’url mi appare in questa versione:

    category/news

    Per evitare l’uso della directory “category” ho provato a usare come base della catagoria un’altra keyword, ma pare che abbia difficoltà a trovare le pagine nel momento in cui riscrive l’url:

    altraurl/news

    Cosa che invece non succede, invece, utilizzando come base “categoria”. Credo possa trattarsi di un baco.

    Mi chiedevo, a questo punto, per baypassare il problema, se fosse possibile omettere nella rescrittura delle url la parola

    “category” utilizzando però sempre la versione:

    /%category%/%postname%

    in maniera da poter avere, per ogni link alla categoria,
    la verione

    /news

    in luogo di category/news

    Ho provato a utilizzare la stessa logica che hai segnala in un precedente post per il caso del “tag”, cioè

    RewriteRule ^/tag/(.+) http://mioblog.com/$1 [R=301,L]

    quindi aggiungendo

    RewriteRule ^/category/(.+) http://mioblog.com/$1 [R=301,L]

    ma non funziona né l’uno né l’altro.

    Come posso risolvere l’inconveniente secondo te?

    Saluti
    Sergio

  20. Ciao Sergio,
    non può funzionare perché non esiste un link che punta a /news (inteso come link di categoria)

    la faccenda si fa più complessa, secondo me bisognerebbe creare una nuova funzione per i link delle categorie che preveda il solo nome della categoria, una volta fatto puoi fare tutti i rewrite che vuoi.

    rob

  21. Infatti, pensavo anch’io una cosa del genere. Bisognerebbe lavorare sullo script che genera l’url di categoria. Sai in quale file e in quale cartella si trova per caso?

    Sergio

  22. non conosco worpress così a fondo, anche perché preferisco non mettere le mani nel core ma limitarmi alle funzionalità che posso controllare sul tema, dove di solito c’è un functions.php (o una cartella functions) dove si possono fare tutte le modifiche che si vuole senza paura di devastare l’applicazione.

    mi viene pero’ da pensare che dentro wp-includes ci sia più o meno quello che cerchi.

    rob

Lascia un commento

Poche e limide regole e soprattutto tanto buon senso: vieni in pace o tornatene a casa tua. I commenti sono liberi, incoraggiati e benvenuti, ma sono soggetti al mio benestare. Non provocare gratuitamente, non diffamare e non offendere nessuno, altrimenti il commento verrà cancellato.