1. Introduzione
  2. Compressione dei dati
  3. Ridurre le Query
  4. Ridurre la dimensione delle pagine
  5. Caching
  6. CDN
  7. Conditional Tags
  8. Suggerimenti
  9. Commenti

Introduzione

Quando parliamo di ottimizzazione di WordPress un punto molto importante è quello relativo alla velocità di caricamento delle nostre pagine web in modo da rendere migliore l’esperienza utente. Come ho già accennato all’argomento dopo il convegno gt con il post su Web Performance Optimization credo sia il momento di realizzare una pagina dedicata all’argomento applicato a wordpress.

Il processo di ottimizzazione che descriverò di seguito non va applicato tutti i giorni, settimane o mesi, ma può essere fatta poche volte durante il corso di un anno. L’ottimizzazione può essere fatta sia sul backend che sul frontend, ma in questa pagina parleremo esclusivamente del lato pubblico ossia Ottimizzazione del Frontend.

Dopo aver caricato le nostre pagine, se andiamo a controllare il codice sorgente generato da wordpress ci possiamo accorgere che vengono spesso caricati degli script che non servono assolutamente ai nostri visitatori, ma che aggiungono peso e tempo di caricamento ad esse. Questo caricamento di inutilità viene causato spesso dal caricamento di widget o javascript non utilizzati, di css non utilizzato oppure dalla presenza di codice errato o broken link. Per riparare a queste imperfezioni è necessario spulciare il codice delle nostre pagine e capire quali sono questi file che vengono erroneamente caricati.

Compressione dei dati

  • Compressione di CSS e Javascript – Code Beautifier è uno strumento online che permetto di ottenere ottimi risultati nella compressione dei CSS. Esso ti permette di accorciare le notazioni, ridurre il testo inutile, unire i selettori, comprimere i codici di colore e le proprietà dei font, rimuovere backslashes & new lines e scartare proprietà non valide. Per la compressione dei Javascript, ci sono moltissimi strumenti che la permettono come  Minify JavascriptYUI CompressorDojo CompressorJSCompress. Ogni compressore utilizza il suo algoritmo e quindi devi solamente scegliere quello che ti piace di più. Se non vuoi effettuare queste operazioni manualmente esistono dei Plugin per Wordpress che ti consentono di automatizzare quasi totalmente questi processi. A tal proposito posso suggerire alcuni plugin come Web Optimizer (molto ben realizzato, ma per completare tutti i task è necessaria la versione pro – a 99 dollari – perché con quella free si possono effettuare solo poche operazioni) oppure Autoptimize plugin che è invece completamente gratuito. Questi plugin possono praticamente fare ogni cosa necessaria a velocizzare il caricamento del frontend come comprimere CSS e JS, unire tutti i file CSS e JS in uno solo, fare caching del sito, comprimere html, immagini e anche ottimizzare le installazioni vps di wordpress.Ci sono altri plugin in grado di comprimere  singolarmente i vari file come: Script Compressor – per JS e CSS, WP-JS – per JS, WP-Minify – per JS e altri come WP-HTML-CompressionGZippy.Nota bene che l’uso di troppi plugin di compressione può rallentare il tuo sito invece di velocizzarlo a causa di possibili conflitti quindi assicuratevi di utilizzare soltanto un plugin per ogni tipo di compressione.NB: Per migliorare le performance cercate di far caricare i Javascript a fondo pagina – dopo la chiusura del tag body e i CSS subito dopo il tag head di apertura.NB: Se riuscite a unire tutto il vostro codice CSS in un singolo file e tutto il vostro codice JS in un singolo file e poi li comprimente otterrete moltissimi vantaggi in termini di velocità. L’unica controindicazione a questa procedura è quella di unire insieme file JS che utilizzano  jquery e mootools – li renderà inutilizzabili.
  • Compressione delle Immagini – Le immagini sono uno dei fattori principe nell’aumento della dimensione delle pagine web. Esistono fondamentalmente 2 metodi per comprimerle. Il primo metodo è quello di utilizzare il vostro image editor preferito. Il secondo invece è quello di utilizzare Smush.it di Yahoo. Smush.it è anche disponibile come plugin per wordpress e permette di comprimere e caricare le immagini automaticamente.

NB: I plugin che consentono la compressione gzip dei file CSS, JS etc… (non immagini e contenuti già compressi mi raccomando) possono essere evitati se avete la possibilità di abilitare lato server il mod_deflate di Apache e aggiungere poi al vostro file httpd.conf o .htaccess il seguente codice:

{code type=php}AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE application/x-httpd-eruby
AddOutputFilterByType DEFLATE text/html

# Istruzioni necessarie per evitare che vengano compressi i file già compressi come immagini, video, pdf etc etc

SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.avi$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mov$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mp4$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.rm$ no-gzip dont-vary

# Istruzioni necessarie per compatibilità con vecchi browser

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
{/code}

Ridurre le Query PHP

Analizzando i file del tema che utilizzate vi accorgerete che moltissimo codice viene generato dinamicamente come il percorso dei file, il percorso dei css, il percorso delle immagini, il percorso dei feed rss di post-pagine commenti, l’html encoding, il titolo del blog e la sua descrizione e moltissimo altro codice. Riuscire a rimpiazzare questo codice con i valori reali permette di risparmiarsi l’esecuzione di moltissime query. Possiamo identificare i tag rimpiazzabili come 13. Il modo più semplice di fare questa operazioni di sostituzione è quello di caricare la pagina, visualizzare il codice html e copiarlo in un file. Una volta copiato questo file fate una copia di backup dei file del vostro tema e modificateli sostituendo i seguenti valori con i rispettivi della pagina html caricata.

  1. <?php language_attributes(); ?> nel file header.php.
  2. <?php bloginfo(‘html_type’); ?> nel file header.php.
  3. <?php bloginfo(‘charset’); ?> nel file header.php.
  4. <?php bloginfo(‘name’); ?> si trova un po’ ovunque nel vostro tema.
  5. <meta name=”generator” content=”WordPress <?php bloginfo(‘version’); ?>” /> <!– leave this for stats –> in header.php. Questo va eliminato anche per evitare che chiunque conosca la versione del nostro WP.
  6. <?php bloginfo(’stylesheet_url’); ?> nel file header.php.
  7. <?php bloginfo(‘rss2_url’); ?> nei file header.phpsidebar.php and footer.php. Assicuratevi di cambiare manualmente questi campi nel caso in cui decidiate di passare a FeedBurner dopo aver fatto queste modifiche.
  8. <?php bloginfo(‘pingback_url’); ?> nel file header.php.
  9. <?php bloginfo(’stylesheet_directory’); ?> si trova un po’ ovunque nel vostro tema.
  10. <?php bloginfo(‘description’); ?> si trova un po’ ovunque nel vostro tema.
  11. <?php bloginfo(‘comments_rss2_url’); ?> found in sidebar.php and footer.php.
  12. <!– <?php echo get_num_queries(); ?> queries. <?php timer_stop(1); ?> seconds. –> nel file footer.php.
  13. Se usate i widgets, potete eliminare il codice che trovate nel file sidebar.php tra le linee<?php /* Widgetized sidebar, if you have the plugin installed. */
    if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar() ) : ?>

    e
    <?php endif; ?>
    Il codice contenuto tra queste linee di codice viene utilizzato solamente nel caso in cui non utilizziate i wdget. Se credete che utilizzerete sempre i widget non c’è motivo di lasciare questo codice.

Ridurre la dimensione delle pagine

  • Rimuovere Widget non utilizzati o non necessari – Analizzate attentamente i widget che utilizzate nel vostro footer e nella vostra barra laterale e domandatevi se realmente questo widget aggiunge valore al vostro sito. Se la risposta è no allora questo widget non fa altro che aumentare la dimensione della vostra pagina e dunque la sua velocità.
  • Ridurre il numero di commenti visualizzati – Se avete un sito molto popolare è facile ottenere una quantità molto alta di commenti e molto spesso con avatar allegato. Per molti utenti la presenza di tantissimi commenti può causare un grosso collo di bottiglia e dunque rallentare considerevolmente il caricamento della pagina. A partire dalla versione 2.7 di WordPress è possibile splittare i commenti in più pagine nella sezione Impostazioni -> Discussione.

Caching del Frontend

Come detto precedentemente ogni volta che il vostro sito viene caricato tutto il codice php del CMS viene eseguito. Se avete un’ottimo piano hosting questo non dovrebbe essere un grosso problema, ma nel caso in cui per qualsiasi motivo vi troviate ad avere a che fare con un picco di traffico molti visitatori accederanno contemporaneamente al vostro sito e il vostro server potrebbe non riuscire a gestire facilmente questa situazione.

Per evitare questo problema è possibile utilizzare il meccanismo di caching di cui parlavamo per trasformare l’output della pagina php in un file HTML statico che può essere servito ai visitatori in modo molto più veloce. La cache delle vostre pagine può essere rigenerata a intervalli orari e sulla base della frequenza con cui aggiornati il vostro sito web. Con WordPress per applicare questo meccanismo potete usare dei plugin come W3 Total Cache, WP Super CacheHyper Cache solo dopo aver controllato che non vadano in conflitto con altri plugin che già utilizzate.

CDN (Content Distribution/Delivery Network)

