Post anterior
El ROI del SEO en la era de la IA: tu guía prácticaEn SEO, entender qué entidades están presentes en un contenido es clave para mejorar la relevancia semántica, optimizar el enlazado interno y descubrir nuevas oportunidades de contenido.
En este artículo te voy a enseñar un script en Python que analiza varias URLs, extrae el texto de cada una, identifica sus entidades y te devuelve las 40 más repetidas, filtrando números y ruido.
¿Qué hace este script?
- Lee un listado de URLs (pegadas en consola, separadas por espacios o comas).
- Descarga el contenido HTML de cada URL con
requests
. - Limpia el HTML (quitando
<script>
,<style>
, etc.) usandoBeautifulSoup
. - Envía el texto a la API de TextRazor para extraer entidades.
- Filtra números y repeticiones para quedarte con entidades útiles.
- Cuenta las apariciones de cada entidad y devuelve las 40 más frecuentes en formato de texto separado por comas.
El código
# pip install textrazor requests beautifulsoup4
import re
import sys
from collections import Counter
from urllib.parse import urlparse
import requests
from bs4 import BeautifulSoup
import textrazor
# Clave API de TextRazor
textrazor.api_key = "AQUI_TU_API_KEY"
# Expresión regular para filtrar entidades con letras (evitar números)
ALPHA_RE = re.compile(r"[A-Za-zÁÉÍÓÚÜÑáéíóúüñ]")
def fetch_text(url, timeout=20):
"""Descarga y limpia el texto de una URL."""
headers = {"User-Agent": "Mozilla/5.0 (compatible; EntityCollector/1.0)"}
r = requests.get(url, headers=headers, timeout=timeout)
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
for tag in soup(["script", "style", "noscript", "template"]):
tag.decompose()
return soup.get_text(" ", strip=True)[:100_000] # límite para API
def extract_entities_from_text(text, language="spa"):
"""Extrae entidades de un texto usando TextRazor."""
client = textrazor.TextRazor(extractors=["entities"])
client.set_language_override(language)
resp = client.analyze(text)
names = []
for ent in resp.entities() or []:
name = (ent.matched_text or "").strip()
if not name or not ALPHA_RE.search(name):
continue
occurrences = len(getattr(ent, "starting_positions", []) or [1])
names.extend([name] * occurrences)
return names
def main():
raw = input("Pega las URLs separadas por comas o espacios: ").strip()
parts = re.split(r"[,\s]+", raw)
urls = [u if "://" in u else "https://" + u for u in parts if u]
counts = Counter()
first_seen_case = {}
for url in urls:
try:
text = fetch_text(url)
for e in extract_entities_from_text(text):
k = e.lower()
if k not in first_seen_case:
first_seen_case[k] = e
counts[k] += 1
except Exception as e:
print(f"[AVISO] {url}: {e}", file=sys.stderr)
top = [first_seen_case[k] for k, _ in counts.most_common(40)]
print(", ".join(top))
if __name__ == "__main__":
main()
Requisitos previos
- Python 3.9+ instalado
- Instalar dependencias:
pip install textrazor requests beautifulsoup4
- Registrarte en TextRazor y obtener una API Key.
Posibles usos para SEO
Este script no es solo un experimento técnico: puede ser una herramienta estratégica en cualquier auditoría o investigación SEO.
- Análisis de la competencia
- Pega varias URLs de competidores y obtén de forma inmediata las entidades que más repiten.
- Esto te muestra de qué hablan realmente, más allá de keywords exactas, y qué temas Google podría estar asociando con ellos.
- Optimización semántica de contenidos
- Introduce tus propias URLs y verifica si las entidades relevantes para tu sector aparecen con suficiente frecuencia.
- Si faltan, puedes integrarlas de forma natural para reforzar la temática y la relevancia.
- Detección de brechas de contenido (Content Gap)
- Compara las entidades más repetidas en contenidos de competidores con las tuyas.
- Aquellas que ellos trabajan y tú no, son oportunidades claras para nuevos artículos o actualizaciones.
- Planificación de clústers temáticos
- A partir de las entidades comunes en un grupo de artículos, puedes definir subtemas y crear un clúster de contenidos interconectados.
- Esto mejora la cobertura temática y la autoridad sobre un tema.
- Optimización del enlazado interno
- Usa las entidades más recurrentes como nodos clave (hubs) de tu arquitectura interna.
- Por ejemplo, si “inteligencia artificial” es frecuente, crea o refuerza una página pilar y enlaza desde todos los artículos que mencionan esa entidad.
- Monitoreo de cambios en la estrategia de un competidor
- Ejecuta el script cada cierto tiempo sobre las mismas URLs o categorías.
- Si empiezan a aparecer nuevas entidades relevantes, puede ser señal de un cambio en su enfoque o estrategia de contenidos.
Ejemplo de uso
Si analizamos 5 artículos de un competidor sobre IA y marketing, el script podría devolver:
Inteligencia artificial, Google, SEO, aprendizaje automático, búsqueda, ChatGPT, algoritmos, datos, contenido...
Con esa lista sabrías de un vistazo qué conceptos dominan en su contenido y podrías compararlos con el tuyo.