viernes, 2 de agosto de 2013

Evitar contenido duplicado en Blogger: tipos de página y uso de condicionales

En este artículo voy a compartir algunos tips o trucos que he aprendido a lo largo de los años, destinados a conseguir una indexación óptima por parte de los buscadores -como por ejemplo Google- de los diversos tipos de páginas que componen un blog de Blogger. Dado que existen muchas estructuras posibles de indexación, analizaré y explicaré detalladamente el procedimiento, para que cada cual siga su propio "camino".


Bien, lo primero que hay que hacer es exponer el problema que tienen todos los blogs en general (incluyendo los de Blogger): el contenido duplicado. Cuando escribimos un artículo, éste no aparece sólo en su propia página web, sino que también aparecerá en muchas otras páginas del blog, que se generan automáticamente. Concretamente, y como mínimo, aparecerá en todas las páginas de etiquetas en las que se haya categorizado al artículo, así como en las diversas páginas de archivo, que pueden ser varias: por semana, por mes, etc... (incluso existen archivos por días o por búsquedas de términos, que también se generan automáticamente). Por no hablar de la página inicial del blog, que también contiene los últimos artículos publicados.


El resultado de esto, que es inherente a todo blog y tiene por función facilitar la navegación por el mismo de cara a encontrar lo que se busca, es que el mismo artículo (el mismo contenido) aparece al mismo tiempo en muchas páginas del blog (se accede a él desde muchas URL diferentes, en definitiva). La mayor parte de las veces estará acompañado de otros artículos, pero estará duplicado e incluso triplicado y cuadruplicado, a fin de cuentas.


Esto es algo que puede ser bueno para navegar internamente por el blog, pero que es muy malo para los buscadores (como Google, el más paradigmático de todos). Si se piensa es bastante lógico. ¿Cómo puede saber un buscador cuál es la URL original del artículo, de cara a indexar dicha versión y descartar las demás? Sin entrar en más consideraciones, baste decir que Google penaliza fuertemente el contenido duplicado -por considerarlo irrelevante para el usuario y "ruido" en las búsquedas-, de forma que es muy habitual que se penalicen los blogs que no depuran bien su estructura de indexación. Y los blogs no están preparados en esto cuando se crean nuevos.


Puede resultar paradójico, pues Blogger pertenece a Google, pero en efecto ocurre así. Si no especificas qué páginas han de ser indexadas por el buscador y cuáles no, pues son copias, los buscadores pueden incluso excluirte de sus índices. Esto es más habitual de lo que pueda pensarse (de hecho es un error clásico de los principiantes en el blogging). En realidad existe una razón lógica para que los blogs no estén "preparados" contra la duplicidad de contenido desde su misma creación, y no es otra que la increíble diversidad de objetivos y fines que puede tener un blog (uso privado, etc...). A muchos de estos usos no les interesan los buscadores, o incluso buscan precisamente no estar indexados en su totalidad.


Partiendo de la base de que nuestro objetivo sea el contrario, esto es, conseguir la máxima difusión, habrá que tener mucho cuidado con el contenido duplicado, y pensar qué tipo de páginas queremos que Google nos indexe o, por el contrario, elimine del buscador. Nuestro objetivo ha de ser siempre el mismo: un contenido, una única URL para el buscador. De esta forma nos aseguraremos el evitar penalizaciones, y al mismo tiempo podremos conocer exactamente a través de qué tipo de páginas están llegando nuestros visitantes a nosotros (pues son las únicas indexadas). Esto es otra ventaja añadida. Para conseguirlo, lo que hay que hacer es decir al buscador qué páginas ha de indexar y qué páginas no. Un contenido, una única URL.


Las cuatro clases o tipos de página en Blogger.


Antes de nada, lógicamente hemos de tener muy claro los cuatro tipos de página que tiene un blog de Blogger. Así podremos pensar en cuáles indexamos y cuáles no. Los tipos de página son los siguientes:

  1. Página principal y siguientes en antigüedad (son a las que accedemos cuando clicamos en "Entradas anteriores"), y también todas las páginas de etiquetas: Grupo denominado INDEX.
  2. Todas las páginas de archivos por fechas y búsquedas: Grupo denominado ARCHIVE.
  3. Páginas propias de cada artículo o entrada: Grupo denominado ITEM.
  4. Nuevas páginas "estáticas" de Blogger: Grupo denominado STATIC_PAGE.

