1. Alta en servicios
  2. Pake Rank
  3. Reporte b√°sico
  4. Optimización Wordpress
  5. El dominio ‚Äď http://midominio.es
  6. Servidor
  7. Conceptos SEO On Page
    1. Google Search Snippet
    2. Encabezados: <h1>...<h6>
    3. Contenido
    4. Enlaces internos
    5. Enlaces externos
    6. Microformatos
    7. Optimizar im√°genes
    8. Enlaces
    9. Dise√Īo
    10. Cache de Google
    11. One page sites
    12. Sitemap
  8. Scream Frog para el an√°lisis one page
    1. Meta etiquetas
    2. Im√°genes
  9. Velocidad
  10. robots.txt
  11. Indexar / follow
  12. Contenido duplicado
  13. Certificado de seguridad
  14. Google Search Console
  15. Enlaces interés

SEO
Dise√Īo Web

Alta en servicios

Alta en servicios de an√°lisis

Dar de alta la p√°gina en buscadores

  • El buscador google: http://www.google.es/addurl/
  • El buscador de Microsoft: http://www.bing.com/toolbox/submit-site-url
  • En directorios:
  • Damos la web de alta en el buscador de empresacrunchbase
  • Damos la web de alta en el buscador YELP
  • Damos la web de alta en p√°ginas amarillas
  • Dar de alta la web en Google My Business
    Aunque seas un desarrollador sin una dirección física real, es interesante dar de alta tus servicios en Google My Business para poder indexar en otros servicios que de otra forma no podríamos.
    Pasos:
    • Vamos a Google My Business
    • Pulsamos en "Aparece en Google"
    • Nos buscamos. Por ejemplo: "Pablo Monteser√≠n Barcelona"
    • Pulsamos en "Ninguna de estas opciones coinciden. A√Īade tu empresa"
    • Rellenamos. Cuanta m√°s info, fotos, etc, mejor para el SEO.
    • Despu√©s de completados todos los datos, aparecer√° un mensaje inform√°ndo de que mandar√°n un correo de Google con un c√≥digo de verificaci√≥n.

Alta en servicios de bloggers

Page Rank

Autoridad

Es cuan popular es tu sitio y esto se define a través de los InboundLinks, que son los enlaces externos hacia tu sitio web.

¬ŅC√≥mo funcionan los buscadores?

web con enlaces

¬ŅQu√© es el Page Rank?

¬ŅQu√© es?
Es un algoritmo de ordenación de resultados. Determina el grado de autoridad de un dominio.

¬ŅQu√© hace?

Preguntar. ¬ŅCuantos conoceis a Felipe Gonzalez? Y ¬Ņa Michael Jackson?. Si hay m√°s personas que conocen a Michael Jackson que a Felipe Gonzalez, se supone que Michael Jackson es m√°s importante y tendr√° m√°s posibilidades de ser posicionado m√°s arriba.

  • Cuantas m√°s p√°ginas linken a la m√≠a, m√°s importante es mi p√°gina
  • Cuanto m√°s importante es la web que linka mi p√°gina, m√°s relevancia tiene mi p√°gina en internet.
page rank

El paso de un page rank a otro es logaritmico. Una p√°gina de page rank 4 es 10 veces m√°s notoria q una p√°gina de page rank 3.

Para ver nuestro page rank podemos usar el plugin de firefox SeoQuake

O consultarlo en la p√°gina:
http://www.prchecker.info/

Funcionamiento interno

External Page Rank

Cada vez que una página crea urls nuevas, afecta al resto de páginas del mundo restándoles autoridad. Ya que la autoridad máxima está definida en 1 se reparte entre todas las url's del mundo. Por tanto, cuando creamos una url, estamos obteniendo la billonésima parte de 1.

Internal Page Rank

Nuestro dominio parte con un 1 de autoridad m√°xima.

Pregunta

  • El dominio A tiene 10 urls.
  • El dominio B tiene 100 urls.

Por tanto, las url's del dominio A tendr√°n m√°s autoridad interna ya que su IPR se devide entre menos urls. El dominio B tendr√° menos autoridad interna, pero m√°s autoridad esterna, ya que el los indices de Google hay m√°s urls para valorar.

Reporte b√°sico

Para obtener una idea de la evolción del dominio, podemos sacar un pantallazo a Search Console -> Performance

rendimiento search console

Optimización Wordpress

//Eliminar typea en la carga de script y css
add_action( 'template_redirect', function(){
    ob_start( function( $buffer ){
        $buffer = str_replace( array( 'type="text/javascript"', "type='text/javascript'" ), '', $buffer );
        
        // Also works with other attributes...
        $buffer = str_replace( array( 'type="text/css"', "type='text/css'" ), '', $buffer );
        $buffer = str_replace( array( 'frameborder="0"', "frameborder='0'" ), '', $buffer );
        $buffer = str_replace( array( 'scrolling="no"', "scrolling='no'" ), '', $buffer );
        
        return $buffer;
    });
});


//eliminar jQuery migrate
add_filter( 'wp_default_scripts', 'dequeue_jquery_migrate' );
function dequeue_jquery_migrate( &$scripts){
	if(!is_admin()){
		$scripts->remove( 'jquery');
		$scripts->add( 'jquery', false, array( 'jquery-core' ), '1.10.2' );
	}
}

