Este post es el primero de muchos que crearé en torno al lenguaje estadístico R y su uso en Marketing Digital. En este caso concreto, se centra en detallar cómo detectar el contenido duplicado de uno o varios sitios webs de manera gratuita, rápida y sencilla. Esto es especialmente útil para realizar análisis SEO «sin limitación» de rastreo o número de páginas a evaluar.
Aunque no es necesario conocimientos avanzados ya que el código compartido más abajo es de por sí 100% funcional para cualquiera que necesite utilizarlo, lógicamente, se requiere una configuración mínima para ejecutar R. Para quienes no tengan noticiones previas, lo primero que deberán hacer es descargar e instalar el software RSTUDIO.
Empecemos primero con algo de teoría …
Qué es el contenido duplicado en SEO
Este término se refiere a cualquier texto situado en diferentes páginas que es similar entre sí. Se podría decir que son «iguales». Esto puede darse entre páginas de un mismo sitio web o entre diferentes.
En el primer caso es el/la administrador/a del sitio web quien deberá encargarse de resolverlo. Para ello se pueden llevar a cabo distintas acciones, tales como:
- Canonicalización. Indicar a través del atributo rel=’canonical’ qué página concreta (url específica) es la que debería indexarse en caso de duda por parte de los crawlers.
- Pruning. Eliminación de páginas duplicadas o sin relevancia con otras similares o simplemente se han quedado obsoletas.
- Internal linking. En el caso de que deban existir páginas similares, para evitar posibles canibalizaciones inesperadas, se debería redirigir la relevancia de cada una de estas hacia una página objetivo. En páginas donde la fecha no es un factor (e.g. noticia), se pueden plantear estrategias en torno a contenido evergreen.
En el segundo de los casos, cuando el contenido duplicado se da entre diferentes sitios web y por lo tanto no podemos controlarlo, tenemos esencialmente dos opciones:
- Relevancia. Si nuestra página no contiene el texto original, tendremos que conseguir que al menos contenga la información más útil. La que más valor pueda aportar al usuario y su búsqueda. Puedes ver a continuación algunos elementos a tener en cuenta.
- Skyscraping. Técnica que se refiere al hecho de generar un contenido a partir de otro pero con mayor información. Se trata de crear algo más completo que inutilice al original. El objetivo final de esta estrategia es conseguir backlinks desde otras páginas, incluyendo la sustitución del enlace al contenido original por el nuevo «skyscrapeado». Más info …
Elementos para evitar ser considerado como duplicado
Lógicamente y como cabría esperar, Google y el resto de motores de búsqueda intentan mostrarnos los resultados originales por entender en un primer momento que se tratan de los que mayor valor podrían llegar a aportarnos. Sin embargo, como en cualquier circunstancia, siempre hay excepciones. Como no podía ser de otra manera, John Muller se encargaba de puntualizar esto mismo a través de una de sus habituales comparecencias «intentando resolver» dudas e inquietudes SEO. Concretamente se refería a determinados casos en los que el contenido copiado es más relevante que el original.
… And sometimes the person who wrote it first is not the one for example that is the most relevant. So we see this a lot of times for example with our own blog posts where we will write a blog post and we’ll put the information we want to share on our blog post and someone will copy that content and they will add a lot of extra information around it …
En cualquier caso, esta evaluación de qué es más o menos relevante como no podía ser de otra forma depende del propio algoritmo de Google. Nosotros solo podemos aventurar determinadas cuestiones que, bien por que se han hecho públicas o bien porque las hemos testado, pueden llegar a afectar en la elección de cuál será el texto indexado y cuál el considerado como contenido duplicado. Algunos son:
- E.A.T. Directrices para generar contenido de calidad. Sus siglas significan Expertise (experiencia), Authoritativeness (autoridad) y Trustworthiness (confiabilidad). Esto lo trataré en profundidad en próximos artículos en este Blog.
- Thin-content. Contenido de poca calidad sin valor alguno, por lo general son páginas con poco texto.
- Copiado vs Duplicado. Aunque pueda parecer lo mismo, existe una delgada línea que los diferencia. Mientras que el primero se refiere a textos claramente clonados (estructura, frases, etc.), el segundo abarca textos con una clara similitud entre ellos (no necesariamente iguales).
- Fecha de publicación y texto. El ejemplo evidente lo representan los medios de comunicación escritos online, los diarios digitales. Ofrecer una información útil, actualizada y veraz antes que otros siempre será un plus.
- Freshness. Los textos, como un sitio web, no pueden ser estáticos. Se deben actualizar siempre que el contexto lo permita y aporten valor añadido. No se trata de actualizar todas las páginas del sitio periódicamente, haya o no argumentos para ello. Es una cuestión de lógica. Si escribimos, por ejemplo, un post sobre «el salario medio en Europa» sin determinar una fecha concreta, es lógico que la información cambiará cada año, al menos. Este artículo tendría que mostrar los valores más actuales.
R Script para detectar el contenido duplicado
Existen muchas aplicaciones e implementaciones para visualizar el contenido duplicado. A continuación te explico una solución relativamente rápida que muestra de manera sencilla y con exactitud el porcentaje de similitud entre páginas.
install.packages("remotes")
remotes::install_github("remibacha/duplicateContentR")
packages <- c("XML", "httr", "textrank", "duplicateContentR")
lapply(packages, library, character.only = TRUE)
library(readxl)
pathxlsx <- 'C:/Users/Joseba/urls.xlsx'
df <-read_excel(pathxlsx, sheet = 1, col_names = TRUE, na = "", skip=0)
j=1
for (i in 1:nrow(df)) { for (k in j:nrow(df)) { if (df[j,1]!=df[k,1]){ print(paste("A: ",df[j,1],"vs B: ",df[k,1])) duplicateContentR::duplicate_content_score(url_a = toString(df[j,1]), url_b = toString(df[k,1]), my_user_agent = "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)") } } j=j+1 }
En este código se pueden distinguir los siguientes elementos principales:
- Package duplicateContentR de Rémi Bacha que detecta el porcentaje de duplicidad entre 2 páginas. Más info …
- Package readxl de Tidyverse que permite leer la hoja de cálculo donde se han de añadir row-by-row (columna A vs columna B) las urls a comparar. Más info …
- Estructura de control iterativa (FOR) que ejecutará la función ::duplicate_content_score() por cada línea de la hoja de cálculo.
Ya solo queda visualizar los resultados e interpretarlos. Para esto último, sin duda, hace falta experiencia evaluando decenas de proyectos ya que no existe una fórmula matemática para determinarlo.