Así pues, parece claro que -en principio- deberemos asegurarnos de que las páginas de tipo "item" (las de los artículos) estén indexadas. Para esto no hay que hacer nada, pues por defecto todo se indexará (no hay orden de lo contrario). Mi consejo es que saquéis directamente de los buscadores todas las páginas de tipo "archive" (los archivos). Estas páginas no añaden más que ruido a los buscadores, y nuestros visitantes podrán de todas formas navegar por el archivo de artículos sin problemas desde dentro del propio blog.


Excluir de los buscadores las páginas de archivos de un blog de Blogger, para evitar el contenido duplicado.


Afortunadamente hacer esto es sencillo. La propia interfaz de Blogger cuenta con opciones para personalizar la indexación según el tipo de página.


Estas opciones se encuentran en el menú principal, dentro de la pestaña "Configuración". Una vez en ella, accederemos a "Preferencias para motores de búsqueda".


Mucho cuidado aquí, pues todas las páginas del tipo al que apliquemos "noindex" no aparecerán en las búsquedas. Sólo se ha de marcar en "Archivos y páginas de búsqueda".


Aspecto del menú de preferencias para motores de búsqueda de Blogger.


Además de aplicar "noindex", también tendremos muchas otras opciones, como decir al buscador que no siga los enlaces de esas páginas, que no las almacene en su caché, etc... (para más información sobre las órdenes que pueden darse al buscador puede consultarse, por ejemplo, este artículo informativo del propio Google). Nosotros de momento marcamos sólo "noindex", sin meternos en más honduras.


Con esto habremos conseguido que las muchas páginas que se generan con las búsquedas de los usuarios, con los diversos archivos, etc... no cuenten para el buscador, eliminando por tanto mucho "ruido" y favoreciendo la correcta indexación de los contenidos de nuestra web por los buscadores.


Ahora bien, todavía nos quedará por establecer nuestra política de indexación para las páginas tipo "Index", es decir, la portada, páginas siguientes y páginas de etiquetas. Esto ya es mucho más complicado, pues tendremos que usar condicionales en el código, es decir, editar nuestra plantilla HTML. No podemos sacar todas las páginas tipo "Index" del buscador sin más (podría hacerse desde el mismo menú anterior), ¡pues estaríamos eliminando también nuestra portada!


El problema de la indexación de las páginas tipo Index: cómo eliminar sólo algunas de ellas y no todas.


Como decimos, el problema surge con las páginas tipo "index". Mi recomendación es sacar de los buscadores todas las páginas de etiquetas (son aquellas a las que accedemos cuando clicamos en una categoría del blog, mostrándonos todas las entradas a las que hemos puesto dicha etiqueta). Las páginas de etiquetas son una fuente de contenido duplicado tan potente como las de archivos. Pero claro, si eliminamos de los buscadores todas las páginas tipo "index", sacamos también la portada del blog, ¡cosa que seguro que no queremos hacer! Para terminar de embrollar el asunto, las páginas de navegación (las anteriores o más antiguas que siguen tras nuestra portada) también recomiendo excluirlas, pues también están duplicadas. Estas últimas pertenecen igualmente al tipo "index".


Afortunadamente, se pueden excluir de los buscadores todas las páginas "index" menos la portada. Para ello, es necesario saber cómo crear condicionales en el código de un blog de Blogger. No es demasiado complicado una vez se conoce la mecánica. Lo explico a continuación.


Añadir condicionales en el código de Blogger para no indexar páginas de etiquetas, categorías y "anteriores".


Son relativamente sencillos de usar: tenemos la condición IF ("si" o "en caso de que"), a la que habrá que añadir == o !=, que equivaldrán a "es igual a" o "no es igual a".


Parece un poco lioso, se verá mejor con un ejemplo:


<b:if cond='data:blog.pageType == &quot;archive&quot;'>
<meta content='noindex' name='robots'/>
</b:if>