//eliminar dash icons
add_action( 'wp_print_styles','my_deregister_styles', 100 );
function my_deregister_styles()    { 
	// wp_deregister_style( 'dashicons' ); 	
	wp_deregister_style( 'amethyst-dashicons-style' ); 
	wp_dequeue_style( 'genesis-sample-fonts' );
}

//Eliminar emojis
function grd_remove_emoji() {
	//remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
	remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
	remove_action( 'admin_print_styles', 'print_emoji_styles' );
	remove_action( 'wp_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' );
	// Remove from TinyMCE
	// add_filter( 'tiny_mce_plugins', 'grd_remove_tinymce_emoji' );
}
add_action( 'init', 'grd_remove_emoji' );

El dominio ‚Äď http://midominio.es

  1. Optimización: Debería ser fácil de recordar e incluir palabras clave.
  2. Extensión y Geolocalización: Importante sobre todo para SEO en diferentes países. Diferencias entre dominios genéricos y territoriales.
  3. Alojamiento: debería alojarse en el país que concorde con su extensión. Un .com puede estar alojado en cualquier país ya que el .com no está vinculado a ninguno en concreto. Es mejor tener un dominio y un servidor para cada idioma, que un dominio para todos los idiomas. Nota: El mismo contenido en diferentes idiomas no es contenido duplicado.
  4. Antig√ľedad: influye la fecha desde la que se empieza a generar contenido para ese dominio. Si en el momento en que el robot est√° rastreando la web, est√° est√° ca√≠da, es como si hubiese quitado la p√°gina y pierdo toda la indexaci√≥n.
  5. Caducidad: cuanto mayor es el plazo de expiración para la renovación, mayor solidez tendrá el proyecto. Por tanto a la hora de renovarlo escojeremos la mayor cantidad de tiempo. Esto no guarda relación con el servidor.
  6. Un dominio optimizado facilita el SEO, pero no es el √ļnico factor importante.

Información acerca de dominios

.com:
whois.net

.es
nic.es

Tipos de dominio

Dominios Branding (recomendado):

  • Reconocimiento de la marca.
  • Potencia la visibilidad de la marca.
  • Propagaci√≥n en la red.

Dominios premium o de posicionamiento (posicionan muy bien, pero no dan una imagen muy seria):

  • Dominios con la Keyword a posicionar.
  • Facilita a los buscadores entender el contenido.
  • Influencia en el mercado de enlaces.

Dominios regionales vs genéricos

Dominio gen√©rico (gTLG, geographycal Top Level Domain): Se refiere a un dominio con un enfoque m√°s internacional y por tanto, menos localizado. En su nomenclatura no presenta referencia a ning√ļn pa√≠s.

Ejemplos:

  • .com (company)
  • .org (organization) .net (Representa a empresas dentro de las tecnolog√≠as de informaci√≥n o con una ‚Äúred‚ÄĚ de cualquier aspecto (social, de fibra √≥ptica, telefon√≠a, cable, etc) )
  • .biz (Business)
  • .info (p√°ginas informativas, Information)
  • .mobi (9epresenta a cualquier p√°gina que quiera tener acceso especial para los usuarios de equipos m√≥biles).
  • .tv (representa cualquier compa√Īia de televisi√≥n o p√°ginas enfocadas a tener programas de televisi√≥n por internet).

Dominio regional (ccTLD, country code Top Level Domain): En su nomenclatura presenta una referencia a un país o región. Posicionará mejor en un buscador correspondiente a esa región.

Ejemplos:

  • .mx (M√©xico)
  • .us (EstadosUnidos)
  • .ue (Uni√≥n Europea)
  • .es (Espa√Īa)
  • .br (Brasil)
  • .ar (Argentina)
  • .cl (Chile)
  • .ca (Canada)
  • .asia (Asia en general)
  • .cat (deber√≠a tener al menos algo de contenido en catal√°n)

Servidor

  • Certificado SSL habilitado
  • Versi√≥n 7.x de PHP habilitada

SEO On Page

Google Search Snippet

  • title
  • description
  • url
 	<html>
	<head>
		<title>Título de mi página web</title>
		<meta name="description" content ="Descripcion de mi página web" />
		<meta name="keywords" content="keyword1, keyword2, keyword3" />
	</head>

	<body>
	<!--
	Puede haber varios h2 en una misma página, pero no varios h1. De h1 a h6 hay orden progresivo de relevancia en el motor de google
	-->
		<h1>Titular de la página de primer nivel</h1>
		<p>Texto y contenido de mi primer párrafo.</p>
		<h2>Titular de la página de segundo nivel</h2>
		<p>Texto y contenido de mi segundo párrafo</p>
	</body>
</html>

<title>Título de la página</title>

Consideraciones:

  • T√≠tulos diferentes para cada p√°gina
  • No m√°s de 65 caracteres (si no, lo corta)
  • Sintaxis recomendada:

    Texto descriptivo optimizado | titulo de la web.

    Podemos usar el guión medio (-) o pipe (|). No usar el guión bajo, no le gusta a google.

  • Las keywords deben estar lo m√°s a la izquierda posible. Si la keyword ocupa todos los caracteres(65), obviamos la marca.
  • En esta herramienta podremos evaluar como quedar√° el t√≠tulo de nuestra p√°gina