CDN è una tecnica che permette di servire i contenuti del vostro sito da server diversi distribuiti in varie parti del mondo, in modo da distribuire il carico del vostro server in modo equo tra i vari server e permettendo dunque un caricamento più rapido delle vostre pagine. Uno dei migliori servizi qualità-prezzo è sicuramente Amazon Cloudfront service con il loro S3 Service. Utilizzando questo servizio potrete hostare tutti i file CSS, JS, Immagini, Video e Audio sulla CDN Amazon con la possibilità di utilizzare dei plugin appositi come Simple Amazon S3 Upload form oppure Amazon S3 for WordPress.

Un altro plugin molto buono se utilizzare AJAX è quello di sfruttare la CDN di Google con il plugin Use Google Libraries che sostituisce in automatico i file AJAX locali con il percorso corrispondente sui server Google.

Caricare solo quando necessario – Usate i Conditional Tags

Gli autori di Plugin hanno spesso la brutta abitudine di includere JS e CSS nell’header senza includere dei controlli per il caricamento di essi solo in caso di effettivo utilizzo. In questo modo ogni plugin relativo al plugin viene caricato su ogni pagina e questo causa un drammatico rallentamento del caricamento della pagina. I metodi che possono essere utilizzati sono molteplici e ce ne sono alcuni complessi ed altri meno, ma in ognuno di essi è necessario un po’ di conoscenza del codice e dunque un po di “smanettamento”. Queste operazioni anche se non proprio immediate e di facile applicazione sono uno dei punti fondamentali nell’ottimizzazione della velocità del vostro sito basato su piattaforma wordpress.

In questa pagina vi mostrerò uno dei modi più semplici esistenti per realizzare questo snellimento delle pagine.

Andate nel file functions.php del vostro tema ed aggiungete questo codice:

{code type=php}add_action( ‘wp_print_scripts’, ‘my_deregister_javascript’, 100 );
function my_deregister_javascript() {
wp_deregister_script( ‘nome-js-del-plugin’ );
}

add_action( ‘wp_print_styles’, ‘my_deregister_styles’, 100 );

function my_deregister_styles() {
wp_deregister_style( ‘nome-css-del-plugin’ );
}
{/code}

E in modo molto semplice vedrete esclusi CSS e JS specificati.

Per migliorare questa tecnica ed applicarla in modo perfetto alle vostre esigenze potete utilizzare i Conditional Tag di Worpress.

Vi faccio un esempio che credo faccia riferimento ad uno degli scenari più consueti…Plugin Contact Form 7. Questo plugin include in tutte le vostre pagine il proprio CSS e JS. Ovviamente uno dei casi più frequenti è quello di utilizzo del plugin in questione sulla pagina chiamati “Contatti”.

Supposto questo scenario per quale motivo dobbiamo portarci dietro il codice CSS e JS di questo plugin in tutte le pagine ? Perché non farli caricare solamente nella pagina in cui effettivamente lo usiamo ?

Ecco la soluzione combinando gli script precedenti con i conditional tags:

{code type=php}add_action( ‘wp_print_scripts’, ‘my_deregister_javascript’, 100 );

function my_deregister_javascript() {
if ( !is_page(‘Contatti’) ) {
wp_deregister_script( ‘contact-form-7’ );
}
}

add_action( ‘wp_print_styles’, ‘my_deregister_styles’, 100 );

function my_deregister_styles() {
if ( !is_page(‘Contatti’) ) {
wp_deregister_style( ‘contact-form-7’ );
}
}
{/code}

Con queste piccole modifiche potrete perfezionare il vostro WordPress e caricare in modo perfetto ogni file solo dove e quando vorrete.

Suggerimenti

Aggiornate regolamente WordPress, temi e plugin e scegliete attentamente il vostro hosting provider (se volete ne conosco di ottimi per wordpress). Nel caso in cui abbiate il vostro server allora ricordatevi di aggiornarlo regolarmente per evitare possibili problemi. Se ne avete la possibilità chiedete di farvi abilitare o di abilitare voi stessi i moduli di Apache – Headers e Expires – e poi aggiungere nel vostro httpd.conf o .htaccess il seguente codice adeguatamente modificato (ho messo 2 tipologie di uso del controllo della scadenza quindi scegliete quello che preferite – con data fissa oppure con durata massima).

{code type=php}Header unset Pragma
FileETag None
Header unset ETag

Header set Cache-Control “public”
Header set Expires “Thu, 15 Apr 2010 20:00:00 GMT”
Header unset Last-Modified
Header set Cache-Control “max-age=7200, must-revalidate”

Header set Cache-Control “public”
Header set Expires “Thu, 15 Apr 2010 20:00:00 GMT”
Header unset Last-Modified
{/code}

