NEWS E TUTORIAL SU APPLICAZIONI E SITI WEB

Prima pagina Google: le web performance come fattore di ranking per i siti web

Guida visuale al posizionamento di un sito WordPress nella prima pagina di Google - Seconda parte

Questo è il secondo di una serie di tre articoli che illustrano, passo passo, quali sono i punti fondamentali di una strategia SEO vincente, quali gli strumenti da adottare e come configurarli e utilizzarli, con l’obiettivo di posizionare, nel più breve tempo possibile, un sito web realizzato con WordPress nella prima pagina dei risultati di ricerca di Google e Bing. Ogni punto è illustrato con esempi pratici e una guida visuale alle configurazioni adottate.
Al termine di questa serie di articoli sarai in grado di gestire e migliorare il posizionamento del tuo sito web su Google e Bing.

Nel primo articolo abbiamo analizzato i principali fattori di ranking quali i contenuti, i link, la fruibilità su mobile e le parole chiave. Abbiamo anche visto come configurare nel dettaglio e al meglio il principale plugin SEO di WordPress, Yoast SEO.

In questo secondo articolo metteremo in luce l’importanza delle web performance, ossia la velocità di caricamento e di visualizzazione delle pagine web, come fattore di ranking. Anche in questo caso elencheremo i parametri fondamentali da tenere in considerazione e, per ognuno di essi, vedremo quali misure adottare e come.

Infine, nel terzo articolo, impareremo come registrare un sito web su  Google e Bing e come configurare, voce per voce, i rispettivi tool, Google Search Console e Bing Webmaster Tools. Vedremo anche come migliorare il nostro posizionamento locale su Google utilizzando lo strumento Google My Business.

Vediamo dunque il secondo articolo.

Come misurarle

I tempi di caricamento pagina attualmente ritenuti accettabili sono di 2s su desktop e di 3s su dispositivi mobili (più lenti per via delle connessioni 3G ancora presenti). Per valutare questo parametro sono disponibili alcuni strumenti free

  • PageSpeed Insights – di Google
  • Test your mobile speed – di Google, dedicato ai dispositivi mobili
  • Gtmetrix – utilizza sia PageSpeed Insights sia Yahoo! YSlow
  • Pingdom Website Speed Test
  • WebPagetest – permette di visualizzare e di confrontare tra loro le sequenze temporali di come le pagine vengono visualizzate nel tempo
  • Visualizzazione “Network” dei developer tool dei browser (consigliati Chrome e Firefox, tasto F12 e poi tab Network).

Misurate la velocità di caricamento (valor medio su almeno 5 rilevazioni) e/o il punteggio ottenuto prima e dopo ogni modifica per valutarne l’effetto.


Caching – Plugin di caching

Impostazioni per WP Fastest Cache

Impostazioni per WP Fastest Cache

Installate un plugin di caching in modo che ai visitatori vengano servite delle pagine statiche, riducendo quindi il tempo di processing lato server. Nel corso degli anni ne abbiamo provati tre, tutti gratuiti

  • W3 Total Cache, permette di configurare tantissimi parametri ed è adatto per Utenti più esperti
  • WP Super Cache, è meno complesso da configurare
  • WP Fastest Cache, è il più semplice da configurare e permette (almeno nel nostro caso) di ottenere velocità di caricamento comparabili o migliori di quelle di WP Super Cache

Se prediligete la semplicità d’uso, potete utilizzare WP Fastest Cache che può essere configurato come riportato a lato


Caching – Caching del browser

Se viene impostata una data di scadenza o un’età massima nelle intestazioni HTTP per le risorse statiche, il browser carica le risorse precedentemente scaricate dal disco locale invece che dalla rete.

Se per il caching si utilizza W3 Total Cache, configurarlo come riportato nei seguenti due articoli alla voce “Leverage Browser Caching with W3 Total Cache”

Se per il caching si utilizza WP Fastest Cache (consigliato per semplicità d’uso), configurarlo come riportato di seguito