Ejemplos:

Correctos:

  • <title>Cursos Android | Pablo Monteserín</title>
  • <title>Curso SEO | Fórmate en posicionamiento web – Pablo Monteserín</title>

Incorrectos:

  • <title>Pablo Monteserín – Curso SEO</title>

Meta - Description

No debería pasar de los 155 caracteres. No cuenta para el rankeo, pero es lo que el usuario vé y ayuda a que haga click.

Es recomendable eliminar la meta información de las fechas de un blog, o de lo contrario google lo tiene en cuenta para no mostrar artículos antiguos. Habrá que eliminar este código:

<meta property="article:published_time" content="2013-11-07T11:01:41+00:00" />
<meta property="article:modified_time" content="2016-02-04T09:29:27+00:00" />
<meta property="og:updated_time" content="2016-02-04T09:29:27+00:00" />

URL y SEF (Search Engine Friendly)

Las url's deberían contener las keywords escogidas y ser lo más cortas posibles, nada de hacer una url hiperlarga basada en breadcrumbs (en las categorías que hay que pasar para llegar a un producto)

Encabezados: <h1>...<h6>

  1. Deberían contener las palabras clave.
  2. En HTML5 sólo debería haber una etiqueta <h1> por cada sección (antes de HTML5 era un h1 por página).
  3. Permiten identificar el contenido prioritario.
<h1>Títulos más importantes</h1>
<h2>Sub títulos</h2>
<h3>Sub títulos de tercer nivel (menos importantes)</h3>

Contenido

"El contenido manda", "el contenido es el rey". Sin contenido, no hay posicionamiento.

  • Debe ser contenido original.
  • Utilizar etiqueta <strong> para resaltar las palabras clave
  • Que las palabras clave redireccionen a enlaces internos.
  • Actualizar los contenidos periodicamente.
  • Tener un m√≠nimo de 300 palabras de contenido. Enlace a herramienta contadora de palabras.
  • La densidad de palabras claves ser√° de entre un 5 y un 8%. Aparecer√° una vez en el t√≠tulo, y dentro del contenido, como m√°ximo dos veces.
  • Poner unos gadgets en la p√°gina de inicio cuyo contenido se va actualizando peri√≥dicamente (√ļltimas noticias, publicaciones en facebook, twitter, etc.)
  • Los sliders no son muy efectivos para el seo, pero si a√ļn as√≠ los usamos, deber√≠amos renovar sus im√°genes y sus etiquetas alt, por lo menos, mensualmente.

Microformatos

¬ŅPor qu√© debemos considerar implementar microformatos?

Buscadores como Google, Bing, Yahoo usan los microformatos (Rich snippets, fragmentos enriquecidos) para indexar y ofrecer mejores resultados a los usuarios.

Los hay de varios tipos:

  • Personas
  • Productos
  • Recetas
  • Eventos
  • ...

Poniéndonos de acuerdo

Actualmente nos encontramos varias formas de estructurar datos:

  • RDFa W3C (2004)
  • Microformats CommerceNet (2005)
  • Microdata WHATWG (2009)

Schema.org es una iniciativa de Google, Yahoo y Bing para definir una sintaxis com√ļn para datos estructurados.

Algunos ejemplos de microformatos

  • Opiniones ("hreview")
  • Personas ("vcard")
  • Productos ("itemscope")
  • Empresas y organizaciones ("vcard")
  • Recetas ("hrecipe")
  • Eventos ("hcalendar")

Para saber si una web tiene microformatos y cuales son, podemos usar este enlace.

Por ejemplo, probar esta url: http://lacerca.com/

Ejemplo de uso de microformatos

Sin microformatos


<p>
<strong>Cesar Soplin</strong><br/> 
Jr. de la Unión 123<br/> 
Lima Perú<br/> 
987-654-32<br/>
</p>

Con microformatos

<div class="vcard">
   <span class="fn n">
    <span class="given-name">Cesar</span>
    <span class="additional-name">Soplin</span>
    <span class="family-name"></span>
   </span>
  <div class="adr">
    <div class="street-address">Jr. de la Unión 123</div>
    <span class="locality">Lima</span>
    <span class="country-name">Perú</span>
   </div>
   <div class="tel">987-654-32</div>
  </div>

Optimizar im√°genes

Nombre de la imagen

Podemos optimizar el nombre de la foto poniendo las keywords. No ser√° necesario espaciar las keywords con guiones.

Atributo alt

El atributo "alt" te permite especificar texto que puede aparecer en vez de la imagen, si ésta no puede mostrarse por la razón que sea. Además, google utiliza el alt para indexar la imagen en el "google images" (el buscador de imagenes de google).

No es necesario optimizar ni poner el alt en todas las imágenes. Se optimizan sólo las imágenes que guardan relación directa con la landing page. No optimizaríamos iconos, flechitas, etc.

Atributo title

No tiene una gran relevancia de cara al SEO.

