ChemaVX 1febcfe03b validador: un par consolidado no es una colisión, es su solución
topic_collision marcaba como colisión los dos artículos del acto de Grusch
del 9 de junio, cuando el de mayo lleva canonical_url apuntando al otro
desde hace semanas. Google ya sabe cuál manda y Ghost excluye al secundario
del sitemap: no hay nada que arreglar, y el propio mensaje ofrecía
«interlink deliberately» como salida, que es justo lo que había.

Un aviso que no se puede resolver nunca es peor que no avisar, porque
enseña a ignorar al validador entero — la misma razón por la que esta
mañana retiramos la comprobación de reddit-intel de backup-verify.

El par se salta cuando cualquiera de los dos declara canónico al otro. Si
el canónico apunta a un tercero, la colisión sigue avisando: comprobado con
los cuatro casos (sin canónico dispara, en las dos direcciones se calla,
canónico a un tercero dispara). fetch_corpus pide ya canonical_url, que
antes no traía.
2026-07-28 07:11:51 +00:00

seo-tools

SEO rule engine + tooling for the Ghost blogs (EN: theexclusionzone.com).

  • seo_rules.py — shared rule engine (pure functions, no I/O). Single source of truth for thresholds + checks. Consumed by the auditor, the validator, and (vendored) by ResearchOwl's blog pipeline.
  • seo_audit.py — Tool A: site-wide auditor (reads all published posts via ghst-en).
  • seo_validate.py — Tool C: single-post pre-publish validator (seo-check wraps this).
  • seo_exceptions.py — documented, consciously-accepted waivers (auditor reporting filter).
  • seo_mirror.py — OG/Twitter mirroring helper.
  • phase2_*.py/json — one-off batch helpers (kept for provenance).

No secrets live here. Ghost access is via the ghst-en wrapper (~/.local/bin), which fetches a staff token on demand from the pod and never writes it to disk.

S
Description
No description provided
Readme
683 KiB
Languages
Python 100%