5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

35
WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13 5 Regole SEO da tenere a mente nello sviluppo di temi e plugin Wordpress di ANDREA CARDINALI

description

Concentrato di best practices relative alla seo “on site”. Si parla di indicizzazione, linking interno,status code e microformati e di tanti piccoli accorgimenti che possono portare grandi risultati. Ogni consiglio è accompagnato da diversi snippet di codice

Transcript of 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

Page 1: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

5 Regole SEO da tenere a mente nello sviluppo di temi e plugin Wordpress

di ANDREA CARDINALI

Page 2: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

SI DICE CHE LA SEO E’ MORTA…

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

Page 3: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#1: LA SEO NON MORIRA’ MAI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

Page 4: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

LINKING INTERNO

FONTE: http://www.linkdex.com/blog/page-rank-and-link-juice-explained/

Page 5: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

LINKING INTERNOIn generale evitare di avere troppi link su una pagina.

Cosa evitare:• Tag cloud nel footer (effettuare una selezione dei tag)• Paginazione elevata

Cercate di distribuire al meglio il link juice.

Cosa fare:• Utilizzare i breadcrumbs• Link sitewide alla mappa del sito• Linkare le pagine con ancor text differenti• Se nella pagina sono presenti più link alla stessa risorsa, verificare che il link che

si trova più in alto nella pagina (nel codice sorgente) abbia un anchor text ottimizzato (es. Titolo post + leggi tutto)

• Noindex, follow nelle pagine superiori alla prima

Page 6: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – ROBOTS.TXT

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

ROBOTS.TXTFile virtuale gestito in automatico da WP (Non inserirlo nella web root)

User-agent: * Disallow: /filedabloccare.php

add_filter(‘robots_txt’,’crd_blocca_file’,999,1);function crd_blocca_cartella_plugin($output){

$site_url = parse_url( site_url() );$path = ( !empty( $site_url['path'] ) ) ? $site_url['path'] : '';$output .= "Disallow: $path/filedabloccare.php\n";return $output;

}

Aggiungere regole al robots.txt

Page 7: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – META ROBOTS

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

GESTIONE meta name=‘robots’ Se non specificato lo spider considera la pagine come INDEX, FOLLOW

NOINDEX, NOFOLLOW• i link presenti all’interno della pagina non vengono seguiti• tutto ciò che non vogliamo compaia nei risultati di ricerca

NOINDEX, FOLLOW• la pagina non compare nei risultati di ricerca ma i risultati sì*

Page 8: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – META ROBOTS

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

GESTIONE meta name=‘robots’

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name='robots' content='noindex,follow' />

add_action( 'wp_head',crd_custom_meta',999 );

function crd_custom_meta() {echo "<meta name='robots' content='noindex,follow' />\n";}

http://support.google.com/webmasters/bin/answer.py?hl=it&answer=93710

Aggiungere il <meta name=‘robots’> nell’ <head>

Page 9: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – META ROBOTS

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

GESTIONE meta name=‘robots’

Bloccare indicizzazione tramite Header X-Robots-Tag

<?php@header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );@header( 'X-Robots-Tag: noindex' );

Page 10: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – STATUS CODE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

RISPOSTE HTTP (STATUS CODE) CORRETTE200 - OK302 – Found 301 – Moved Permanently404 – Not Found503 - Unavailable

TOOLS:• Firebug• Network Inspector• Fiddler

Page 11: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – STATUS CODE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

STATUS CODE 200: OK

Page 12: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – STATUS CODE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

STATUS CODE 302 (TEMPORANEO)

• Da utilizzare quando si cambia provvisoriamente url a una risorsa. (es. voglio dirottare i visitatori dalla homepage a una landing page)• Lo spider non aggiorna l’url della risorsa• Non trasferisce Link juice

• ATTENZIONE: wp_redirect($url) utilizza il 302• Utilizzato anche per _wp_old_slug

Page 13: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – STATUS CODE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

STATUS CODE 301: MOVED PERMANENTLY