Enlaces

El anchor text debería ser la keyword.

<a href="pagina.html">Aqui ponemos la keyword</a>

Actualmente la gestión de google del SEO ignora el atributo title.

Enlaces entrantes y salientes

Enlaces de calidad son aquellos a p√°ginas que utilizan keywords similares las tuyas. Para conseguir esto es posible comprar un nuevo dominio con un microsite o p√°gina sat√©lite que enlace al nuestro. Dicho microsite no puede tener contenido duplicado (google lo penaliza). Adem√°s como este dominio est√° optimizado, posicionar√° mejor de cara a cierto criterio de b√ļsqueda.
Si lo que deseamos es mejorar el posicionamiento de la página madre, el microsite debería tener un enlace a la página madre, pero no al revés.

Recomendaciones

  • En una p√°gina web no deber√≠a haber m√°s de 100 enlaces a otras p√°ginas.
  • No usar muchas im√°genes (ni en cantidad ni en peso).
  • Evitar el dise√Īo web con tablas.
  • Ce√Īirse a los estandares web de HTML: W3C validator.
  • Ce√Īirse a los estandares web de CSS: CSS validator
  • Evitar p√°ginas 404. W3C checklink.
  • Evitar abreviaturas (BCN en vez de Barcelona).

Errores 404 en páginas que sí se ven

A veces una p√°gina devuelve una cabecera de error 404 a pesar de que s√≠ se est√° viendo. Google web master tools nos indicar√° que tenemos enlaces rotos, pero cuando pulsamos el enlace, la p√°gina se ve. Esto ocurre porque la p√°gina tiene un tipo de error que devuelve esta cabecera 404. Acompa√Īando a la cabecera suele ir un documento que describe el error, este documento puede ser la propia p√°gina, y por eso aparentemente la p√°gina se ve bien.

Enlaces internos

De la documentaci√≥n oficial:El n√ļmero de enlaces internos dirigidos a una p√°gina es una se√Īal para los motores de b√ļsqueda acerca de la importancia relativa de dicha p√°gina. Si una p√°gina importante no se muestra en esta lista o si una p√°gina menos importante tiene un n√ļmero relativamente grande de enlaces internos, considera la opci√≥n de revisar tu estructura de enlaces internos.

Enlaces Externos (backlinks)

Para ver los enlaces externos a tu p√°gina utilizando una herramienta gratuita puedes usar Search Console -> Links

El atributo 'nofollow' se creó para que una página grande apunte a otra página sin cederle su page rank.

Nunca debemos usar el atributo nofollow apuntando a enlaces internos, salvo por algunas excepciones.

Para no transmitir autoridad, usaremos el atributo rel="nofollow"

Dónde poner el rel="nofollow"

Si piensas que el enlace que estás usando es de interés para el usuario y lleva a un sitio con autoridad, déjalo como dofollow.

El atributo de enlace nofollow no evita que la p√°gina se indexe.

No es recomendable usar el atributo nofollow para p√°ginas internas, ya que evita que el page rank fluya.

Matt Cutts, ex-ingeniero de Google:

  • Junio 2010: ‚ÄúPermitidme decirlo m√°s claro: Yo no usar√≠a nofollow en enlaces internos.‚ÄĚ
  • Octubre 2013: ‚ÄúPara cada enlace dentro de tu sito Web, que sea un enlace que lleva de una p√°gina interna a otra interna, me asegurar√≠a que el PageRank fluya, eso quiere decir, dejar de usar el nofollow.‚ÄĚ

Obtención de enlaces externos

  • Pidiendoselo a un contacto.
  • Outreach: Pagando u ofreciendo algo a cambio a alguien
  • Creando un podcast y publicandolo. En la p√°gina de publicaci√≥n puedo tener un enlace entrante:
  • Publicaci√≥n de recursos (c√≥digo fuente en github, plugins en jQuery.com o wordpress.com, etc)
  • Utilizando una aplicaci√≥n de pago (ahrefs, sistrix, semrush...) podremos ver los backlinks de la competencia para tratar de imitar sus estrategias de link building.
  • Skyscrapper. Consiste en mejorar un art√≠culo ya existente y notificar a la gente que enlazaba al art√≠culo anterior que has creado un art√≠culo mejor que el que est√°s enlazando. El problema es que lleva bastante esfuerzo.
  • Art√≠culo √©pico. Consiste en crear un art√≠culo √©pico y emocionante, que pueda viralizarse con cierta facilidad.

Técnicas desaconsejadas

  • Intercambio de enlaces.
  • Guest posts en (si huelen a kil√≥metros, porque tienen en un enlace al principio, porque son de un tema que no es del que nosotros tratamos, etc.)
  • Spam en foros.
  • Enlaces no tem√°ticos (desde p√°ginas que no son del mismo tema que la m√≠a).

