Commit Graph
4 Commits
Author SHA1 Message Date
ChemaVX f7be9ccb3e seo: quién enlaza HACIA un post, que es lo que decide si Google lo encuentra
Toda la caja miraba los enlaces en un solo sentido — a quién enlazo yo — y
esa es la pregunta del lector, no la de Google. Dos posts de EN publicados
el 21-jul seguían siendo «URL is unknown to Google» una semana después:
tenían enlaces entrantes, pero solo desde artículos con 8 y 12 impresiones
de por vida, páginas que Google casi no visita.

seo_semantic gana dos subcomandos: `padrinos <slug>`, que ordena candidatos
por tráfico REAL del origen (Search Console) en vez de por similitud, y
`descubrimiento`, que lista los publicados a los que no llega ni un enlace
desde el tercio fuerte del sitio. Salen 21 de 32 en EN y 21 de 31 en ES.
Ambos descartan los posts con canonical_url propio: Ghost los excluye del
sitemap por consolidados, así que apadrinar desde ahí no sirve de nada — el
de Grusch de mayo tiene 1.728 impresiones y habría encabezado la lista.

seo_gsc gana `inspecciona`, que pregunta el veredicto a Google en vez de
deducirlo. Es lo que separa «posiciona mal» de «no lo ha visto nunca», que
son problemas opuestos y se arreglan al revés.

Y el checklist del remate incorpora el paso 3b: el informe tiene que traer
el comando de enlace entrante listo para copiar. No lo aplica el agente
porque eso es editar otro post publicado, y eso sigue prohibido.

⚠️ Anotado en el docstring: contar enlaces internos desde el HTML público da
«cero huérfanos», porque el tema mete navegación y feed de relacionados que
parecen enlaces del cuerpo. La verdad está en el html del CLI de Ghost.
2026-07-28 06:55:24 +00:00
ChemaVX 4609a21f21 seo_gsc: cobertura por delante del CTR, y arreglar el aviso duplicado
Recalibrado contra los datos reales del primer día, que desmintieron dos
supuestos del diseño.

El umbral de 150 impresiones dejaba fuera TODO: el mejor caso de los dos
blogs eran las 125 de Varginha en EN. El vigilante se habría callado para
siempre, la peor avería en algo que solo habla cuando hay noticias. Baja a
40, y entre 40 y 150 las líneas salen marcadas con «~» porque ahí el CTR es
orientativo, no firme.

Y el CTR no es la palanca a este volumen: con ~180 impresiones semanales en
EN, convertir el 10% de todas serían 78 clics al mes. El informe pasa a
liderar con cobertura — impresiones, páginas que reciben alguna, consultas
distintas, posición ponderada, y qué páginas empiezan o dejan de aparecer —
y avisa también cuando eso se mueve (±25% de impresiones o ±3 páginas), no
solo cuando hay CTR desperdiciado.

De propina, un fallo que solo se vio ejecutando el servicio dos veces
seguidas: avisaba las dos. Las listas nuevas ordenan un set de URLs por
impresiones y los empates los desempataba el orden de iteración del
conjunto, que Python aleatoriza por proceso; la huella cambiaba sin que
cambiara un solo dato. Todas las ordenaciones llevan ya desempate por
clave. Verificado: mismo texto con PYTHONHASHSEED 1, 2 y 3, y la segunda
ejecución del servicio se calla.
2026-07-28 06:12:40 +00:00
ChemaVX 33b24f33c7 seo_gsc: nombre real de la propiedad ES y qué histórico hay de verdad
Estreno con credencial. Dos cosas que solo se ven con la API delante:

La propiedad ES no es de dominio sino de prefijo de URL
(https://zonadeexclusion.com/), así que sc-domain:zonadeexclusion.com no
existía y el canario lo cazó en el paso 4. Queda anotado que ese tipo de
propiedad no ve www ni http.

Y el histórico no es de 16 meses: las dos propiedades se dieron de alta en
mayo de 2026 y el dato más antiguo es del 2026-05-09. El manual prometía
comparar contra el año pasado y eso no va a existir nunca.
2026-07-28 06:04:20 +00:00
ChemaVXandClaude Opus 5 896d723f15 seo_gsc: el marcador — datos reales de Search Console
Toda la caja de herramientas miraba hacia dentro (enlaces, sitemap, reglas de
metas): decía si el sitio está bien construido, no si alguien lo encuentra. Los
únicos datos de resultado en la máquina eran una exportación manual del
2026-06-17, anterior al remate de metas del 23 de junio — o sea, cuarenta días
optimizando sin saber el resultado.

Cuenta de servicio en vez de OAuth, porque aquí no hay navegador (misma piedra
que con Gemini). Sin librerías de Google: el JWT se firma con PyJWT y se canjea
a mano, treinta líneas en lugar de media docena de dependencias.

Lo que de verdad aporta es `informe`: la lista de páginas que POSICIONAN Y NO
SE PINCHAN, con los clics que faltan si el CTR fuese el normal de su posición.
Y `antes-despues`, escrito para responder de una vez si el remate del 23-jun
sirvió: la API guarda 16 meses, así que el histórico está disponible desde el
primer minuto y no hay que esperar semanas para comparar.

Probado lo que se puede probar sin credencial: firma RS256 emitida y verificada
con su pública, los dos caminos de fallo de la credencial (ausente y con
permisos flojos), y la lógica de análisis contra datos sintéticos calcados del
caso Nimitz real (pos 6,44 / 2.452 impresiones / 0,16% CTR), que sale marcada
con +111 clics de hueco mientras la página sana no se marca.

El timer queda instalado y PARADO: sin credencial fallaría cada lunes, y un
timer que falla siempre enseña a ignorar los avisos.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 20:36:45 +00:00