• Da utilizzare quando si cambia url a una risorsa.• Trasferisce Link juice• Utile soprattutto quando si cambia permalink ad un url dopo la pubblicazione• Attenzione a _wp_old_slug (function wp_old_slug_redirect )• Attenzione a quando si cambia la struttura dei permalink

Wordpress di default utilizza lo status code 302 (Non passa link juice).Per modificare questo comportamento:

add_filter(‘wp_redirect_status’,’crd_redirect_corretto’,10,2);

function crd_redirect_corretto ($location,$status){ //aggiungere eventuale condizione aggiuntiva x 301

if(302==$status)$status=301;

return $status;}

Page 14: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – STATUS CODE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

STATUS CODE 301: MOVED PERMANENTLY

Come inserire un redirect (o qualsiasi altra regola) nel .htaccess

Redirect 301 /vecchio-url/ http://www.example.com/nuovo-url/

//utilizzare solo nell’admin es. add_action('admin_init', 'crd_htaccess');

function crd_htaccess(){

$htaccess_file = ABSPATH.'.htaccess';$rules=array();$rules[]='Redirect 301 /vecchio-url/ http://www.example.com/nuovo-url/';insert_with_markers( $htaccess_file, 'Marker personalizzato Redirect', $rules );}

Page 15: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – STATUS CODE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

STATUS CODE 404: NOT FOUND• Restituito ogni volta che si richiede una risorsa inesistente• Importante monitorarli ( è possibile farlo in almeno 4 modi diversi)• E’ possibile personalizzare la pagina d’errore (404.php)

Page 16: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – STATUS CODE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

STATUS CODE 404: COME TRACCIARLO (1)

add_action (‘template_redirect’,’crd_log_404’);function crd_log_404(){

if(is_404()){//consigliato solo per siti nuovi e/o con pochi erroriwp_mail(‘[email protected]’,’errore 404’, $_SERVER[‘REQUEST_URI’]);

//il file error.log deve essere scrivibilefile_put_contents(‘error.log’,sprintf(‘%s - %s ’,date(‘d-m-Y h:i:s’), ’, $_SERVER[‘REQUEST_URI’])

}}

Tracciamento tramite file di testo e/o email di alert:

Page 17: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – STATUS CODE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

STATUS CODE 404: COME TRACCIARLO (2)

Tracciamento tramite Google Analytics (inserire in 404.php)

<script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXX-X']); _gaq.push(['_trackEvent', 'Error', '404', ‘pagina’+ document.location.pathname + document.location.search + '&from=' + document.referrer]);

(function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();</script>

Page 18: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2 LINKING INTERNO E INDICIZZAZIONE – STATUS CODE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

STATUS CODE 404: COME RESTITUIRLO

<?php global $wp_query;$wp_query->set_404();status_header( 404 );

?>

Impostare manualmente un 404:

Page 19: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2: MASSIMIZZARE L’INDICIZZAZIONE – STATUS CODE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

STATUS CODE 404: NOT FOUNDPersonalizzate il template 404.php

• [Internet Explorer will only show your custom 404 page if it’s larger than 512 bytes (hard to get smaller than that with WordPress).]

Proponete alternative:• Ricerca• Sitemap• Link all’homepage• Miglior alternativa

http://yoast.com/404-error-pages-wordpress/

Page 20: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#2: MASSIMIZZARE L’INDICIZZAZIONE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

STATUS CODE 503: SERVICE UNAVAILABLE

• Da utilizzare durante le operazioni di manutenzione• Specificare anche l’header Retry-After

<?php$protocol = $_SERVER["SERVER_PROTOCOL"];if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol )

$protocol = 'HTTP/1.0';header( "$protocol 503 Service Unavailable", true, 503 );header( 'Content-Type: text/html; charset=utf-8' );header( 'Retry-After: 3600' ); // 3600 secondi = 1ora?><!DOCTYPE html><html><head>

<title>Sorry, We're Getting Tuned Up</title><!– […] -->

Per personalizzare la pagina, creare il file maintance.php dentro wp-content (non utilizzare funzioni di WP )

Page 21: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#3: EVITARE CONTENUTI DUPLICATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

NO AI CONTENUTI DUPLICATI

Page 22: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#3: EVITARE CONTENUTI DUPLICATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