Impostazioni di WP Fastest Cache per browser caching

Impostazioni di WP Fastest Cache per browser caching


Caching – DNS Prefetching

Con il DNS Prefetching si richiede al browser di risolvere in anticipo il DNS dei domini esterni necessari, in modo da velocizzarne l’accesso al momento dell’uso effettivo.
A oggi, DNS Prefetching è supportato da tutti i browser ad eccezione di safari per iOS.
Per implementarlo su WordPress, il codice deve essere inserito in wp-content/themes/miotema/functions.php. Un esempio di codice è riportato di seguito

/* Adding DNS Prefetching
function dns_prefetch() {
echo '<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="dns-prefetch" href="//fonts.gstatic.com" />
<link rel="dns-prefetch" href="//www.google-analytics.com" />
<link rel="dns-prefetch" href="//fonts.googleapis.com" />';
}
add_action('wp_head', 'dns_prefetch', 0);

Caching – Rimozione delle Query Strings

Spesso negli URL dei file CSS e JavaScript viene utilizzata una query string per specificare la versione del file, es. miosito.com/style.css?ver=4.6.
Alcuni server di caching non sono in grado di mettere in cache i file che contengono una query string. Rimuovendo le query string si possono quindi prevenire problemi di caching.
Per far questo è disponibile il plugin Remove Query Strings From Static Resources. Basta installarlo, non necessita di configurazione.


Temi “snelli” e alberatura bilanciata

Utilizzo di temi ottimizzati ed eliminazione dei ritardi superflui

Spesso, per attirare l’attenzione e vendere maggiormente, i temi WordPress acquistati sui market sono ricchi di animazioni e di effetti. Prima di acquistare un tema, verificate i tempi di caricamento delle demo. Per quanto possibile, eliminate:

  • animazioni
  • ritardi voluti nella visualizzazione (es. elementi che appaiono in un secondo momento)
  • contatori o loader grafici del tempo di attesa di caricamento della pagina
  • slider animati, se non strettamente necessari (es. Slider Revolution)

Bilanciamento dell’alberatura del sito

Evitate di concentrare molti contenuti in una sola pagina che avrebbe quindi tempi di caricamento elevati, ma distribuiteli equamente tra le varie pagine.
Ad esempio, inserite il form contatti e la mappa con il vostro indirizzo in una pagina dedicata e non nella home page. Su di una linea ADSL, il download degli elementi del reCaptcha normalmente utilizzato per il form contatti e degli elementi delle mappe di Google richiede più di 1s. La creazione di una pagina dedicata per il form contatti e la mappa va inoltre a beneficio dell’esperienza Utente che può individuare immediatamente nella barra di navigazione o nel piè di pagina il link dei contatti.


Pochi plugin e caricati solo nelle pagine che li usano

Riducete al minimo il numero di plugin utilizzati e caricateli solo nelle pagine che li utilizzano. Quando possibile, invece di utilizzare un plugin, è preferibile modificare direttamente il codice dei file di WordPress (tipicamente functions.php).
Per caricare i plugin solo nelle pagine che lo richiedono è disponibile un plugin Plugin Organizer.

Il caso tipico è quello di Contact Form 7 che viene utilizzato solo nella pagina Contatti. In questo caso, se non si vuole aggiungere Plugin Organizer, è possibile modificare direttamente il codice di wp-content/themes/miotema/functions.php.

Con il DNS Prefetching si richiede al browser di risolvere in anticipo il DNS dei domini esterni necessari, in modo da velocizzarne l’accesso al momento dell’uso effettivo.
A oggi, DNS Prefetching è supportato da tutti i browser ad eccezione di safari per iOS.
Per implementarlo su WordPress, il codice deve essere inserito in wp-content/themes/miotema/functions.php. Un esempio di codice è riportato di seguito

// De-queue Contact Form 7 CSS &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; JS from all pages except where contact form is visible
  add_action( 'wp_enqueue_scripts', 'custom_contact_script_conditional_loading' );
  function custom_contact_script_conditional_loading(){
  // Edit page IDs here
  if(! is_page(998) ) {
   wp_dequeue_script('contact-form-7'); // Dequeue JS Script file.
   wp_dequeue_style('contact-form-7'); // Dequeue CSS file.
   }
  }

dove ID è l’ID della pagina che ospita Contact Form 7.

URL con ID della pagina che ospita Contact Form 7

URL con ID della pagina che ospita Contact Form 7


Riduzione del numero di font

Impostazioni pannello Google Fonts

Impostazioni pannello Google Fonts

Per personalizzare i siti su sistemi operativi differenti i temi utilizzano font specifici (es. Google Fonts). Ogni font weight è un font che deve essere scaricato. Google fornisce indicazioni circa il tempo di caricamento al variare del numero dei font weight. Limitate il numero a due al massimo, ad es. regular e bold.

Anche le icone sono font. Per quanto possibile utilizzate non più di una famiglia di icone (es. Font Awesome).


Disabilitazione pingbacks e trackbacks

Pingbacks e trackbacks sono funzionalità native di WordPress che inviano delle notifiche quando, in un altro sito, viene inserito un link al nostro sito. Possono rallentare il caricamento delle pagine e sono spesso fonte di spam per cui, attualmente, si tende a disabilitarli.

Impostazioni / Discussione

Impostazioni per disabilitazione pingbacks e trackbacks

Impostazioni per disabilitazione pingbacks e trackbacks


Disabilitazione emoji

Il supporto agli emoji implica una richiesta HTTP dedicata e il download di un file .js. Se non utilizzati, è meglio disabilitarli.

Impostazioni / Scrittura

Impostazioni per disabilitazione emoji

Impostazioni per disabilitazione emoji

Inserire inoltre il seguente codice in wp-content/themes/miotema/functions.php.

/* Disable the emoji's */
function disable_emojis() {
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_styles', 'print_emoji_styles');
remove_filter('the_content_feed', 'wp_staticize_emoji');
remove_filter('comment_text_rss', 'wp_staticize_emoji');
remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
add_filter('tiny_mce_plugins', 'disable_emojis_tinymce');
}
add_action('init', 'disable_emojis');
/* Filter function used to remove the tinymce emoji plugin. * * @param array $plugins * @return array Difference betwen the two arrays */
function disable_emojis_tinymce( $plugins ) {
 if ( is_array( $plugins ) ) {
  return array_diff( $plugins, array( 'wpemoji' ) );
 } else {return array();} 
}

