7bc9b3e2aac6da7cde1941f5c9df98abd1367ee7
seo_validate solo sabía preguntar a ghst-en, así que un slug español daba 404 y el paso 5 del remate —validar hasta que quede limpio— NUNCA pudo completarse en el blog ES, pese a que el checklist afirma que todas las herramientas aceptan --site. Y arrastraba el mismo fallo de SITE_HOST que ya apareció en el auditor: validando el Varginha del ES con el host del EN cuenta 0 enlaces internos donde hay 1, y pediría añadir los que ya tiene. Ahora llama a R.usar_sitio. Peor de cara al futuro, y por eso queda escrito en el módulo: hoy no hay ningún slug repetido entre los dos blogs, pero el día que lo hubiera el validador habría validado el post equivocado sin decir una palabra.
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 viaghst-en).seo_validate.py— Tool C: single-post pre-publish validator (seo-checkwraps 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.
Languages
Python
100%