Algunas estrategias para conseguir enlaces entrantes

  • Utilizando la mozbar podemos buscar los sites con mayor autoridad para las palabras que tratamos de posicionar. Con la herramienta moz explorer podemos ver desde d√≥nde consiguen su tr√°fico. Podemos ponernos en contacto con los sites que les dan autoridad para proponerles un art√≠culo, una colaboraci√≥n, comprar de publicidad, etc.
  • Hablando con clientes, proveedores o partners para negociar un link. No hace falta que pongan un enlace en el footer, o en una secci√≥n de partners, eso generalmente no tiene ning√ļn valor. Es mejor que hagan un guest-post, un art√≠culo con un enlace a nuestro site.
  • Buscar enlaces rotos a nuestro site, y solventarlos con una redirecci√≥n 301
  • Solicitar que algui√©n que ha enlazado con nuestro site, mejore el anchor text

Disavow

En esta url, seleccionaremos el dominio y subiremos el fichero. No podemos subir más de un fichero, sólo modificar el que hay subido. El formato de descarga es CSV y el de subida, txt, por lo que no puedo descargar el fichero que subimos originalmente, por lo que conviene guardar una copia. Si te arrepientes de subir el fichero y lo cambias, una re-autorización puede llevar mucho tiempo y es posible que no recuperen el valor que tenían antes.

Obtener la lista de disavow link
Con ahrefs
disavow links

Dise√Īo

  • La web debe ser responsive

Cache de Google

Google detecta que hay vida en la web. Para que la web tenga vida, existen varias opciones

  • Nuestra principal herramienta para generar contenido, generalmente, ser√° un blog.
  • Un foro es un excelente generador de contenido. Sin embargo, requiere mucho esfuerzo. Si no funciona, para dinamizarlo, debes crear usuarios ficticios y animar a los de verdad para dar vidilla (a no ser que ya tengas esa comunidad creada). Por otra parte, cuando funciona y va solo, debes dedicar el esfuerzo a frenarlo y asegurarte que no se va de madre.
  • Responder a mails con preguntas y cuestiones de inter√©s general como una entrada de un blog. En lugar de escribir la respuesta en el mail, indicaremos al usuario la url d√≥nde hemos escrito su respuesta.
  • Curaci√≥n de contenidos. Consiste escribir un art√≠culo a partir de otros art√≠culos. De esta forma es posible escribir aunque no seas un experto en la materia y crear un contenido de calidad y genuino.

Conocer cuando fue la √ļltima vez que el robot de google pas√≥ por mi p√°gina web y que fue lo que almacen√≥:

cache:pablomonteserin.com 

One Page sites

Contenido

Cuando tenemos varias páginas, es sencillo orientar cada página a un objetivo y enfocarla para ser encontrada a partir de ciertas keywords. Sin embargo, si recojemos en una sola página todo el contenido de nuestra web, es más difícil lograr este objetivo.

Un site dividido en varias páginas o secciones es mucho más escalable. Si tienes todo el contenido en una sola página puedes terminar generando un html de 30000 líneas de código, y esto no es muy saludable.

Links entrantes

Es m√°s f√°cil que alguien nos enlace a una p√°gina a la que tratamos un tema espec√≠fico que s√≥lo a la gen√©rica p√°gina de inicio, que es lo √ļnico que tenemos en un one page site.

Sitemap

Dos tipos:

  • En formato .html, orientado al usuario para facilitar su navegaci√≥n.
  • En formato .xml. El m√°s importante para el SEO. Puede enviarse a trav√©s de las Herramientas para webmasters de Google, facilita que Google encuentre las p√°ginas de tu sitio web.

Crear un archivo SiteMap: http://www.xml-sitemaps.com/

Subir el archivo SiteMap: http://www.google.com/webmasters/tools/

Scream Frog para el an√°lisis one page

Meta Etiquetas

Title

  • ¬ŅEl title tiene entre 50 y 60 palabras y no est√° duplicado en otras p√°ginas.
    • Web master tools -> Search Appearance -> HTML improvements
    • Screaming Frog
  • ¬ŅTiene la palabra clave?
  • ¬ŅEs atractivo?

Description

  • ¬ŅTiene menos de 155 caracteres y no est√° duplicada?
  • ¬ŅContiene la palabrra clave?

Contenido

  1. La home tiene suficiente texto
  2. Urls amigables activadas (wordpress)
  3. P√°gina de error 404 correcta
  4. Quitamos de las url's amigables las palabras vacías (pronombres, artículos, etc.)
  5. Los enlaces a url's externas deben tener el atributo target="_blank". Examinar los enlaces a las redes sociales.
    Para ello, en el screaming from iremos a "Menu configuration -> Custom -> Extraction" y usaremos el siguiente selector:
    a:not([target="_blank"]):not([href^="https://pablomonteserin.com"])

Im√°genes

  1. Nombres de im√°genes y textos alternativos con palabras clave.
  2. No deben pesar mas de 100 kb. Para comprimir las im√°genes, usaremos https://tinyjpg.com/
  3. Para poder ver en la biblioteca de medios de Wordpress si una imagen tiene texto alternativo sin tener que meternos dentro, podemos usar este código en el functions.php:
    function wpse_media_extra_column( $cols ) {
        $cols["alt"] = "ALT";
        return $cols;
    }
    function wpse_media_extra_column_value( $column_name, $id ) {
        if( $column_name == 'alt' )
            echo get_post_meta( $id, '_wp_attachment_image_alt', true);
    }
    add_filter( 'manage_media_columns', 'wpse_media_extra_column' );
    add_action( 'manage_media_custom_column', 'wpse_media_extra_column_value', 10, 2 );