Ottimizzazione del database di WordPress

Limitate il numero di revisioni salvate in memoria, svuotate automaticamente il cestino dopo un certo numero di giorni e aumentate l’intervallo di autosave (è comunque sempre presente un solo autosave, il nuovo autosave sovrascrive il precedente).
Inserire il seguente codice in wp-config.php appena prima del commento /* That's all, stop editing! Happy blogging. */.

// Limit the number of posts revisions
define('WP_POST_REVISIONS', 3);

// Modify AutoSave Interval
define('AUTOSAVE_INTERVAL', 300); // Seconds

// Automatically purge trash
define('EMPTY_TRASH_DAYS', 10 ); // Days

Ottimizzazioni PageSpeed Insights

Visualizzazione risultati analisi PageSpeed Insights

Visualizzazione risultati analisi PageSpeed Insights

PageSpeed Insights (ma anche alcuni degli altri strumenti di analisi della velocità di caricamento pagina) fornisce un elenco di punti da migliorare e i suggerimenti per farlo.
Al termine dell’elenco, permette inoltre di scaricare un file .zip delle risorse (CSS, JavaScript e immagini) ottimizzate secondo i suoi criteri.

I punti da ottimizzare saranno analizzati di seguito.


JavaScript che ritardano la visualizzazione above-the-fold

Definizione di Above-the-fold

Definizione di Above-the-fold