¿Qué le estoy diciendo aquí a Blogger? Pues que si el tipo de página es "archive", entonces los robots (buscadores) deben aplicar "noindex", es decir, no deben indexar esa página.


Este código debería añadirse al principio, dentro de <HEAD>, lógicamente.


*Importante: realizar cualquier cambio en el código con mucho cuidado, siempre sabiendo lo que se está haciendo. Nunca olvidar hacer primero una copia de la plantilla por si acaso. Un error podría suponer sacar una página importante del buscador.


Para no indexar las páginas de etiquetas y "entradas anteriores", respetando la portada, la cosa se complica, pues todas pertenecen al tipo "index". Deberemos añadir otra condición más: si la página tipo "index" es la portada, entonces sí indexar, en caso contrario no. Para añadir este tipo de condicionales se usa ELSE ("de otro modo", "en otro caso"). Veamos el código:


<b:if cond='data:blog.pageType == &quot;index&quot;'>

<!-- si nos encontramos en una página tipo index -->


    <b:if cond='data:blog.homepageUrl != data:blog.url'>
      <!-- y no en la página principal -->


      <meta content='noindex' name='robots'/>

      <!-- entonces no indexar -->


           <b:else/>
    <!-- en caso contrario -->


      <meta content='index' name='robots'/>

      <!-- entonces indexar -->
    </b:if>

</b:if>


Como puede verse, por cada IF que declaremos habrá después que cerrarlo. Es importante destacar también que data:blog.homepageUrl se refiere a la página principal o portada del blog, mientras que data:blog.url alude a la página en la que se esté en ese momento, sea cual sea ésta. Así pues la línea <b:if cond='data:blog.homepageUrl != data:blog.url'> quiere decir "si la página en la que estamos no es la página principal del blog...". Es decir, con el código anterior hemos indicado a Blogger: "si estamos en una página tipo index, pero no en la principal, entonces no indexar, en caso contrario sí".


Así pues, para excluir todas las páginas de etiquetas, las de entradas antiguas, archivos y búsquedas (es decir, todas las que tienen contenido duplicado), habrá que ponerlo todo junto (copiar el siguiente fragmento de código y pegarlo directamente dentro de la etiqueta <head>):


<b:if cond='data:blog.pageType == &quot;index&quot;'>

    <b:if cond='data:blog.homepageUrl != data:blog.url'>
      <meta content='noindex' name='robots'/>

    <b:else/>

      <meta content='index' name='robots'/>
    </b:if>

</b:if>

<b:if cond='data:blog.pageType == &quot;archive&quot;'>
<meta content='noindex' name='robots'/>
</b:if>


Otras posibilidades y trucos de indexación.


Como antes comenté ésta no es la única opción posible para estructurar correctamente la indexación de un blog. Esto es así pues la clave, la meta final que debe guiarnos, es evitar el contenido duplicado (recordemos, un contenido, una única URL). De esta forma, si en nuestras páginas de etiquetas y archivos no aparece el mismo contenido que en la página propia de cada artículo, entonces habremos evitado el contenido duplicado.


¿Cómo conseguir esto? Es relativamente sencillo. Las mejores opciones pasan por que en las páginas de archivos y etiquetas aparezca sólo el primer párrafo del texto -como es el caso del presente blog-, o incluso sólo el título de la entrada, a modo de listado. El contenido íntegro estará disponible en la página del artículo en sí (y sólo allí). Incluso mejor todavía sería que en los archivos, portada, entradas antiguas, búsquedas y etiquetas apareciese un pequeño texto introductorio único, a modo de entradilla o lead periodístico. Todo esto es posible hacerlo, y será objeto de análisis en un futuro artículo (para no extenderme demasiado aquí).


Tip 1: Mostrar sólo el primer párrafo del texto en las páginas que no sean la del propio artículo hará que evitemos el contenido duplicado.


Otro consejo que conviene tener en cuenta se refiere a la estructura de etiquetas de nuestro blog. Hay que pensarla muy bien, y reducirla al mínimo indispensable. Lo ideal y óptimo es que cada artículo tenga sólo una etiqueta, o al menos las mínimas posibles. De esta forma conseguiremos que en las páginas de etiquetas no se repitan los artículos, evitando una vez más duplicar contenido. Las etiquetas han de usarse como categorías específicas, a modo de menú de navegación, si es posible.