Links

  • No hay errores 404
    • Screaming Frog -> Response Codes
  • Los anchor texts de los enlaces son descriptivos
    • Screaming Frog -> Bulk Export -> All Anchor Text
  • Obtener los backlinks que llevan a p√°ginas de error:
    • En Semrush: Busco el dominio -> Backlinks -> busco errores 404.
  • Comprobaci√≥n de que todas las url's apunten al mismo protocolo. Screaming Frog -> Columna derecha -> Protocol -> Selecciono el protocolo incorrecto -> En el cuadro de filtro escribo la url de la web con el protocolo incorrecto para ver si hay alguna ocurrencia.

Velocidad

  • Gestionar la cach√© por c√≥digo y no por plugin. El siguiente c√≥digo activa la compresi√≥n gzip en caso de que el servidor tenga este m√≥dulo instalado.
    # BEGIN WP Rocket v3.2.2
    # Use UTF-8 encoding for anything served text/plain or text/html
    AddDefaultCharset UTF-8
    # Force UTF-8 for a number of file formats
    <IfModule mod_mime.c>
    AddCharset UTF-8 .atom .css .js .json .rss .vtt .xml
    </IfModule>
    
    # FileETag None is not enough for every server.
    <IfModule mod_headers.c>
    Header unset ETag
    </IfModule>
    
    # Since we’re sending far-future expires, we don’t need ETags for static content.
    # developer.yahoo.com/performance/rules.html#etags
    FileETag None
    
    # Send CORS headers if browsers request them; enabled by default for images.
    <IfModule mod_setenvif.c>
    <IfModule mod_headers.c>
    # mod_headers, y u no match by Content-Type?!
    <FilesMatch "\.(cur|gif|png|jpe?g|svgz?|ico|webp)$">
    SetEnvIf Origin ":" IS_CORS
    Header set Access-Control-Allow-Origin "*" env=IS_CORS
    </FilesMatch>
    </IfModule>
    </IfModule>
    
    # Allow access to web fonts from all domains.
    <FilesMatch "\.(eot|otf|tt[cf]|woff2?)$">
    <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    </IfModule>
    </FilesMatch>
    
    <IfModule mod_alias.c>
    <FilesMatch "\.(html|htm|rtf|rtx|txt|xsd|xsl|xml)$">
    <IfModule mod_headers.c>
    Header set X-Powered-By "WP Rocket/3.2.2"
    Header unset Pragma
    Header append Cache-Control "public"
    Header unset Last-Modified
    </IfModule>
    </FilesMatch>
    
    <FilesMatch "\.(css|htc|js|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$">
    <IfModule mod_headers.c>
    Header unset Pragma
    Header append Cache-Control "public"
    </IfModule>
    </FilesMatch>
    </IfModule>
    
    # Expires headers (for better cache control)
    <IfModule mod_expires.c>
    	ExpiresActive on
    	# Perhaps better to whitelist expires rules? Perhaps.
    	ExpiresDefault                              "access plus 1 month"
    	# cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
    	ExpiresByType text/cache-manifest           "access plus 0 seconds"
    	# Your document html
    	ExpiresByType text/html                     "access plus 0 seconds"
    	# Data
    	ExpiresByType text/xml                      "access plus 0 seconds"
    	ExpiresByType application/xml               "access plus 0 seconds"
    	ExpiresByType application/json              "access plus 0 seconds"
    	# Feed
    	ExpiresByType application/rss+xml           "access plus 1 hour"
    	ExpiresByType application/atom+xml          "access plus 1 hour"
    	# Favicon (cannot be renamed)
    	ExpiresByType image/x-icon                  "access plus 1 week"
    	# Media: images, video, audio
    	ExpiresByType image/gif                     "access plus 4 months"
    	ExpiresByType image/png                     "access plus 4 months"
    	ExpiresByType image/jpeg                    "access plus 4 months"
    	ExpiresByType image/webp                    "access plus 4 months"
    	ExpiresByType video/ogg                     "access plus 1 month"
    	ExpiresByType audio/ogg                     "access plus 1 month"
    	ExpiresByType video/mp4                     "access plus 1 month"
    	ExpiresByType video/webm                    "access plus 1 month"
    	# HTC files  (css3pie)
    	ExpiresByType text/x-component              "access plus 1 month"
    	# Webfonts
    	ExpiresByType application/x-font-ttf        "access plus 1 month"
    	ExpiresByType font/opentype                 "access plus 1 month"
    	ExpiresByType application/x-font-woff       "access plus 1 month"
    	ExpiresByType application/x-font-woff2      "access plus 1 month"
    	ExpiresByType image/svg+xml                 "access plus 1 month"
    	ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
    	# CSS and JavaScript
    	ExpiresByType text/css                      "access plus 1 year"
    	ExpiresByType application/javascript        "access plus 1 year"
    </IfModule>
    # Gzip compression
    <IfModule mod_deflate.c>
    # Active compression
    SetOutputFilter DEFLATE
    # Force deflate for mangled headers
    <IfModule mod_setenvif.c>
    <IfModule mod_headers.c>
    SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
    RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
    # Don’t compress images and other uncompressible content
    SetEnvIfNoCase Request_URI \
    \.(?:gif|jpe?g|png|rar|zip|exe|flv|mov|wma|mp3|avi|swf|mp?g|mp4|webm|webp|pdf)$ no-gzip dont-vary
    </IfModule>
    </IfModule>
    
    # Compress all output labeled with one of the following MIME-types
    <IfModule mod_filter.c>
    AddOutputFilterByType DEFLATE application/atom+xml \
    		                          application/javascript \
    		                          application/json \
    		                          application/rss+xml \
    		                          application/vnd.ms-fontobject \
    		                          application/x-font-ttf \
    		                          application/xhtml+xml \
    		                          application/xml \
    		                          font/opentype \
    		                          image/svg+xml \
    		                          image/x-icon \
    		                          text/css \
    		                          text/html \
    		                          text/plain \
    		                          text/x-component \
    		                          text/xml
    </IfModule>
    <IfModule mod_headers.c>
    Header append Vary: Accept-Encoding
    </IfModule>
    </IfModule>
    
    <IfModule mod_mime.c>
    AddType text/html .html_gzip
    AddEncoding gzip .html_gzip
    </IfModule>
    <IfModule mod_setenvif.c>
    SetEnvIfNoCase Request_URI \.html_gzip$ no-gzip
    </IfModule>
    
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} on [OR]
    RewriteCond %{SERVER_PORT} ^443$ [OR]
    RewriteCond %{HTTP:X-Forwarded-Proto} https
    RewriteRule .* - [E=WPR_SSL:-https]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteRule .* - [E=WPR_ENC:_gzip]
    RewriteCond %{REQUEST_METHOD} GET
    RewriteCond %{QUERY_STRING} =""
    RewriteCond %{HTTP:Cookie} !(wordpress_logged_in_|wp-postpass_|wptouch_switch_toggle|comment_author_|comment_author_email_) [NC]
    RewriteCond %{REQUEST_URI} !^(/(.+/)?feed/?|/finalizar-compra/(.*)|/(index\.php/)?wp\-json(/.*|$))$ [NC]
    RewriteCond %{HTTP_USER_AGENT} !^(facebookexternalhit).* [NC]
    RewriteCond "%{DOCUMENT_ROOT}/usr/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}.html%{ENV:WPR_ENC}" -f
    RewriteRule .* "/usr/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}.html%{ENV:WPR_ENC}" [L]
    </IfModule>
    # END WP Rocket