Above-the-fold è la parte superiore della pagina web visibile senza necessità di effettuare lo scrolling.
Il codice JavaScript presente nel <head> deve essere scaricato ed eseguito immediatamente dal browser e questo blocca l’analisi e il rendering del codice HTML del <body> e quindi la visualizzazione della pagina. Bisogna quindi

  • spostare il codice Javascript in fondo al <body>
  • oppure differirne l’esecuzione

JavaScript che ritardano la visualizzazione above-the-fold – JavaScript in fondo al <body>

Si utilizza il plugin Scripts To Footer.
Se richiesto da altri plugin, permette di mantenere jQuery nel <head>.


JavaScript che ritardano la visualizzazione above-the-fold – JavaScript differito

Si utilizzano le proprietà dell’attributo HTML5 defer.

async vs. defer

async vs. defer

Si utilizza il plugin Async JavaScript configurato in modalità defer anche per jQuery.

Impostazione plugin Async JavaScript in modalità defer

Impostazione plugin Async JavaScript  in modalità defer


JavaScript che ritardano la visualizzazione above-the-fold – in fondo al <body> vs. defer

Abbiamo provato entrambe le soluzioni

  • Async JavaScript in modalità defer, il file JavaScript viene scaricato durante il parsing dell’HTML e immediatamente eseguito al termine del parsing, dovrebbe essere più veloce in quanto il download avviene in parallelo al parsing
  • Scripts To Footer, il file JavaScript viene scaricato e poi eseguito solo al termine del parsing dell’HTML, dovrebbe essere più lento in quanto il download avviene solo al termine del parsing

Le prove non hanno mostrato differenze significative nei tempi di caricamento ma PageSpeed Insights premia Async JavaScript con 3 punti in più nella visualizzazione mobile.
L’attributo defer è attualmente supportato da tutti i browser.

ATTENZIONE: ogni browser implementa a modo suo l’attributo defer, quindi funzionamento e prestazioni vanno verificati su tutti i browser.


CSS che ritardano la visualizzazione above-the-fold

Analogamente a quanto visto nel punto precedente, il browser deve scaricare tutti i file CSS presenti nel <head> prima di procedere con la visualizzazione della pagina. Per evitare questo ritardo, si spezza il file CSS in due

  • la parte necessaria a visualizzare il contenuto above-the-fold, viene inserita come “internal style sheet” nel <head>
  • la parte necessaria a visualizzare il contenuto below-the-fold viene caricata successivamente in modo asincrono tramite uno script

La struttura HTML risultante è la seguente

Struttura HTML per ``critical`` e ``non critical`` CSS

Struttura HTML per “critical” e “non critical” CSS

Per l’implementazione, si rimanda ad un Meetup sulle Web performance che ha trattato in modo specifico l’argomento – 10° meetup Turin Web Performance: Critical CSS.


Ottimizzazione immagini

Caricate le immagini già nelle dimensioni con cui verranno visualizzate. Non caricate una immagine 1200 x 800px se poi nel layout della pagina si utilizzerà un 600 x 400px.

Utilizzate normalmente il formato .jpg. Utilizzate il formato .png solo nel caso in cui sia indispensabile la trasparenza o una qualità di immagine estremamente elevata (es. logo).

Se gestite tutte le immagini del sito e il sito ha poche immagini, caricatele già ottimizzate

Dalle prove che abbiamo effettuato, TinyPNG offre la compressione maggiore.
Se le immagini sono già state caricate, sostituitele con quelle ottimizzate da Google PageSpeed Insights dopo averle scaricate dal link posto al termine dell’elenco dei punti da migliorare.

Se il sito ha molte immagini o se le immagini sono caricate da altri o dai visitatori (es. sito di annunci), utilizzate un plugin per la compressione delle immagini

  • normalmente utilizziamo Compress JPEG & PNG images che è sviluppato dallo stesso team di TinyPNG
  • in alternativa EWWW Image Optimizer che utilizza gli algoritmi di compressione di TinyPNG ma, a differenza di TinyPNG e degli altri plugin disponibili, effettua la compressione sul server del sito e non su server esterni