Tip 2: Planificar bien la estructura de etiquetas es una labor importante: cuanto menos se repitan los artículos en las páginas de categorías más claro estará todo para Google y resto de buscadores.


Si seguimos bien estos dos consejos podríamos incluso indexar todas las páginas generadas automáticamente por el blog sin ningún tipo de problema. De hecho podría ser algo realmente beneficioso, si nos tomamos la molestia de crear entradillas únicas para las páginas de archivos, etiquetas, etc... Los buscadores nos agregarían estas páginas sin conflicto alguno, incluso creando para los usuarios del buscador sub-enlaces relacionados con el principal, convirtiendo así lo que empezó como un simple blog en un auténtico portal.


Establecer opciones personalizadas para los buscadores en una única entrada en particular.


Como ya hemos visto, esto podría hacerse mediante condicionales, pero seguramente lo más fácil sea hacerlo directamente desde la consola de redacción de entradas del propio Blogger:


Preferencias para motores de búsqueda al crear una entrada en Blogger.


Como puede verse, directamente podremos establecer una Descripción de búsqueda (equivalente a las meta-etiquetas description y keywords), así como incluso etiquetas relativas a la indexación (en el poco frecuente caso de que queramos escribir una entrada para que no aparezca en los buscadores).


Si preferimos la opción "manual" en el código, se haría como siempre con condicionales, dentro de la etiqueta <head> del código de nuestro blog:


<b:if cond='data:blog.url == &quot;AQUÍ LA URL DEL POST&quot;'> <meta content='AQUÍ LA DESCRIPCIÓN' name='description'/> <meta content='AQUÍ LAS PALABRAS CLAVE' name='keywords'/><meta content='AQUÍ LA ORDEN DE INDEXACIÓN' name='robots'/></b:if>


Referencias de interés.


Por último, os dejo algunas referencias realmente buenas sobre el tema que hemos tratado en este artículo, para aquellas personas que quieran ampliar información:

Artículos relacionados:

9 comentarios:

Cristian Aranda dijo...

Muy buena entrada y muy bien explicada. Tenia tiempo de no usar Blogger pero veo que hay muchas mejoras.
Estos consejos son muy útiles u los e implementado en mi blog para no tener contenido duplicado, espero que de buenos resultados.

Santi Folch dijo...

Hola Cristian, sin duda te dará buen resultado, ya lo verás. Yo tengo implementado esto en todos los blogs en los que participo y va muy bien. Son medidas muy buenas para el SEO (o al menos para evitar penalizaciones).

De hecho este mismo blog pasó por una penalización debido al contenido duplicado, llegó incluso a salir de los buscadores. Pero implementé esto y volvió a entrar normalmente.

Medicina dijo...

Hola, muchas gracias, hace unos dias aplique los cambios en mi blog y me han sido muy útiles , pero noto que el contenido de algunos widget como el de las entradas más vista , se indexan en los resultados de busquedas de una entrada sin que este relacionada , me explico. Si busco pastillas para domor por noche, aparece la entrada relacioanda , pero en el texto de abajo despues del titulo , sale alguna palabra relacionada que este en este widget , eso me esta generando más entradas pero no se si sera bueno

Santi Folch dijo...

Es una buena consulta la tuya. También me he fijado en eso, los widgets aparecen en todas las páginas del blog y en efecto pueden añadir mucho contenido duplicado y ruido en las búsquedas, tal y como has notado.

Sin duda la mejor opción para esto es no usar widgets, o los menos posibles. Lo ideal de cara a los buscadores para poner cosas como "lo más visto", etc... en una página única (hacer un artículo y meter ahí esta información manualmente). De esa forma dicha información estará en una única URL.

En el caso de las entradas relacionadas, para las que por cierto Blogger no tiene widget, hemos de incluirlo por nuestra cuenta, no veo una solución inmediata. Si lo queremos incluir, cosa muy positiva de cara a la navegación por el blog y el aumento del tráfico, habremos de aceptar el ruido que incorpora.

