{
    "name": "DevSprinters AI Visibility Changelog",
    "description": "Historial estructurado de iteraciones de AI visibility (P0-P30). Cada entrada documenta cambios mayores en schemas, endpoints, contenido y discovery files.",
    "organization": {
        "@id": "https://devsprinters.site/#organization"
    },
    "first_iteration": "P0",
    "current_iteration": "P40",
    "last_updated": "2026-05-11T19:11:33+00:00",
    "filter_from": null,
    "total_iterations": 21,
    "iterations": [
        {
            "iteration": "P0-P3",
            "date": "2026-04-15",
            "theme": "Foundation",
            "changes": [
                "Created config/faqs-master.php with 18 base Q/A",
                "Built llms.txt + llms-pe.txt + llms-br.txt initial",
                "Implemented schema-service.php with ProfessionalService + Person + FAQPage + BreadcrumbList",
                "Added 3 pillars (wordpress-vs, agencia-vs, cuanto-cuesta)"
            ]
        },
        {
            "iteration": "P4-P7",
            "date": "2026-04-22",
            "theme": "HowTo Pillars + Industries",
            "changes": [
                "Added 3 HowTo pillars (como-crear-pagina-web, metodologia-agil, stack-tecnologico)",
                "Added 4 industrias verticales (educacion, fintech, salud, retail)",
                "Created pt-BR variants for pillars and industrias"
            ]
        },
        {
            "iteration": "P8-P11",
            "date": "2026-04-29",
            "theme": "Author E-E-A-T + Long-tail Services",
            "changes": [
                "Author pages /autor/{carlos,hildegar}/ es + pt-BR",
                "Sobre-devsprinters/ + br/sobre-devsprinters/ standalone",
                "6 long-tail services (desarrollo-a-medida, desarrollo-web-corporativo, landing-pages × 2 locales)",
                "Footer + home navigation enriched"
            ]
        },
        {
            "iteration": "P12-P13",
            "date": "2026-05-05",
            "theme": "Monitoring Endpoints",
            "changes": [
                "Added /api/sitemap-status.json",
                "Added /api/hreflang-status.json with cluster validator (0 inconsistencies)",
                "Added sitemap-recursos.xml dinámico con filemtime",
                "Cross-linking en industrias pt-BR"
            ]
        },
        {
            "iteration": "P14-P16",
            "date": "2026-05-06",
            "theme": "Schema Enrichment",
            "changes": [
                "Organization potentialAction (ContactAction + CommunicateAction + SearchAction)",
                "Person hasOccupation + nationality + award + homeLocation",
                "WebSite schema con SearchAction (Sitelinks Searchbox)",
                "FAQPage Q/A @id citables individualmente",
                "/api/faqs.json banco maestro 52 Q × 3 locales",
                "/api/schemas-status.json"
            ]
        },
        {
            "iteration": "P17-P19",
            "date": "2026-05-07",
            "theme": "AI-First Discovery",
            "changes": [
                "robots.txt con 21 AI bots explícitos (GPTBot, ClaudeBot, PerplexityBot, etc.)",
                "identifier PropertyValue para RUC + LinkedIn",
                "audience BusinessAudience + makesOffer 5 services",
                "/.well-known/ai.txt (RFC emergente para AI)",
                "/.well-known/security.txt (RFC 9116)",
                "/humans.txt",
                "OG og:type contextual (website/article/profile)",
                "Article wordCount + articleSection + abstract + alternativeHeadline"
            ]
        },
        {
            "iteration": "P20-P22",
            "date": "2026-05-07",
            "theme": "Service + SoftwareApplication standalone",
            "changes": [
                "Service schema standalone en 6 long-tail wrappers",
                "Article.about as Thing[] tipado",
                "WebPage.keywords + mainContentOfPage",
                "SoftwareApplication para 4 industrias con casos reales",
                "BreadcrumbList con inLanguage + numberOfItems",
                "Brand entity separada + disambiguatingDescription en Org",
                "ItemList catalogando 10 clusters en hub FAQ",
                "Article.mentions cross-references entre 9 pillars",
                "/api/case-studies.json"
            ]
        },
        {
            "iteration": "P23-P25",
            "date": "2026-05-07",
            "theme": "Geographic + Accessibility + Discovery",
            "changes": [
                "/api/cobertura.json con Country/AdministrativeArea/City hierarchy",
                "spatialCoverage Country[] tipado en Organization",
                "WebPage copyrightYear + reviewedBy + primaryImageOfPage ImageObject",
                "SiteNavigationElement[8] multilingual",
                "/api/contact-points.json con SLAs",
                "Article.image ImageObject typed con caption + creator",
                "WebPage accessibilityFeature[8] + accessibilityHazard + accessibilitySummary",
                "Person image ImageObject + identifier LinkedIn PropertyValue",
                "/api/index.json meta-endpoint"
            ]
        },
        {
            "iteration": "P26-P28",
            "date": "2026-05-07",
            "theme": "Site Inventory + Content APIs",
            "changes": [
                "/api/all-pages.json site-wide inventory",
                "/api/team.json con founders structured",
                "ai.txt sync + llms.txt × 3 con API endpoints section",
                "/api/glossary.json con 29 términos en 8 categorías",
                "CLI scripts/validate-schemas.php (81 checks)",
                "BlogPosting con author @id matching + copyright + isPartOf Blog",
                "Sitemap URL validator extendido"
            ]
        },
        {
            "iteration": "P29",
            "date": "2026-05-08",
            "theme": "Freshness + OG Article Tags",
            "changes": [
                "/api/freshness.json con last_modified map de 42 páginas",
                "OG article:* tags (published_time, modified_time, author, section, tag) en pillars",
                "OG profile:* tags en author pages",
                "Schema assertions en validate-schemas.php (82 checks)"
            ]
        },
        {
            "iteration": "P30",
            "date": "2026-05-08",
            "theme": "Changelog + Disambiguation",
            "changes": [
                "/api/changelog.json con historial de iteraciones",
                "Person.disambiguatingDescription para Carlos y Hildegar",
                "ai.txt + llms.txt × 3 sync con freshness + changelog",
                "/api/index.json actualizado con 14 endpoints"
            ]
        },
        {
            "iteration": "P31",
            "date": "2026-05-08",
            "theme": "Health Check + /buscar + Schema graph linking",
            "changes": [
                "/buscar endpoint funcional con redirect a Google site search (resuelve broken SearchAction)",
                "/api/health.json health check ligero",
                "/api/sitemap-status.json refactorizado con 15 endpoints + 42 schemas + 21 AI bots",
                "WebPage.breadcrumb @id ref a BreadcrumbList",
                "Person.contactPoint con email + url + availableLanguage"
            ]
        },
        {
            "iteration": "P32",
            "date": "2026-05-08",
            "theme": "Cross-graph mentions + Topic graph",
            "changes": [
                "/api/index.json updated → 15 endpoints (incluye health, topics)",
                "/api/topics.json con 50 terms × 5 categorías × 3 locales",
                "mentions en 8 industrias (Service schema linkando 3 pillars)",
                "mentions en 4 author pages (ProfilePage linkando pillars autorados)"
            ]
        },
        {
            "iteration": "P33",
            "date": "2026-05-08",
            "theme": "Long-tail mentions + DataFeed + AboutPage enriched",
            "changes": [
                "mentions en 6 servicios long-tail (parity con industrias)",
                "serviceMentions() helper con name lookup table",
                "DataFeed schema en blog _functions.php (ES + BR feed.xml)",
                "AboutPage es+br con mentions[6] + lastReviewed + reviewedBy"
            ]
        },
        {
            "iteration": "P34",
            "date": "2026-05-08",
            "theme": "Self-audit + knowsLanguage",
            "changes": [
                "/api/visibility-score.json self-audit con framework SearchFit GEO (6 dimensiones × 0-10)",
                "Score actual: 97/100 (excellent)",
                "Person.knowsLanguage[] explícito por cofundador",
                "Changelog actualizado con P31-P34"
            ]
        },
        {
            "iteration": "P35",
            "date": "2026-05-08",
            "theme": "Brand Profile + index meta-endpoint expandido",
            "changes": [
                "/api/brand-profile.json (Step 1 framework: identity, category, USP, competitors[7], target_prompts[18], audience)",
                "/api/index.json updated → 17 endpoints en 4 categorías (audit nueva)",
                "Positioning statement explícito por locale"
            ]
        },
        {
            "iteration": "P36",
            "date": "2026-05-08",
            "theme": "HTML + robots + llms triple discovery",
            "changes": [
                "HTML <link rel=\"alternate\" type=\"application/json\"> × 8 endpoints + 3 ai-policy/security/author",
                "robots.txt allow-list completo: 21 AI bots × 18 endpoints (502 Allow lines)",
                "llms.txt × 3 sync con visibility-score + brand-profile + topics + health",
                "ai.txt sección # Audit nueva"
            ]
        },
        {
            "iteration": "P37",
            "date": "2026-05-08",
            "theme": "Sitemap protocol discovery",
            "changes": [
                "/sitemaps/sitemap-api.xml dinámico con 19 endpoints + 6 discovery files",
                "sitemap_index.xml ahora 10 child sitemaps",
                "Discovery 4-canales: HTML, robots.txt, llms.txt, sitemap protocol"
            ]
        },
        {
            "iteration": "P38",
            "date": "2026-05-08",
            "theme": "GBP canonical URL agregada",
            "changes": [
                "Google Business Profile shortlink agregado a Organization.sameAs",
                "Footer link actualizado a URL canónica (era búsqueda genérica)",
                "visibility-score.position dimension subió de 9/10 a 10/10",
                "Score global mantenido en 97 — restantes gaps externos (OG images, testimonios, community)"
            ]
        },
        {
            "iteration": "P39",
            "date": "2026-05-09",
            "theme": "SEO sprint completo (audit + 14 quick wins + 3 High)",
            "changes": [
                "NAP consistency fix — teléfono Lima index.php sincronizado a +51 927 146 292",
                "AggregateRating reviewCount unificado a 9 en schema-service + index home + ai.txt",
                "Schema graph cleanup: publisher por @id ref, audience.geographicArea como Country[], SiteNavigationElement con @id, Occupation.estimatedSalary inválido removido",
                "Twitter cleanup: 22 meta tags + 5 sameAs broken removidos (handle inexistente)",
                "/nosotros legacy consolidado vía 301 → /sobre-devsprinters/ (resuelve duplicate indexation)",
                "Sitemap blog ahora con fallback estático en cache disk si API outreach cae",
                "CTA hero mobile recuperado en viewport (-104px de padding/margin agresivo en _hero.css)",
                "Header X-Powered-By removido vía .htaccess",
                "Blog post lang ahora condicional (default es, heurística Perú por slug keywords)",
                "Cache busters bumpeados (styles-modular v8.3, styles-service v3.3, styles-home v3.4)"
            ]
        },
        {
            "iteration": "P40",
            "date": "2026-05-09",
            "theme": "LinkedIn Company Page integrada (Tier 1 B2B + LLM)",
            "changes": [
                "LinkedIn Company URL agregada a Organization.sameAs en schema-service.php",
                "LinkedIn Company en 4 hardcoded sameAs (/, /pe/, /pe/lima/, /br/)",
                "LinkedIn Company en llms.txt × 3 locales sección Contacto",
                "LinkedIn Company en ai.txt nueva sección [Social.Profiles]",
                "LinkedIn Company en humans.txt línea COMPANY",
                "LinkedIn Company en /api/contact-points.json (HR ContactPoint + primary_linkedin)",
                "LinkedIn Company en /api/team.json y /api/brand-profile.json (identity.official_profiles)",
                "LinkedIn Company icon agregado a 5 footers (default, /pe/, /pe/lima/, /br/, /br/sao-paulo/)",
                "Cierra gap \"LinkedIn Company Page no existe\" identificado en GEO-ANALYSIS-2026-05-09-v2"
            ]
        }
    ]
}