API OpenAI en SEO: casos reales donde ahorra dinero y tiempo

Hace seis meses integré la API de OpenAI en un proyecto de clasificación de keywords para un cliente de ecommerce con 40.000 SKUs. Lo que antes tardaba dos semanas con herramientas tradicionales, lo procesé en 48 horas. Pero también descubrí que no es la solución para todo, y que hay casos donde metes más tiempo del que ahorras.

Voy a compartir qué funciona de verdad.

Clasificar intenciones de búsqueda a escala masiva

Este es el caso donde la API brilla. Tienes una lista de 10.000 keywords y necesitas saber cuáles son transaccionales, informacionales o navigacionales. Las herramientas tradicionales no escalan bien con listas tan grandes, y la clasificación manual es sencillamente insostenible.

Con la API puedes procesar eso en horas:

import openai

keywords = ["zapatillas running hombre", "cómo elegir zapatillas", "Nike"]

for keyword in keywords:
    response = openai.ChatCompletion.create(
        model="gpt-4-turbo",
        messages=[
            {"role": "system", "content": "Clasifica esta keyword en una de estas categorías: transaccional, informacional, navigacional. Responde solo con la categoría."},
            {"role": "user", "content": keyword}
        ],
        temperature=0.1
    )
    print(f"{keyword}: {response.choices[0].message.content}")

En mi cliente de ecommerce, clasificar 40.000 keywords costó algo así como $120 en tokens. Ahrefs habría requerido una suscripción anual de $2000 más, y aun así no llegaba a todo el volumen. El problema: la API no siempre interpreta el contexto de tu nicho. En la primera iteración, clasificó «cáscara de psyllium comprar» como informacional cuando era claramente transaccional. Tuvo que ajustar el prompt varias veces.

Generar meta descripciones a escala, pero con trampas

Este es el que veo más en LinkedIn y que, siendo honesto, sobrevende lo que realmente es. La API puede generar descripciones por lotes a velocidades impresionantes. Para un sitio con 5.000 posts de blog sin meta descripciones optimizadas, es viable.

import openai

posts = [
    {"title": "Cómo hacer pan de espelta en casa", "excerpt": "Receta detallada con tiempos y temperaturas exactas..."},
    {"title": "10 errores comunes en SEO técnico", "excerpt": "Revisamos los problemas más frecuentes que ralentizan crawl..."}
]

for post in posts:
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "Genera una meta descripción de máximo 160 caracteres. Incluye la keyword principal si cabe naturalmente."},
            {"role": "user", "content": f"Título: {post['title']}\n\nFragmento: {post['excerpt']}"}
        ],
        temperature=0.7
    )
    print(response.choices[0].message.content)

Ahí está el pero: las descripciones generadas son funcionales pero genéricas. He visto un 15-20% de ellas necesitar ajustes manuales porque no capturaban el ángulo único del contenido. Y si tu contenido es competitivo (finanzas, salud), una descripción mediocre no va a diferenciar tu resultado en la SERP. Semrush tiene un generador de meta descripciones integrado, pero cuesta lo mismo que la suscripción. La API es más barata si tienes volumen alto y puedes permitirte un 20% de rechazos.

Clustering de contenido duplicado o similar

Tenía un cliente con 300 páginas que sospechaba que había overlap temático brutal. En lugar de leer cada página o correr herramientas de análisis de similaridad (que son caras y lentas), usé la API para extraer temas principales de cada URL:

import openai

urls = {
    "https://ejemplo.com/dietas-bajas-carbohidratos": "contenido de la página...",
    "https://ejemplo.com/keto-sin-carne": "contenido de la página...",
}

themes = {}
for url, content in urls.items():
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "Extrae los 3 temas principales en máximo 5 palabras cada uno."},
            {"role": "user", "content": content[:2000]}
        ],
        temperature=0.3
    )
    themes[url] = response.choices[0].message.content

print(themes)

Encontró que 87 páginas trataban básicamente lo mismo. Eso permitió una estrategia de consolidación que mejoró autoridad en esas temáticas. Pero esto no es magia: si el contenido es realmente diferente en subtle details (diferentes audiencias, ángulos distintos), el clustering puede fallar. Lo ideal es combinar esto con análisis de keywords para validar.

La limitación que nadie menciona

El costo se escala rápido si no eres cuidadoso con el número de tokens. Una llamada a GPT-4 para procesar texto largo cuesta 10-15x más que GPT-3.5. En mi caso del cliente de ecommerce, usar GPT-4 para la clasificación de 40.000 keywords habría costado $1.200 en lugar de $120. No tenía sentido. Usar el modelo más potente para cada tarea es un error que comete casi todo el que empieza con esto.

También está el tema de la latencia. Si necesitas resultados en tiempo real (por ejemplo, generar descripciones en el momento en que se publica un post), la API introduce un retraso no trivial. En ese caso, un plugin tradicional dentro de tu CMS va a ser más ágil.

Lo que funciona es usarla para procesos batch: descarga, procesa, carga. No para operaciones en vivo.