Rinominate le immagini coerentemente con il contenuto visivo e inserite sempre il testo alternativo (attributo alt) per essere trovati anche tramite Google immagini (unica eccezione, le immagini cosiddette “decorative” in cui il testo alternativo deve essere nullo per non disorientare chi utilizza gli screen reader).

Inserimento attributo alt

Inserimento attributo alt


Priorità ai contenuti visibili

Impostazioni per BJ Lazy Load

Impostazioni per BJ Lazy Load

Per ridurre i tempi di caricamento pagina, è possibile scaricare solo le immagini che devono essere visualizzate nella finestra del browser.
Le altre immagini verranno scaricate successivamente quando, scrollando, si avvicineranno alla finestra del browser.
Si utilizza il plugin BJ Lazy Load configurato come a lato.

N.B.
Se utilizzate il plugin Contact Form 7 con il reCaptcha, è importante spuntare “No” in corrispondenza di “Carica gli iframe solo quando necessario”, altrimenti, sotto il reCaptcha di Contact Form 7 si forma una textarea “recaptcha response” spuria.


Compressione file con gzip

Per ridurre i tempi di scaricamento, il server comprime i file con gzip e li invia al browser che li decomprime. Se si usa un hosting, normalmente la compressione gzip è già attiva.
Utilizza questo tool per verificare se i file del tuo sito web vengono inviati compressi con gzip.
Se gzip non è presente, conviene contattare il proprio fornitore di hosting.


Minificazione file

Minificazione JavaScript e CSS

Il processo di minificazione permette di ridurre le dimensioni dei file eliminando i caratteri superflui ai fini dell’interpretazione dei file stesso come spazi, interruzioni di riga, commenti.
Normalmente i file .js e .css dei temi sono già minificati. Nel caso non lo fossero, potete sostituirli con quelli minificati da PageSpeed Insights scaricabili dal link posto al termine dell’elenco dei punti da migliorare.
In alternativa, è possibile utilizzare le opzioni di minificazione dei plugin di caching W3 Total Cache o WP Fastest Cache. WP Super Cache non ha una opzione di minificazione.

Minificazione HTML

Per minimizzare i file HTML (caso raro in quanto nella maggior parte dei casi i file sono .php) è possibile utilizzare le opzioni di minificazione dei plugin di caching W3 Total Cache o WP Fastest Cache.


HTTPS invece di HTTP

Dal 2014 Google considera l’utilizzo del protocollo HTTPS tramite un certificato SSL un fattore di ranking.
Sia Chrome sia Firefox etichettano i siti non su HTTPS come “Non sicuri” (che per un visitatore non è bello a vedersi).

Alert di connessione non sicura - Chrome

Alert di connessione non sicura – Chrome

Alert di connessione non sicura - Firefox

Alert di connessione non sicura – Firefox

Tutti i browser supportano HTTP/2 (maggiore velocità di caricamento delle pagine) solo su connessioni HTTPS.
Il protocollo HTTPS garantisce maggior sicurezza

  • cifratura dei dati scambiati, i dati non possono essere intercettati
  • integrità de dati scambiati, i dati non possono essere modificati
  • autenticazione del sito, garantisce gli utenti che il sito corrisponde al dominio digitato, infondendo fiducia

Il costo di un certificato SSL acquistato è basso (< 10 € anno).
Sono disponibili certificati SSL gratuiti, di facile installazione, ormai offerti dalla maggior parte degli hosting provider, garantiti da un Consorzio Let’s Encrypt (Mozilla, Akamai, Cisco, OVH, Chrome, Facebook, Automattic, SiteGround, …) .

RACCOMANDAZIONE: migrate il vostro sito da HTTP ad HTTPS.

L’articolo ti è stato utile? Lascia un commento o condividilo utilizzando i pulsanti social riportati di seguito.
Puoi anche scaricare la versione pdf del post.
Se hai dubbi o vuoi proporre un’idea, siamo a tua disposizione.

Contattaci