robots.txt

Indica a que p√°ginas tendr√°n acceso los motores de b√ļsqueda y a a cuales no. Es mejor no tocarlo y si queremos que una p√°gina no sea indexada, hacerlo mediante los meta robots. As√≠ evitaremos que una p√°gina que hemos bloqueado en el robots.txt sea indexada porque se nos olvid√≥ poner la meta robot. Si esto ocurriese, estar√≠amos indexando una p√°gina con contenido vac√≠o.

Debe estar en la raíz del sitio.

Ejemplo:
User-agent: *
Disallow: /backend/
Disallow: /tmp/
Sitemap: http://www.pablomonteserin.com/sitemap.xml

Los robots de cualquier motor de b√ļsqueda (se√Īalados con el car√°cter comod√≠n *) que siguen las normas no indexar√°n el contenido bajo los directorio /backend/ ni cualquier URL que empiece por /tmp

Validador de nuestro robots.txt:
http://tool.motoricerca.info/robots-checker.phtml

Ejemplo largo de robots.txt

Estos son los los nombres de los crawlers m√°s importantes:

  • Ask: Teoma
  • Bing: MSNbot
  • Google: Googlebot
  • Yahoo!: Slurp

Si deseamos bloquear ciertas p√°ginas en algunos crawlers es necesario primero colocar las instrucciones para los crawlers y al √ļltimo las instrucciones para todos los crawlers, como se muestra en el siguiente ejemplo:


User-agent: teoma
Disallow: /ask/
User-agent: msnbot
Disallow: /bing-no-es-novedoso/
Disallow: /bing-no-es-novedoso/aun-sin-gustarme.html
User-agent: googlebot
Disallow: /lo-feo-de-google/
User-agent: slurp
Disallow: /yahoo-no-me-gusta/
User-agent: *
Disallow: /privado/

Si colocamos al inicio las instrucciones para todos los crawlers, las demás instrucciones no serán leídas.