In questo modo aggiungerete al vostro sito delle scadenza per i file che non hanno bisogno di essere ricaricati ogni volta dal browser e permetterete l’uso della cache e delle scadenze anche lato server e velocizzando in modo significativo il vostro sito agli occhi di Google e dei vostri utenti.

  1. RT @riga75 Ottimizzare WordPress per renderlo più -http://www.andreapernici.com/wordpress/ottimizzare-wordpress-per-renderlo-piu-veloce/

  2. Articolo molto interessante e utile, soprattutto in vista dei cambiamenti previsti nel nuovo algoritmo di Google (Caffeine) che sembrerebbe dare peso rilevante alla velocità di caricamento di un sito. Grazie per la segnalazione dei vari plugin!

  3. Ciao @Giorgio. Grazie a te !

  4. Guida spettacolare! Ottimo un monumento ti dovrebbero fare.

  5. @Ivan esagerato!!!! Troppo gentile e grazie mille per il monumento 😉

  6. Grazie per il tuo splendido articolo.
    Sto cercando di implementare al meglio il codice per rimuovere CSS da pagine in cui non servono.
    Ho provato a modificarlo così:
    add_action( ‘wp_print_scripts’, ‘my_deregister_javascript’, 100 );

    function my_deregister_javascript() {
    if ( !is_page(‘Contatti’) ) {
    wp_deregister_script( ‘contact-form-7’ );
    }
    if ( !is_single() ) {
    wp_deregister_script( ‘wp-commentnavi’ );
    }
    }

    add_action( ‘wp_print_styles’, ‘my_deregister_styles’, 100 );

    function my_deregister_styles() {
    if ( !is_page(‘Contatti’) ) {
    wp_deregister_style( ‘contact-form-7’ );
    }
    if ( !is_single() ) {
    wp_deregister_script( ‘wp-commentnavi’ );
    }
    }

    ma si vede vero che non conosco il php? 🙂
    (volevo rimuovere il css del plugin wp-commentnavi dalle pagine che non sono articoli).
    Puoi aiutarmi?

  7. Ciao @Emanuele e grazie a te.
    Non conosco nello specifico wp-commentnavi ma se vai in edit plugin puoi vedere come chiama lui i suoi css e js.

  8. Grazie per la risposta (anche se non la vedo qua sopra!).
    Il css “indesiderato” sta in plugins/wp-commentnavi/commentnavi-css.css?ver=1.10 e qquindi si presuppongo che wp-commentnavi vada bene come sintassi.
    Probabilmente l’errore sta nella “sintassi” di come ho scritto il tutto mettendo insieme sia CommentNavi che ContactForm7 🙂

  9. @Emanuele il tuo codice mi sembra ok, ma credo che il problema sia nel nome che va dentro la funzione. Prova a mettere commentnavi-css. Tutto dipende da come è fatto il plugin.

  10. Ok grazie,
    ho provato ma niente. Ho anche provato wp-commentnavi-css ma niente (la parte relativa a contact-form invece funziona bene).
    Questo è quello che aggiunge nell’header:

    Dove dovrei guardare per capire qual’è la “stringa” giusta?
    Grazie ancora per l’aiuto 🙂

  11. Ciao,
    scusa se ti disturbo ancora. Ho provato su siti diversi e vari plugin ma l’unico con cui mi riesce di farlo funzionare è Contact Form 7.
    Hai qualche “input” da darmi per capire cosa devo mettere per gli altri plugin?

  12. Ottimo articolo. In particolare sono interessanti il plugin Autoptimize e quello che permette di sostituire le librerie Javascript con quelle hostate da Google.
    Avrei completato il tutto con qualche indicazione su una risorsa per fare un benchmark “obiettivo” che è sempre difficile da trovare.

  13. @Sergio Gandrus Sì sono due ottimi plugin…l’unico problema di autoptimize è che non svuota mai la cache e può occupare lo spazio su disco —> quindi ogni tanto va svuotata la cache. Per i benchmark direi che Yslow e PageSpeed siano ottimi strumenti utilizzabili come plugin di Firefox insieme a Firebug.

  14. @Emanuele Alcuni plugin che non usano il metodo adatto per aggiungere i js e i css non possono sfruttare quella funzione quindi devi entrare nel plugin e mettere gli if all’interno dei plugin stessi.

  15. Sia Yslow che PageSpeed sono buoni add-on (che ho recensito in post del mio blog) però intendevo un tool esterno, basato su server, che giudicasse in maniera obiettiva il caricamento.
    Un servizio decentralizzato che facesse stare tranquillo l’ottimizzatore del sito

  16. Sai @Sergio trovare un tool di questo tipo non è poi così rassicurante perché comunque bisogna considerare molti fattori come la posizione del server da cui si fa il test, lo stato della rete etc etc…tanti fattori insomma che comunque non ci lascerebbero tranquilli 🙂

  17. Per Google la velocità di caricamento di un sito è diventato un fattore importante per l’indicizzazione.
    Se seguono la solita linea di comportamento, metteranno a disposizione degli sviluppatori gli stessi strumenti che loro utilizzano per le variabili dell’algoritmo. Quindi, forse, un tool (bilanciato sui vari server) che misuri questo valore.
    Vedremo.

  18. Come posso sapere se il mio hosting è abilitato per la compressione gzip? Ho incollato nel file .htaccess il codice che ho trovato nell’articolo, ma la compressione non è attiva.

  19. Ciao Stefy,
    per vedere se è compresso puoi usare questo tool online http://www.whatsmyip.org/http_compression/, ma per capire se è abilitato devi sentire il tuo hosting provider anche perché potresti avere attivo il modulo gzip e non il deflate.

  20. Mi dice che non è attivo infatti 🙁 Per il modulo gzip devo sempre incollare qualcosa nel file htaccess? Cosa?

    Grazie!

    • Vorrei evitare l’uso di altri plugin e utilizzare solo il file htaccess 🙂

      • Prima di provare ad utilizzare le varie direttive secondo me ti conviene chiedere al tuo hosting provider e poi sulla base di questo regolarti di conseguenza.

        Devi sapere che versione di apache gira, che moduli sono installati, se puoi usare htaccess per modificare queste direttive…insomma tutta una serie di cose che ti permettono di decidere la strada da adottare perché la compressione delle pagine è un incrocio ampio quindi ci sono molti modi di abilitarlo.

  21. Ho fatto Andrea, ho chiesto se erano attivi i moduli gzip e deflate, ecco la triste risposta:

    Quei moduli non sono attivi in quanto causerebbero
    un aumento non indifferente del carico CPU sui
    server.

    🙁 Cosa posso fare per la compressione?

    • Prova con questo
      php_value output_handler ob_gzhandler
      ma non è detto che funzioni perché spesso su host condivisi non ti danno la possibilità di fare queste modifiche.

      Se non va puoi provare ad utilizzare uno dei plugin che ho elencato sopra.

  22. Quella stringa dovrei inserirla sempre nel file htaccess?

    Nel frattempo ho provato pure a inserire questa nel file header.php:

    Peccato che non funzioni, mi esce un messaggio di errore che mi dice “la compressione non è supportata”.

  23. Ho inserito quel tuo codice nell’htaccess, il sito si apre senza problemi. Come posso capire se la tua stringa funziona e c’è la compressione?

    Prima non sono riuscita a copiarti la stringa che mi dava errore, non compare nel commento.

  24. Ciao Andrea,

    davvero complimenti per la guida. bookmarkata e stampata.

    Ho una domanda: nell’htaccess aggiungere questo codice

    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css

    SetOutputFilter DEFLATE

    da lo stesso effetto del codice da te proposto per la compressione?

    li ho testati entrambi con YSlow è il risultato è lo stesso. Mi chiedo se una delle due versioni è più accurato o offre più vantaggi o se invece no.

    Grazie.

    • Ciao juzdongivaphuck e grazie mille.

      Quel codice è esattamente identico ed è solo la definizione inline delle stesse direttive.

      Le ho messe distinte per far capire che in base al tipo di file può essere specificato se comprimere oppure no.

  25. Confermo il problema Autoptimize…che su siti trafficati alla lunga riempie anche lo spazio su disco e blocca la creazione delle pagine…basta svuotare la cache ogni tanto e direi che attendiamo la tua modifichina al plugin 😉
    Grande Sergio…ottimo post.

  26. Sei davvero molto bravo e gentile a scrivere articoli cosi’ interessanti ed utili. Continua cosi! Ti ho trovato in rete per caso…spero di sentire sempre di piu’ il tuo nome nel settore SEO italiano. Ciao.

  27. Complimenti davvero, proverò senz’altro a mettere in atto almeno un paio dei tuoi ottimi consigli.
    Grazie per averli condivisi.

  28. Ottimo articolo ma la domanda sorge spontanea: le indicazioni sono valide anche per WordPress 3?

    Grazie

  29. Grazie a questa guida sono riuscito ad ottimizzare il mio sito facendolo diventare velocissimo!

  30. Ciao, volevo fare la modifca del contact form 7, solo che io ho 2 moduli di contatto,
    1) http://www.accenno.info/contatti/
    2) http://www.accenno.info/inserisci-un-sito/

    come posso fare, non sono un esperto di codici

  31. innanzitutto grazie mille..
    avrei però una domanda da porti: avevo installato wp super cache e poi disinstallato perchè mi andava in conflitto con all in one seo pack.
    nonostante ciò, mi sono ritrovato in più questa stringa di codice

    e soprattutto non mi va più la funzione gzip compression delle pagin, o meglio se la riattivo non mi funziona più l’all in one seo… sai illuminarmi a riguardo?
    grazie mille..

    • Non vedo il codice Copywriter…riesci a metterlo di nuovo evitando i tag di script ?

      • ciao Andrea

        grazie della risposta. Nel frattempo ho ovviato cambiando a mano il codice ma era comunque strano che fosse comparso. La stringa php era così:

        xml version=”1.0″ encoding=”UTF-8″ sai cosa significa?? sotto il charset è già dichiarato, mi sembra una ripetizione, prima non c’era

        Ho risolto anche per il gzip spostando nel file functions.php, però non vorrei che, avendo tolto a mano quella stringa, sorgessero poi altri problemi… riusciresti a dar un’occhiata veloce al mio codice per vedere se va bene? ora la stringa che ho messo sopra non c’è più

  32. Sì, scusami ma non sono molto competente a riguardo… semplicemente ho attivato poi disattivato wp super cache.. ho tolto tutto, ma proprio tutto, di quel plugin, ma mi è rimasta quella stringa lì..

  33. Mamma mia, quante istruzioni ^^

  34. ciao andrea, sono Alessandro (sandroid) e ci siamo conosciuti al reduno gt di ostia. Grazie a questo tuo post da oggi GWT mi segnala un tempo di caricamento delle pagine dimezzato rispetto a prima e infatti va una freccia. OTTIMO! thanks e complimenti!

  35. Ciao Andrea,
    leggo spesso i tuoi consigli su come migliorare wordpress, e leggendo il tuo post
    ho provato ad inserire, ahime!! senza riuscire, i conditional tags nel sito della nostra associazione sportiva, per evitare il continuo richiamo a contact form 7, il sito in questione utilizza il tema Arras.

    Hai qualche piccolo suggerimento su come devo agire?

    Anche se non dovessi rispondere, ti volevo ringraziare ugualmente, per i tuoi preziosi consigli.

    GRANDE

  36. Quanta carne al fuoco!
    Ho una domanda stupidissima da farle. Con w3tc non si riesce anche a fare la “compressione dati” ossia tutto ciò che è spiegato nella parte numero 1?

  37. Complimenti, ottimo post!
    L’ho trovato molto utile.
    Occhio solo che i blocchi di codice non sono visualizzati correttamente. 😉

  38. Ciao,
    complimenti per l’ottimo articolo.Sto provando ad ottimizzare il mio sito, ma purtroppo il codice javascript me lo rallenta.Analizzando il sito con Yslow mi dà come principale ottimizzazione “Combine external JavaScript”, solo che non ho la minima idea di come fare.Quasi tutto questo codice è dovuto ai pulsanti di condivisione, che stanno sotto ad ogni articolo.Come posso fare ad unire tutti i codici javascript in uno solo?
    Ad esempio per il pulsante mi piace di facebook ho questo codice:

    <fb:like href="” width=”170″ layout=”button_count” send=”false” font=””>

    Il codice viene richiamato da tutti i 10 pulsanti mi piace nella homepage…cosa devo fare precisamente?
    Grazie in anticipo.

  39. Salve Andrea, l’articolo è molto interessante e l’ho letto volentieri, ci tengo a segnalarti però che il plugin di wordpress per smush è molto instabile (per colpa di smush stesso purtroppo) e che per W3 Total Cache c’è da fare molta attenzione alla versione in uso (se non addirittura evitarlo) dato che può permettere ad utente malizioso di sfruttare una vulnerabilità per un attacco remoto. Saluti!

    • Ciao Soraph, grazie.
      L’articolo sarebbe da aggiornare e lo so, ma su smush.it anche se instabile non crea problemi lato frontend (semmai in fase di upload immagini) e per quanto riguarda w3tc il problema non è di w3tc in realtà, ma di come le persone configurano i propri server 😀

  40. Soraph aveva raggione, perchè il plugin presentava qualche bug. teneva in cache anche le credenziali di accesso al sito, nella cartella cache. però questo problema è stato sistemato e adesso non presenta più nessun rischio sulla sicurezza del sito.
    io ho rinunciato di utilizzare smush, ho trovato un’altro plugin che funziona benissimo: EWWW Image Optimizer 🙂
    Complimenti per l’articolo, è molto chiaro e semplice da seguire.
    Alla lista dei CDN vorrei aggiungere Rackspace. Costa pochissimo, è veloce, facile da gestire. Poi chi sta utilizzando W3 Total Cache ha la possibilità di caricare i file statici (css, js, png ecc) con un click 🙂
    Io per esempio ho caricato pure i file css, js e le immagini dei plugin che sto utilizzando.
    Ho aggiunto alla lista Custom list in W3TC:

    wp-content/plugins/*.png
    wp-content/plugins/*.jpg
    wp-content/plugins/*.jpeg
    wp-content/plugins/*.css
    wp-content/plugins/*.js
    wp-content/uploads/*
    wp-content/uploads/*.jpg
    wp-content/uploads/*.jpeg
    wp-content/uploads/*.png

    Il Google Page Speed è salito da 82 a 87. Ed sto utilizzando circa 30 plugin sul mio sito:)

    • Scusami ma non riesco a capire dove hai inserito le seguenti voci su w3 total cache:

      wp-content/plugins/*.png
      wp-content/plugins/*.jpg
      wp-content/plugins/*.jpeg
      wp-content/plugins/*.css
      wp-content/plugins/*.js
      wp-content/uploads/*
      wp-content/uploads/*.jpg
      wp-content/uploads/*.jpeg
      wp-content/uploads/*.png

      Grazie

      • Ciao Marco! Andando sul tab CDN del plug-in w3 Total cache, troverai anche il campo custom list dove puoi aggiungere la lista di file da caricate sul tuo Cdn.

  41. Cristiano on

    Ciao Andrea, ho sentito che usare Cloudflare rallenta il caricamento al boot di Google e quindi c’è una perdita di ranking. Tu che ne pensi? C’è modo per evitarlo?

    Grazie

    Cristiano

  42. Alessandro on

    Ciao Andrea, sto valutando di cambiare il mio hosting provider. L’esperienza con Aruba è stata alquanto deludente dal punto di vista delle prestazioni. Dici di conoscerne di ottimi: qualche consiglio? Ho letto molte recensioni positive su Bluehost, ma ho diversi dubbi. Primo è negli Usa (e quindi la velocità di risposta ne risentirebbe, giusto?), secondo non gestisce direttamente i domini .it, quindi dovrei tenere comunque un register italiano. Grazie mille in anticipo!

  43. Quale dovrebbe essere il tempo ottimale di caricamento di un sito web? Il mio sito ha dei tempi variabili a seconda dell’ora e della giornata. A volte 6 secondi, a volte 12. Grazie in anticipo.

    • Non c’è un tempo ottimale. Dipende da che tipo di sito hai.

      Di sicuro se lo porti sotto i 4 secondi è una buona cosa. Devi anche guardare il tempo che impiega al documento interattivo piuttosto che al totale.

  44. Ciao Ho letto con interesse il tuo articolo e ho fatto immediatamente un page speed con google.
    Avevo già 88 come punteggio e mi sono messo ad ottimizzare i CSS con clean Css (servizio che uso spesso e ritengo affidabile per tutti i miei siti) e Minify Javascript. Risultato: sono passato a 41 su google page speed. Ho ripetuto il test immediatamente e segna 46, ho ripetuto il test la terza volta senza alcuna modifica e segna 88.
    Ho eliminato tutte le modifiche e segna 91.
    Non capisco veramente. Di cosa mi devo fidare?

  45. Ciao Andrea,
    interessantissimo articolo. Ho fatto delle prove modificando l’.htaccess, ma sembra mi dia dei problemi con l’url rewriting. Puoi darmi qualche suggerimento? Grazie e buon lavoro.

  46. Questa è un’ottima base per ottimizzare WordPress e si tratta di una risorsa davvero valida. Grazie per la condivisione Andrea

  47. Grazie Andrea dell’utile articolo. In questi 4 anni ci sono cose che cambieresti?
    Mi interesserebbe conoscere gli hoster che consigli per WordPress (mi sto guardando in torno anche se ora ho Noamweb e non mi trovo malaccio, quanto meno hanno un’assistenza molto solerte).
    Vorrei anche capire meglio: 1. se uso Autoptimize che fa tutto non mi serve Smush.it 2. però se il mio è un problema tutto delle immagini meglio Smush.it e basta che non mi dà problemi di cache?
    Ci sono plugin analoghi migliori oggi?
    Grazie del tuo tempo

  48. Ma mettere nuovi plugin per velocizzare non è un controsenso un po’? Voglio dire, i plugin appesantiscono…

    • Non è un controsenso e i plugin appesantiscono solo se sono fatti male.
      Una delle forze di WordPress è proprio nel sistema di plugin che permette di aggiungere funzionalità senza intaccare il core.

  49. Ho scritto questa http://seoblog.giorgiotave.it/seo/wordpress dove c’è anche una parte sulle performance.

  50. Grazie, l’ho studiato tutto ieri già, molto utile.

  51. Ciao Andreaaaaaa, se a qualcuno interessa tempo fà ho scritto un articolo dettagliato su come bloccare il caricamento di plugin e file script utilizzando i conditional tags

    Ma sono qui per segnalare che esiste un plugin apposito che esegue questa funzione in modo ottimo e l’utilizzo è molto semplice, tramite bottoni ON/OFF è possibile selezionare quale plugin attivare o disattivare, il plugin si chiama organizer Ciao 😉

  52. ciao Andrea,

    ho provato a verificare la speed page e noto che : There are 27 JavaScript files served from http://www.milanails.it.
    per evitare di scaricare altri plug in ho seguito tuo consigli e avviato code beautifull inserendo il mio url : http://www.milanails.it e mi ha creato un lunghissimo codice, che ci devo fare ora ? copiarlo e sostituirlo al vecchio ? nel function.php ?
    altra cosa, il sito è registrato su dominio godaddy e mi permette solo di fare download per Cyberduck e non per Filezilla (lavoro con mac), è corretto o esiste qualche escamotage ?

    grazie saluti

  53. Ciao andrea, complimenti per le cose che dici, peccato che non sono programmatore e per me è difficile anche perchè ho paura di fare danni nel tema e in altri punti, ho provato ad utilizzare autoptimize ed è come wp minify, ovvero inutile, pere le immagini uso smush ma lo ritengo mediocre, fortuna che ottimizzo sempre a monte con altir programmi am se ci fosse un altro sistema sarebbe meglio, smush a mio avviso non è valido, poi leggo code beautifull a cosa serve? io vorrei snellire il mio sito ma non so come, potresti fare una guoida per dilettanti programmatori come me? non vorrei creare il panico, ultima cosa come faccio a splittar ei commenti e cose significa splittare, grazie, scusa ma più che altro sono un web writer ed un grafico impaginatore, come programmatore prorpio non mi ci riconosco…

  54. Ciao Andrea complimenti per l’articolo. Un consiglio: sto finendo un sito con wordpress con avada theme è vero che è un condiviso, ho attivato il plugin Autoptimize spuntando le voci: Optimize HTML Code e Optimize JavaScript Code mentre se spunto la voce Optimize CSS Code il theme in versione cellulare mi cambia tutto. Ho anche cambiato nel wp-config settandolo a 256 define( ‘WP_MAX_MEMORY_LIMIT’, ‘256M’ ); ho detto all’assistenza dell’hosting di attivare i moduli APACHE – HEADERS E EXPIRES inserendo il codice come da te consigliato nell’htaccess e loro mi hanno risposto: il webserver non è Apache e la configurazione MASTER del server fisico, non può essere modificata. Gli ho anche evidenziato che l’homepage ha 1 slide con 2 foto, dei contenuti testuali e 4 foto mi hanno detto che mi consigliano un hosting dedicato o perfino un server dedicato che per me sembra esagerato la loro risposta. Tu cosa consigli? Dato che ho il problema di un lento caricamento iniziale a volte anche 7/8s poi una volta caricato il sito è veloce

    • Ciao Rosario. Per gestire correttamente la gestione di cache quando hai versioni mobile differenti bisogna un po’ giocare con le esclusioni degli user-agent.

      Per quanto riguarda invece il tuo server cosa usano esattamente come webserver? IIS su Windows?
      In ogni caso ogni server web ad oggi supporta expire headers e compressione.

  55. Grazie per la risposta. L’hosting usa web server litespeed ed è netsons

  56. Francesco on

    Ciao Andrea hai fatto cenno ad alcuni provider che potresti consigliare per ospitare il proprio WP, puoi citarne qualcuno che ritieni tra i più affidabili?
    È veramente difficile scegliere tra le tante offerte. E poi tu consiglieresti un VPS, un CLOUD o una macchina autogestita? Conosci Vhosting? Serverplan?
    Grazie davvero

    • Ciao Francesco dipende molto dalle tue competenze.

      Se non conosci bene la parte sistemistica ti conviene rimanere su hosting altrimenti con una VPS anche non troppo grande potresti andare alla grande in base ai carichi che hai.

      Di italiani conosco dnshosting.it che hanno dei piani WordPress.

  57. Francesco on

    Grazie mille Andrea,
    ma a livello di prestazioni (magari affidandosi all’assistenza sistemistica) tra una VPS e una macchina esistono grandi differenze? Quali sono i pro e i contro dell’una o dell’altra scelta?

    Grazie ancora

  58. Esatto ho usato un termine inappropriato. Sì intendevo un dedicato con assistenza ☺

    • Diciamo che dipende dalle risorse che ti servono. In generale a parità il dedicato costa meno, ma vedi bene le policy in caso di guasti.

      L’assistenza in genere non è qualcosa che i provider forniscono per questi servizi, ma ti conviene chiedere se c’è opzione managed.

  59. Ciao Andrea,
    il tuo post è ancora valido anche con le attuali versioni di wordpress? Grazie.

Leave a Reply

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