36 + 15 + 17= 68

Page 23: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#3: EVITARE CONTENUTI DUPLICATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

COME EVITARE I CONTENUTI DUPLICATI -1

• Evitare d’inserire l’excerpt nella pagina in cui è presente il post (è un riassunto)• Scegliere se far indicizzare categorie o tag (non entrambi)

Nelle pagine archivio e categoria non inserire il post completo

if(have_posts()):while(have_posts()):the_post();?><div class=‘post’><h3><a href="<?php the_permalink()?>"><?php the_title()?></a></h3><?php the_excerpt()?><p><a class="btn" href="<?php the_permalink()?>">Leggi&raquo;</a></p></div><!--/.post--><?php endwhile; endif;?>

Page 24: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#3: EVITARE CONTENUTI DUPLICATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

• Aggiungere testo unico nella pagina archivio (solo nella prima e non nelle successive)

<h1><?php echo single_cat_title('',false)?></h1>

<?php if(!is_paged()): <p><?php category_description()?></p> <?php endif;?>

DESCRIZIONE UNICA IN ARCHIVE.PHP

COME EVITARE I CONTENUTI DUPLICATI - 2

Page 25: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#4: CANONICALIZZAZIONE DEI CONTENUTI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

UTILIZZO rel=‘canonical’Es. ordinamento risultati tramite query string

http://www.example.com/prodotti/plugin/?sort=alphahttp://www.example.com/prodotti/plugin/?sort=price

remove_action(‘wp_head’,’rel_canonical’);add_action(‘wp_head’, crd_manage_canonical’);

function crd_manage_canonical(){ $link=‘http://www.example.com/prodotti/plugin/’; echo "<link rel='canonical' href='$link' />\n";}

<link rel=‘canonical’ href=‘http://www.example.com/prodotti/plugin/’ />

COME AGGIUNGERE IL CANONICAL IN UNA PAGINA:

Page 26: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#5: UTILIZZARE I MICROFORMATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

MICROFORMATI

Page 27: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#5: UTILIZZARE I MICROFORMATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

HCALENDAR

Page 28: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#5: UTILIZZARE I MICROFORMATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

HREVIEW-AGGREGATE (VOTES)

Page 29: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#5: UTILIZZARE I MICROFORMATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

HREVIEW-AGGREGATE (COUNT)

Page 30: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#5: UTILIZZARE I MICROFORMATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

HRECIPE

Page 31: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#5: UTILIZZARE I MICROFORMATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

IMPLEMENTARE rel=‘author’3 STEP1. Link dall’articolo alla pagina autore interna al sito2. Link dalla pagina autore al profilo G+ con rel=‘author’3. Link dalla pagina profilo G+ alla pagina autore con rel=‘me’

APPROFONDIMENTO: http://seoblog.giorgiotave.it/implementare-rel-author/2108

Page 32: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#4: EVITARE CONTENUTI DUPLICATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

IMPLEMENTARE rel=‘author’In single.php

Altri articoli di<a href="<?php echo get_author_posts_url(get_the_author_meta('ID'));?>“ rel=“author”><?php the_author()?></a>

In author.php

<a href="<?php echo get_the_author_meta(‘gplus');?>" rel=“me" target="_blank">Google plus</a>

gplus è un custom user meta.

Page 33: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

#4: EVITARE CONTENUTI DUPLICATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

APPROFONDIMENTISCHEMA.ORGhttp://www.schema.org

GOOGLE RICH SNIPPET TESTING TOOL:http://www.google.com/webmasters/tools/richsnippets

GENERATORE SCHEMA.ORG: http://www.microdatagenerator.com/

ALTRO GENERATORE SCHEMA.ORGhttp://schema-creator.org

Page 34: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

WEB PERFORMANCE OPTIMIZATION

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

DOMANDE?

Page 35: 5 consigli SEO da tenere a mente durante lo sviluppo di temi e plugin @ WpCamp Bologna 2013

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

RELATORE

Andrea Cardinali

Web: www.andreacardinali.it

Twitter: @andreacardinaliGoogle + : Andrea Cardinali

GRAZIE!