Debemos comprobar que existe un robots.txt que referencia al sitemap.xml (http://dominio.com/robots.txt)

robots.txtUser-agent: *
Disallow: /sites/ 
Disallow: /wp-login.php
Disallow: /apuntes/*.html$
Disallow: /*?filename=*&otroparametro=*
crawl-delay: 10
Sitemap: https://pablomonteserin.com/sitemap.xml

Indexar / follow

  • Indexar una url es lograr que aparezca en los resultados de b√ļsqueda de google. Algunas p√°ginas que queremos que google no indexe:
    • Textos legales.
    • Url's que genera wordpress (para fechas, autores, im√°genes, etc).
    • Entradas del blog que se podr√≠an canibalizar.
    • Fichas de producto sin b√ļsquedas o que se podr√≠an canibalizar.
  • Follow de una url, significa que google siga los enlaces de esa url. No usaremos el atributo nofollow en ninguna p√°gina, ya que queremos que el motor de b√ļsqueda siga todos los enlaces de la web.
Esta meta le dice a cualquier robot que quieres
que indexe tu p√°gina
y que siga sus links:<meta name="robots" content="index, follow">
Esta meta es una abreviatura de la anterior:
<meta name="robots" content="all">
Esta hace lo contrario:<meta name="robots" contents="noindex, nofollow">

Ojo! debemos asegurarnos de que el contenido no indexado no esté incluído en el sitemap.xml. Sería una contradicción.

Contenido duplicado

Google no penaliza el contenido duplicado. Simplemente no indexa las p√°ginas que lo tienen.

No obstante si Google detecta que un sitio web tiene mucho contenido duplicado, si que la va a penalizar o incluso puede dejar de indexarla.

Causas de contenido duplicado

  • Tener contenido duplicado.
  • Si tomas un art√≠culo de otra p√°gina y lo traduces tal cual con el google translate, google te penaliza. Si lo traduces manualmente, y google lo detecta, tambi√©n lo tendr√° en cuenta.
  • Si puedes acceder a tu dominio de estas dos formas: pablomonteserin.com y www.pablomonteserin.com, tienes contenido duplicado.
  • Si puedes acceder a tu dominio de estas dos formas http://pablomonteserin.com y https://pablomonteserin.com, tienes contenido duplicado.
  • En general, si tienes dos url's diferentes que muestran al mismo contenido. Tienes contenido duplicado. Algunas p√°ginas manejan el id de sesi√≥n en la url, con lo cual, est√°n generando contenido duplicado.
  • Podemos indicar que una √ļnica url puede contener informaci√≥n en varios idiomas

    <link rel="alternate" hreflang="x-default" href="urlquetendracontenidoenvariosidiomas.com">
  • En el caso de que el contenido duplicado sea una traducci√≥n, podemos indicarle al buscador que la p√°gina actual tiene una versi√≥n traducida en otra url con esta etiqueta:

    <link rel="alternate" hreflang="en" href="urldelapagina.com/en">
  • Si tienes en tu propio site dos p√°ginas que dicen m√°s o menos lo mismo.
    Pondremos esta etiqueta en la cabecera, apuntando a la página dónde está el contenido original. Puede ser interesante cuando tengamos varias fichas de producto similares.
    <link rel="canonical" href="https://webdelaempresa.com/articulo" />
    
  • Los filtros. No debes permitir que Google te indexe las p√°ginas con productos repetidos por haber sido filtrados (por talla, color, etc.). A menos que el usuario te busque en Google utilizando las palabras clave de alg√ļn filtro en la url.
  • Los textos legales (aviso legal, pol√≠tica de privacidad...)
  • Las paginaciones
    Para evitar contenido duplicado en las paginaciones, usaremos:

    Suponinendo que estamos en la p√°gina 2<link rel="next" href="URL DE LA PÁGINA 3" />
    <link rel="prev" href="URL DE LA PÁGINA 1" />

Puedes utilizar esta herramienta para buscar las p√°ginas que tienen el mismo contenido que la url introducida.

Certificado de seguridad

Google penaliza tu posicionamiento si no lo tienes. Esto har√° que tu url sea https, en lugar de http. El m√°s econ√≥mico (y perfecto para nuestros prop√≥sitos) cuesta 80 euros al a√Īo.

Google Search Console

Comprobaciones que hay que hacer

  • En la secci√≥n coverage (cobertura) no hay errores. Un error muy t√≠pico es tener deshabilitada una p√°gina en el sitemap.xml pero no tener puesto el no index.
  • Tenemos un sitemap.xml (http://dominio.com/sitemap.xml) y es referenciado en la Google Search Console.
  • Redirecci√≥n m√ļltiple (cuando una redirecci√≥n nos lleva a una p√°gina que a su vez es una redirecci√≥n): Men√ļ reports -> Redirect Chains
  • Las url's no se canibalizan. Search console -> Performance -> Filtramos por la query que pensamos que se puede estar canibalizando -> En la pesta√Īa page podemos ver si hay varias url's compitiendo por la misma query.
  • Buscar url's que est√°n en la segunda p√°gina de Google para tratar de mejorarlas y meterlas en la primera: Performance -> Click en Average Position para ver la position en el listado -> buscamos las url's que est√°n entre la 11 y la 20. Para potenciarlas:
    • pasarle un seo quake a esa url para ver que se puede mejorar
    • Escribir un post en el blog y enlazarlo con esa url para potenciarla.
    • A√Īadir una imagen con texto alternativo
    • Optimizacion en general

Evaluar la prograsión de una web

evaluar la evolución de una web con google search console
icono de mandar un mailSOPORTE Usuarios Premium
Pablo Monteserín
contacta conmigoPablo
Monteserín

Para dudas técnicas sobre los ejercicios de mis cursos es necesario tener una cuenta premium activa. Para cualquier otra cosa, puedes usar el formulario de la página de contacto.