APFerrer
Volver al blog
Trucos rápidosTrucos rápidos

Trucos rápidos - Contenido duplicado

APFerrer22 de octubre de 202414 min
Entradilla

Hoy: Ver el contenido duplicado de tu web usando Python y Google Colab

Trucos rápidos: Contenido duplicado

Hoy: Ver el contenido duplicado de tu web usando Python y Google Colab

¿Qué es el SEO?

SEO (Search Engine Optimization): técnicas para mejorar visibilidad.

  • On-page: optimización directa.
  • Off-page: estrategias externas (backlinks).

Google valora relevancia, UX y técnica.

¿Cómo funciona?

Bots rastrean e indexan, evaluando:

  • Relevancia por palabras clave
  • Autoridad por backlinks
  • Técnicos (velocidad, responsive, SSL)

Buena arquitectura SEO

  • Páginas importantes accesibles en pocos clics.
  • Enlaces internos estratégicos.
  • URLs limpias y descriptivas.
  • Jerarquía H1/H2/H3.

¿Por qué es malo el contenido duplicado?

Confunde a los motores de búsqueda y divide la relevancia entre páginas, bajando posiciones.

Python + Colab para detectar contenido duplicado

Librerías

  • requests - descarga HTML
  • BeautifulSoup - parsea texto
  • TfidfVectorizer - texto a vectores
  • cosine_similarity - similitud 0-1

Código completo

import requests
from bs4 import BeautifulSoup
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import re

urls_filtradas = [url for url in enlaces_internos_unicos
                  if '/services' not in url and '/category' not in url]

def obtener_contenido_filtrado(url):
    try:
        respuesta = requests.get(url)
        sopa = BeautifulSoup(respuesta.content, 'html.parser')
        for elemento in sopa.select('nav, footer, header, aside'):
            elemento.decompose()
        parrafos = [p.get_text() for p in sopa.find_all('p')]
        texto_filtrado = []
        for parrafo in parrafos:
            if not re.search(r"categoría|archivos|navegación|menú", parrafo, re.IGNORECASE):
                texto_filtrado.append(parrafo)
        return ' '.join(texto_filtrado)
    except Exception as e:
        print(f"Error al obtener contenido de {url}: {e}")
        return ""

def detectar_duplicados(urls, umbral=0.95):
    textos = [obtener_contenido_filtrado(url) for url in urls]
    vectorizador = TfidfVectorizer().fit_transform(textos)
    sim_matrix = cosine_similarity(vectorizador)
    duplicados = {}
    for i in range(len(urls)):
        duplicidad_total = 0
        detalles_duplicados = []
        for j in range(len(urls)):
            if i != j:
                duplicidad_total += sim_matrix[i][j]
                if sim_matrix[i][j] > umbral:
                    detalles_duplicados.append((urls[j], sim_matrix[i][j]))
        duplicidad_total /= (len(urls) - 1)
        duplicados[urls[i]] = (duplicidad_total, detalles_duplicados)
    return duplicados

duplicados = detectar_duplicados(urls_filtradas)

for url, (duplicidad_total, detalles) in duplicados.items():
    print(f"\nURL: {url}\nTasa total de duplicidad: {duplicidad_total:.2f}")
    if detalles:
        for dup_url, similitud in detalles:
            print(f"  {dup_url} similitud {similitud:.2f}")

Instalación

!pip install scikit-learn

Cómo funciona

  1. Filtración de URLs.
  2. Extracción de párrafos relevantes.
  3. Eliminación de patrones con regex.
  4. Vectorización TF-IDF.
  5. Cálculo de similitud coseno.
  6. Identificación con umbral 0.95.

Enlaces

CTAs

  • Formulario de suscripción
  • "Reservar mi cita" → networking 30 min
AF
APFerrer
APFerrer · Consultora en datos y procesos
Nota de la autora

¿Aplica a tu empresa? Cuéntamelo en 30 minutos y vemos qué encaja.

Reservar 30 min