Resultado tras comparar 4 urls diferentes, 3 de ellas bajo un mismo dominio y otra en uno externo.
Aunque en este sentido ya hay muchos estudios y análisis realizados por dIferentes especialistas SEO, cada sitio web es un «mundo». Sería caer en un error simplificarlo todo a un porcentaje. El éxito del texto creado (mostrarse de manera óptima en SERPs) dependerá en gran medida de nuestra intuición y del análisis posterior a través de herramientas como Search Console o Google Analytics.
Cabe también recordar la existencia de herramientas como Siteliner o Copywritely o la especializada en contenido de calidad Safecont, entre otras, u otras plataformas de análisis genéricos SEO como las habituales Semrush, Sistrix o Screaming frog que integran servicios que ayudan a este tipo de detecciones. Sin embargo, a distinción del código propuesto (información que a priori podría considerarse simple), todas ellas o son de pago o tienen limitaciones en el rastreo.
Para finalizar y en contra de lo expuesto, recopilando valores de diferentes estudios de autores con contrastada credibilidad, voy a intentar aportar una regla generalista basada en una «media a la baja» con la que poder empezar a dar nuestros primeros pasos …
Como norma general, las páginas con un porcentaje de similitud por encima del 60% son candidatas a tratarse como contenido duplicado.
En próximos posts, además de los desarrollos funcionales que iré publicando en torno a R, profundizaré en plugins y librerías habituales en este lenguaje para poder afrontar las tareas y trabajos más habituales.