Once días. Noventa y cuatro turnos. Cuarenta y tres artículos. Once dólares con sesenta y uno. Cero suscriptores.
Por si llegas nuevo: en el marcador público del experimento hay cuatro modelos de IA —Claude, GPT, Gemini y DeepSeek— gestionando cada uno su propia web y compitiendo por conseguir suscriptores con SEO orgánico. Publican solos, sin que nadie revise lo que escriben, y explican cada decisión en público. Se llama AI SEO Battle, arrancó el 30 de agosto y dura diez meses. Los dos capítulos anteriores son el planteamiento del experimento y el día en que cada IA escribió sus propias instrucciones.
Este es el parte del día once y actualiza el que publiqué el día nueve. Lo escribo ahora y no dentro de tres meses justamente porque ahora el marcador está a cero, y contarlo solo cuando haya números bonitos sería otra cosa distinta de la que dije que iba a hacer.
Los números del día once
Sale de la base de datos del propio sistema, que registra cada llamada con sus tokens y su coste reales: no son cifras que reporten los modelos sobre sí mismos. El recuento de artículos lo puedes rehacer tú, porque cada web tiene su RSS y su índice y las cuatro están enlazadas desde el marcador.
- 94 turnos autónomos ejecutados: 80 terminaron bien, 14 se quedaron por el camino.
- 43 artículos publicados entre las cuatro webs.
- 11,61 $ de coste real: 9,68 $ en los 94 turnos y 1,93 $ en generar las imágenes de portada. Al cambio conservador que usa el freno de presupuesto (1,08 $ por euro), unos 10,75 €.
- 2,27 millones de tokens de entrada y 1,19 millones de salida.
- 54 imágenes generadas, 27 publicadas: van por parejas, porque cada portada se dibuja con dos generadores distintos a partir del mismo encargo.
- 0 suscriptores. 0 clics. 0 impresiones en Search Console, en los 40 partes diarios recogidos hasta ahora.
Puesto por modelo, que es donde se ve algo:
| Modelo | Turnos | Artículos | Coste | Coste por artículo |
|---|---|---|---|---|
| Claude | 25 | 14 | 4,83 $ | 0,35 $ |
| GPT | 22 | 5 | 2,44 $ | 0,49 $ |
| DeepSeek | 22 | 12 | 1,77 $ | 0,15 $ |
| Gemini | 25 | 12 | 0,63 $ | 0,05 $ |
| Total | 94 | 43 | 9,68 $ | 0,23 $ |
La fila de total no incluye los 1,93 $ de las imágenes, que se contabilizan aparte porque no pertenecen a ningún turno concreto.
Nadie le ha dicho a GPT que publique menos que los demás: es su propio criterio, y también su propia web la que se queda sin corpus. Y encima es el que más paga por pieza, casi diez veces lo que le cuesta a Gemini.
La corrección del capítulo anterior
El día nueve publiqué este mismo parte con dos cifras mal. Arreglarlas en silencio sería justo lo contrario de lo que dice el titular.
Dije 33 artículos y eran 31. La cifra la saqué de contar las acciones de tipo «crear artículo» en el registro de actividad, que incluye reintentos y turnos que no llegaron a publicar. El número bueno se cuenta en otro sitio: los ficheros HTML de cada web, contrastados con las entradas de su RSS. Las dos fuentes coinciden, y hoy dan 43.
Dije 3,67 € y eran 3,67 dólares. La tabla de precios está en dólares, porque en dólares facturan las cuatro APIs; el euro solo aparece cuando el freno de presupuesto convierte para compararlo con el tope mensual. Puse el símbolo equivocado y la cifra quedó un 8 % inflada.
Las dos son del mismo tipo: un número correcto sacado de la consulta equivocada. Es el error que más me preocupa del proyecto, porque no da ningún síntoma.
Por qué el cero era lo previsible
Un dominio comprado hace once días no rankea. No es prudencia, es cómo funciona la Búsqueda: Google tiene que rastrear las páginas, decidir si las indexa, empezar a mostrarlas para alguna consulta, y solo entonces alguien puede hacer clic.1 Son cuatro escalones y el suscriptor está en el quinto.
Por eso el sistema mide la escalera y no el último peldaño: indexación primero, impresiones después, clics más tarde, suscriptores al final. Mirando solo el final, las cuatro IAs llevarían once días juzgándose contra un cero que no significa nada, y cambiando de estrategia por ruido.
Ahora mismo el sistema vigila 54 URLs entre los cuatro sitios, cada una esperando su primera impresión en Google. Ninguna la ha tenido. Son más que los 43 artículos porque también entran las portadas, los registros públicos y las páginas de privacidad. Ese es el escalón real donde estamos: no es que nadie se suscriba, es que nadie ha visto aún ninguna de las páginas en un resultado de búsqueda.
Los diez fallos del día cero, con causa y arreglo
El día del lanzamiento no salió limpio: diez fallos distintos, todos del 30 de agosto. Los pongo enteros porque en el capítulo anterior hablé de «los ocho fallos» sin enumerarlos, y un denominador que no se puede contar no vale de nada.
1. Cuatro webs diciéndole a Google que la buena era otra
La plantilla con la que se crearon los cuatro sitios llevaba un marcador de ejemplo, [SUBDOMINIO], que había que sustituir por el dominio real. Se sustituyó en el texto visible, pero quedó dentro de la etiqueta canónica, la de compartir en redes y los datos estructurados. Google trata la canónica como señal y no como orden, y las que apuntan a un host inexistente suele descartarlas2 — pero es una señal en contra tuya el primer día. Causa: el filtro solo revisaba lo que escribían las IAs, y esa plantilla la había puesto yo. Arreglo: el script de publicación sustituye ahora ese marcador sobre el sitio ya publicado, en cada publicación.
2. Un turno que publicó bien y se registró como fallido
El script que remata cada publicación buscaba ese marcador con grep. Cuando ya no quedaba ninguno, grep termina con código de error para decir «no he encontrado nada»,3 y el script abortaba ante cualquier error. El artículo estaba escrito, guardado y publicado; solo faltaba el último paso, pero la alerta decía «falló». Arreglo: una línea, marcar esa búsqueda como «puede no encontrar nada». Y una costumbre: ante un fallo, lo primero es comprobar si el contenido llegó a publicarse.
3. El freno de presupuesto, ciego sin decirlo
Moví la tabla de precios de los modelos a otro fichero y dejé una importación del nombre antiguo: un refactor a medias. Lo relevante no es el fallo, es lo que estaba en juego: si un modelo se queda sin precio, sus llamadas cuestan cero para el sistema y el tope mensual deja de frenar nada. Arreglo: usar la función de cálculo en vez del nombre suelto y, cuando no encuentre precio, gritarlo por consola en lugar de sumar cero.
4. Gemini decidió usar el modelo potente y corrió con el barato
Cada IA elige con qué modelo ejecutar su siguiente turno. El primer día no hay turno anterior, así que el sistema cayó al modelo por defecto, el barato. Gemini no lo sabía: razonó en voz alta que iba a usar el bueno y le respondió el otro. Su primer artículo salió de una línea. Arreglo: el modelo se decide antes de montar el encargo y ahora se le dice a cada IA con cuál se está ejecutando ese turno. El artículo pobre no lo reescribí: el experimento mide exactamente esto.
5. Los cuatro sitios, sin imagen al compartirlos
La plantilla traía como ejemplo una imagen de portada que nunca existió, y el sistema real generaba la suya en otra ruta. Nadie conectó las dos cosas: cualquier enlace compartido en redes salía sin imagen. Arreglo: un paso que escribe la etiqueta sobre el sitio ya publicado, porque cada agente reescribe su portada entera cada turno y lo corregido en el repositorio se perdería al siguiente. Aun así no quedó resuelto del todo hasta el 2 de septiembre: la portada se generaba en SVG, y ninguna red social pinta un SVG en la tarjeta. Ahora sale en PNG, y también en cada artículo, que hasta ese día ni siquiera declaraban imagen.
6. Un turno entero tirado por un detalle de formato
El sistema espera que la IA devuelva su decisión en un bloque de datos delimitado. GPT devolvió los datos perfectos, pero sin los delimitadores. El programa lo descartó entero y —lo peor— no lo anotó en ningún sitio. Un turno pagado que desapareció sin rastro, y que por eso mismo no está dentro de los 94 turnos ni de los 14 fallos: lo que no se registra, no se cuenta. Arreglo: si faltan los delimitadores se busca el bloque igual, y si no hay nada legible se registra como error en vez de desaparecer.
7. El turno de newsletter que no dejaba rastro en el repositorio
Cuando una IA se salta el envío por no tener suscriptores, anota el motivo en su registro público. Esa rama escribía en disco pero no confirmaba el cambio en el repositorio: le faltaba la llamada que sí tenían las demás. Con cero suscriptores siendo lo normal los primeros meses, iba a dejar un cambio suelto cada domingo hasta que otro turno lo arrastrase sin querer. Arreglo: añadirle la llamada que ya tenían las demás ramas.
8. Una tipografía elegida que nadie llegó a ver
Claude declaró una tipografía propia en su hoja de estilos y no la cargó en ninguna parte. El navegador hace lo educado: coge la del sistema y se calla. Arreglo: un aviso en las instrucciones comunes, «si declaras una tipografía, tienes que cargarla». El CSS publicado no lo toqué: se corregirá cuando Claude vuelva a su diseño.
9. El recolector pasaba justo antes que los turnos
El proceso que recoge la actividad corría cada quince minutos, en los mismos minutos exactos en que arrancaban los turnos, así que casi siempre pasaba segundos antes de que el turno terminara de guardar y el panel público iba un ciclo por detrás. Arreglo: cada turno llama al recolector al terminar; el de cada quince minutos sigue como red.
10. Ahorrar dos días antes de que el contador se reiniciara
El tope de gasto se reinicia el día 1 de cada mes y lo no gastado no se acumula. El sistema decía cuánto quedaba, pero no cuántos días faltaban para el reinicio. El lanzamiento cayó a dos días de cerrar agosto y el primer turno de Claude razonó en modo ahorro sin saberlo, cuando ahí ahorrar no compraba nada. Arreglo: informar de los días de ventana que quedan. El gasto no se toca desde fuera: aquí decide el agente, y corregir es darle mejor información, no quitarle la decisión.
El patrón que los une
Cuando los puse en fila, la mitad tenían la misma forma: no se presentaban como un fallo, sino como un estado normal. Un registro que dice «pendiente», un aviso que dice «ha ido bien», un programa que termina correctamente sobre un fichero vacío.
El caso más claro fue el sistema de envío de correos. El panel llevaba días diciendo «aún no configurado» y estaba montado y funcionando desde el primero: el programa que lo consultaba se ejecutaba sin cargar las contraseñas, encontraba el hueco vacío y concluía que faltaba por montar. Un fallo que se presenta como tarea pendiente es peor que uno que se presenta como error, porque nadie lo investiga: parece que ya sabes lo que pasa.
El más caro llegó después. La columna que cuenta los suscriptores captados por buscador —la que decide quién gana— se calculaba leyendo un dato que el formulario nunca guardaba: habría dado cero para siempre, y un cero ahí no llama la atención de nadie los primeros meses porque es lo que se espera ver. Se arregló contando los confirmados de la lista y retirando un desglose por origen que un formulario público no puede medir.
Los errores ruidosos molestan y se arreglan solos. Estos duran hasta que alguien va a mirar a propósito, y nadie va a mirar algo que parece estar bien.
Qué miro mientras no hay nadie
Con el marcador a cero, las señales útiles están en otro sitio.
Los 14 turnos que no llegaron a publicar, por ejemplo, que no son todos la misma cosa: 7 los paró el filtro automático, 5 devolvieron sus datos en un formato que el sistema no supo leer y 2 declararon mal las rutas. De los 7 bloqueos, cuatro son enlaces a imágenes que la IA daba por hechas antes de crearlas, uno un enlace a una hoja de estilos inexistente y otro un tope de cambios diarios que ya he retirado. El séptimo es el interesante, aunque no por lo que parece: el filtro de afirmaciones financieras paró un turno de Claude porque dos páginas sobre firmware de impresoras 3D decían «sin riesgo de dañar el nozzle» y «sin riesgo». Es un falso positivo: el filtro busca promesas del tipo «inversión sin riesgo» y no distingue una impresora de un producto financiero. Ese turno se perdió entero por dos frases inocentes, y es el precio de un filtro que prefiere pasarse a quedarse corto.
El coste también dice cosas. Que Gemini lleve gastados 0,63 $ frente a los 4,83 $ de Claude dice más de las tarifas que de las IAs: los seis turnos que Claude ha corrido con su modelo grande costaron 3,58 $, más que Gemini en todo el experimento. Gemini, además, ha hecho 10 de sus 25 turnos con su modelo más barato, y lo razona ella misma: «para maximizar la frecuencia de publicación dado mi actual presupuesto». Si eso le cuesta calidad, se verá en las impresiones, no en la factura.
Y el reparto de publicación: cinco artículos de GPT contra catorce de Claude, en las mismas condiciones y con el mismo presupuesto.
Cuándo diría que va mal
Vale poco decir «hay que tener paciencia» sin poner fecha. Pongo la misma que puse el día nueve.
Si a finales de septiembre las cuatro webs siguen con cero impresiones en Search Console —no cero suscriptores: cero impresiones4— el problema no es la paciencia. Sería señal de que las cuatro están escribiendo para búsquedas que no existen, y eso sí es un resultado del experimento.
Hasta entonces, el cero es simplemente dónde está la escalera.
Seguirlo en directo
- Marcador del experimento — cada turno con su razonamiento, su coste y lo que decidió cada IA.
- Diario cruzado — qué hizo cada una el mismo día, en paralelo.
- Capítulo 1: el planteamiento — reglas, nichos y cómo se puntúa.
- Capítulo 2: sus propias instrucciones — lo que cada IA se pidió a sí misma.
- La serie entera, según se vaya escribiendo.
- Google Search Central, «Cómo funciona la Búsqueda de Google»: rastreo, indexación y publicación de resultados. developers.google.com ↩
- Google Search Central, «Consolidar URLs duplicadas»: la etiqueta
rel="canonical"es una señal que Google puede ignorar, no una directiva. developers.google.com ↩ - Manual de GNU grep, «Exit Status»: devuelve 0 si hubo coincidencias y 1 si no hubo ninguna. gnu.org ↩
- Search Console cuenta una impresión cuando un enlace al sitio aparece en un resultado de búsqueda, aunque el usuario no baje hasta él. support.google.com ↩