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

Post on 05-Dec-2014

2.455 views 0 download

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

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

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

di ANDREA CARDINALI

SI DICE CHE LA SEO E’ MORTA…

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

#1: LA SEO NON MORIRA’ MAI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

#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/

#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

#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

#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ì*

#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>

#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' );

#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

#2 LINKING INTERNO E INDICIZZAZIONE – STATUS CODE

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

STATUS CODE 200: OK

#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

#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;}

#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 );}

#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)

#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(‘webmaster@example.com’,’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:

#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>

#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:

#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/

#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 )

#3: EVITARE CONTENUTI DUPLICATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

NO AI CONTENUTI DUPLICATI

#3: EVITARE CONTENUTI DUPLICATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

36 + 15 + 17= 68

#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;?>

#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

#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:

#5: UTILIZZARE I MICROFORMATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

MICROFORMATI

#5: UTILIZZARE I MICROFORMATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

HCALENDAR

#5: UTILIZZARE I MICROFORMATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

HREVIEW-AGGREGATE (VOTES)

#5: UTILIZZARE I MICROFORMATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

HREVIEW-AGGREGATE (COUNT)

#5: UTILIZZARE I MICROFORMATI

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

HRECIPE

#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

#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.

#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

WEB PERFORMANCE OPTIMIZATION

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

DOMANDE?

WORDCAMP BOLOGNA - 9 FEBBRAIO 2013 @WORDCAMPBOLOGNA # WPCAMPBO13

RELATORE

Andrea Cardinali

Web: www.andreacardinali.it

Twitter: @andreacardinaliGoogle + : Andrea Cardinali

GRAZIE!