Post on 05-Dec-2014
description
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»</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!