Eso sí, si en las entradas relacionadas ponemos sólo el título de la entrada y una foto, por ejemplo, estaremos reduciendo al mínimo dicho ruido. Por una lista de enlaces solo con el título de las entradas relacionadas, no creo que suponga un gran problema para los buscadores.

alexis n dijo...

gracias, muy bien explicado y muy útil la información. Me ha sido de gran utilidad en el proceso del SEO de mi primer blog.

Anam cara dijo...

Gracias es lo que buscaba, muy bien explicado cómo hacer que sólo indexe la portada. Me surge la duda de si pudiera no funcionar si configuramos las preferencias para motores excluyendo las páginas de archivo, dejando vacío el campo index (aplicándose por defecto entonces el "all") y pegamos el código en la plantilla para indexar sólo la home. ¿Qué es lo que entiende el robot que tiene que hacer, lo que peguemos en el head o lo que marquemos en el panel de control?, ¿excluye uno por orden de lectura o combina ambos con el resultado de excluir todas las archive y todas las index menos la home?.

Santi Folch dijo...

Hola Anam, es una buena pregunta. Si marcas una opción de indexación en el panel de control, y luego contradices dicha orden en el código (con un condicional que añadas tú manualmente), prevalecerá la segunda orden. Es decir, la que hayas puesto manualmente.

De todas formas no está claro, y pueden surgir todo tipo de problemas inesperados. Puede comprobarse que es así por ejemplo añadiendo una descripción mediante el panel de control, y luego otra mediante una etiqueta meta description en el HEAD de tu blog. Verás luego en la página que ha aplicado la segunda. No obstante como digo esto no es así siempre, y la verdad desconozco exactamente el mecanismo, que parece bastante caótico.

Así pues lo mejor es no contradecir nunca las órdenes.

En relación al ejemplo que tú pones, no habría problema, pues se trata de diferentes tipos de página. Puedes establecer en el panel de control que no indexe las páginas tipo ARCHIVE, y luego en el código añadir un condicional para que indexe sólo la portada, excluyendo al resto.

Anam cara dijo...

Gracias por la respuesta, he optado por indicarlo todo en el head, no indexar archive y todas las index menos la portada. Antes indicaba una parte en el gestor, no indexar archive, y otra en el head, lo relativo a las index, ha pasado tiempo tiempo y no estoy segura de que funcionara bien dado que las páginas de etiquetas seguían por ahí y como no sé si pudiera deberse a que marease al robot dando instrucciones desde puntos distintos por precaución lo pongo ahora todo desde el mismo.

Tengo una duda respecto a las index, si en lugar de indexar sólo la página principal quisiéramos indexar también las que aparecen pulsando en la tecla "siguiente" dado que tienen la misma estructura que la home, ¿cómo se haría?.

Santi Folch dijo...

Hola de nuevo Anam :) A ver, en primer lugar decirte que indexar solo la portada y las páginas de artículos es lo mejor que puedes hacer. El resto mejor que sea No Index. Así pues lo estás haciendo perfecto.

Si te siguen apareciendo en buscadores páginas tipo Index que no son la portada, te recomiendo que las borres manualmente una por una, a través de las herramientas para websmaster de Google. Hay una opción para indicar al buscador que elimine dichas URL.

En cuanto a la duda final, no te recomiendo indexar las páginas "siguientes", pues suelen tener mucho contenido duplicado. Solo podría hacerse si has creado una estructura de etiquetas muy bien hecha, de forma que las páginas que reunen los post por categorías sean todas bastante diferentes entre sí, y por supuesto también respecto a las páginas "siguientes".

Sea como sea es difícil hacer eso que planteas. Creo que no es posible discriminar dentro de las páginas tipo Index, con la excepción de la portada. Tendrías que hacerlo manualmente una por una, URL por URL que quisieras indexar, con condicional doble establenciendo que si estás en página tipo index, y a su vez se trata de dicha URL, que indexe, si no, no. Semejante aglomeración de condicionales seguramente no funcionará. Yo he intentado sin éxito cosas parecidas (puedes comprobar después en el código HTML de la página que orden index o noindex lleva, consultando arriba en el head lo que finalmente se ha escrito, y por tanto leerán los buscadores).

Suerte y un saludo!!