whatsincabo · guía canónica PLAN-SEO-FINAL-WIC-2026-06-30 · propuesta de fases
Propuesta construida contra la guía canónica y su runbook, el log posterior al 26 de julio, el tablero, el panel (corte 3 sep) y la investigación de demanda de septiembre. Siete lectores independientes, tres planes con lentes distintas (guía primero, cifra primero, cerrable primero), nueve jueces y un crítico. Cada tarea trae owner, gate de la guía y la fuente del hecho que la justifica. Nada aquí es nuevo respecto a la guía: es su orden, actualizado con lo ya hecho.
Fase 1 · §0 / §4.1 / §4B / §8 / §11 (actualización formal exigida por L38 y L1161); §3 L243 (una sola arquitectura operativa); Fase 3 ledger (L743-761); Fase 5 registro (L862)
Que la guía canónica vuelva a describir el sitio real (PLAN L7 sigue en 2026-07-26; hoy 2026-09-04) con el orden que L38 exige: primero la decisión escrita de Iván sobre cada desviación viva, después la actualización formal. Desviaciones: /beaches/ top-level (contra L141/L356/L1203), /golf-courses/ como hub con /golf/→301 (contra L779), /tours-activities/ (post 5441) como hub de tours, /region/san-jose-del-cabo/ indexable (contra L852 y ESTADO L207), seis guías pasadas de noindex a index sin registro (contra L469), 11 fichas de tours vivas en /tour/{slug}/ (contra L343-347 y L371), hubs /beaches/ y /golf-courses/ con Article+ItemList en vez de CollectionPage (L267-274), y /port-status/ como posible URL en raíz (L470). Cerrar formalmente el runbook 07-12 y retomar el log.
Por qué ahora: Sin esta fase el resto se ordena contra un documento que prohíbe cosas ya en producción y llama LIVE a URLs que son 301. Verificado 2026-09-04 en 24 rutas nombradas por la guía o la investigación: 14 en 200 index (6 guías, /cabo-passport/, /restaurants/, /hotels/, /transportation/, /golf-courses/, /beaches/, /tours-activities/, /guides/), 4 en 301 (/golf/→/golf-courses/, /things-to-do/ y /things-to-do/beaches/→/beaches/, /tours/→/tours-activities/), 6 en 404 (/business/, /partners/, /nightlife/, /events/, /guides/where-to-stay-in-cabo/, /guides/best-beaches-in-cabo/). El log EXECUTION-LOG-CODEX.md se detuvo el 2026-08-08 (LOG L792), el runbook dice «Última edición 2026-07-12» (l.357) con IV.4 vencido (ventana 17-31 jul, l.239), y el HTML del plan se declaró desactualizado (L1161). Es una decisión de Iván y una sesión de Claude. · Depende de: Ninguna. Prerrequisito de las Fases 2-6 (fija destinos de CTAs, breadcrumbs, badges y el alcance de la migración).
| Tarea | Quién | Gate (guía) | Evidencia |
|---|---|---|---|
| Página de decisión en /partners-deck/ (patrón playas.html): para cada excepción, la regla de la guía que se enmienda y dos casillas (ratificar como excepción consciente / revertir por el procedimiento de migración §2.3). Ítems: (a) /beaches/ top-level; (b) /golf-courses/ hub y /golf/→301; (c) /tours-activities/; (d) /region/san-jose-del-cabo/ index (y su FAQPage contra L1117); (e) flip de las 6 guías a index — ratificar o devolver a noindex hasta fact-check 7.1; (f) las 11 fichas en /tour/{slug}/: migrar a /listing/ en la Fase 6 o ratificar temporalmente; (g) /port-status/ como URL en raíz (excepción L470, patrón /map/) o colgada de la guía de huracanes; (h) dónde vive el ledger de la Fase 3: se propone .claude/docs/LEDGER-EDITORIAL-WIC.md porque la guía no lo fija; (i) hub del breadcrumb por tipo (place→/restaurants/, beaches→/beaches/, tours→/tours-activities/; hotels se queda por decisión del 27-ago) para ~203 fichas y qué hacen las 30 sin hub.curl 2026-09-04 (24 URLs); MEM/project_hub_playas.md L8-29; MEM/project_auditoria_seo_golf_2026_08_21.md L8-12; DEPLOY-SJDC L1-33; ESTADO L101-110, L207; crawl-hoy-detail.json → paginas[].url (/tour/ 11 fichas, TouristTrip 16); crawl → /beaches/ y /golf-courses/ con Article+ItemList; MEM/project_breadcrumb_explore_noindex.md L8-25; SEO-HOT L47-48 | Iván | L38 (sin actualización formal la contradicción es histórica; la decisión precede al registro); L141/L356/L1203 (/beaches/); L779 (/golf/); L469 (guías noindex hasta aprobación explícita); L343-347 y L371 (/tour/ tipado); L470 (raíz solo con aprobación en ledger); L852 (adjuntos de zona); §3.1 L396 (semántica en breadcrumbs) | Decisión escrita por ítem, con fecha, registrada en la página y en el tablero /partners-deck/roadmap.html (bajando antes la copia viva, MEM/project_tablero_roadmap.md L11-21). |
| Con las decisiones: redactar la entrada 2026-09 en §0, §4.1, §4B y §11 del PLAN con solo hechos verificados (códigos HTTP y robots del curl, sitemap de 32 URLs), marcando como superado el texto obsoleto de L53, L182, L215-216, L260, L420, L904 sin borrarlo; añadir la fila de ledger retroactiva (nueve campos) para /beaches/, /golf-courses/ como hub, /tours-activities/ y /region/san-jose-del-cabo/; regenerar el HTML en /partners-deck/plan-seo-final.html (solo agregar, LOG L758-770); actualizar ESTADO-POR-FASES-WIC-2026-07-26.md con fecha nueva; cerrar formalmente el runbook 07-12 (pie l.357, IV.4 vencido, 8.3 review del 2026-08-11, W04 Tacos Gardenias, W05 Omakai, N05 diferido por 7.1, 10.6.a backlog) con una nota «cerrado 2026-09, lo abierto pasa a este plan».PLAN L7, L15, L38, L1161; ESTADO L28-40; RUNBOOK l.176, l.239, l.247, l.278, l.357; LOG L764-766 | Claude | L38 y L1161 (actualización formal + HTML regenerado); §3.0 L353 (no URL sin ledger, aquí retroactivo); runbook l.1-4 y l.18 (el PLAN solo se toca con decisión de Iván registrada; por eso esta tarea va después de la anterior); L1163-1167 (anexos) | Diff del PLAN con L7 en septiembre; ESTADO con fecha nueva; runbook con nota de cierre; HTML publicado; ledger creado con 4 filas retroactivas. |
| Si Iván ratifica el flip de las 6 guías: ejecutar el checklist 7.2/7.3 del runbook para las 6 (no solo aeropuerto): metaTitle de 2235 recortado, cards en el hub /guides/ (hoy 10: 9 al 22-jul + huracanes a mano), wic-internal-links extendido, sitemap, llms.txt regenerado, URL Inspection ×6 desde la cuenta wic-operador, smoke 27/27 por guía, flat viejas en 301 de un salto; buscar en Rank Math/BD la fecha real del flip y registrarla. Si lo revierte: volver a follow,noindex + self-canonical a mano (Rank Math no emite canonical en noindex, MEM/project_rankmath_noindex_sin_canonical.md L8-12) y sacarlas del sitemap.RUNBOOK l.159-164; PLAN L778 (9 cards) y MEM/project_pagina_huracanes.md L19-24 (tarjeta a mano); curl 2026-09-04 (6 guías index); contexto-sitio-2026-08-03/notas/05 L59-61 | Claude | Runbook l.161-162 (7.2 en un solo cambio el día del OK; 7.3 smoke 27/27); l.352-354 (NO EJECUTAR flip sin paquete atómico completo); §3.0 L352 (no noindex en sitemap); runbook l.13 (purge) | Tabla guía → fecha de flip → checks 7.2/7.3 PASS por cada una de las 6; curl con robots y canonical; page-sitemap.xml coherente. |
| Corregir el schema de los hubs ratificados: /beaches/ y /golf-courses/ pasan de Article+ItemList a CollectionPage+ItemList (guía = Article, hub = CollectionPage); /guides/ (hub, 422 palabras, sin BreadcrumbList) recibe BreadcrumbList; /region/san-jose-del-cabo/ conserva su FAQPage solo si las preguntas son reales (L1117) y se anota como excepción.crawl-hoy-detail.json → paginas[/beaches/, /golf-courses/, /guides/].schema; DEPLOY-SJDC L1-33 | Claude | §3.0 L267-274 (capas: hub CollectionPage/ItemList; guía Article/WebPage); §7 L1131 y L1133 (una sola fuente de schema); L1117 (no FAQPage por default) | JSON-LD extraído en render fresco (purge all + un miss) de los tres hubs con @type correcto; crawl del domingo siguiente sin «Sin BreadcrumbList» en /guides/. |
| Retomar EXECUTION-LOG-CODEX.md con una entrada de reconciliación 2026-09 que enlace la evidencia de agosto (playas 18-ago, transporte 21-24 ago, golf 21-22 ago, hoteles 26-27 ago, San José 27-ago, home 21-22 ago, salud 4-sep) con rutas absolutas a deploy/ y memorias; y registrar por escrito los DIFERIDOS con su razón: runbook 12.6/12.7/12.8 (Resources, Help Center, Blog: esperan estrategia de contenido, l.200); §4.2 guías with-a-view, fine-dining, japanese (L804-806: overlap sin medir); /guides/where-to-stay-in-cabo/ DEFER (L788) y /guides/best-beaches-in-cabo/ 404 (L802: primero ledger y diferenciación del hub); Palmilla 3D y pin del adapter 2.3.10 (§11 L1236-1246: decisión de Iván bloqueada desde 3-ago, gate L1091 independiente, no es SEO); Ruta A/B de Cabo Real; 56 hallazgos del mapa y 13 pines sin fuente (/map/ es frontera, fusión map-merge-2026-09-02 sin OK); clima por mes como UNA guía bajo /guides/ con ledger tras medir 28 días la de aeropuerto; página de ballenas y carta Happywhale/OBIS-SEAMAP (index.txt L582); feed JSON de la app con CORS abierto (project_investigacion_2026_09.md L21); Otterly (prueba gratuita, decisión de Iván); switch «sesiones por país» y HEALTHCHECKS_URL del panel (menores).LOG L792; RUNBOOK l.200; PLAN L788, L802, L804-806, L1091, L1236-1246; MEM/project_map_lote2_2026_09_04.md L40-42, L69-72; MEM/project_investigacion_2026_09.md L21, L38; MEM/project_panel_v2_lenguaje_ivan.md L52 | Claude | Runbook l.11 (evidencia siempre en el log); MEM/project_jerarquia_docs_seo_wic.md L11-17 (log bifurcado: unificar); §11 L1236-1246 (la reordenación de la prioridad inmediata se registra, no se silencia) | Entrada fechada en el log; lista de diferidos en el PLAN §11 con razón y dueño por ítem. |
Cifra del panel: Sitemap vivo: 32 URLs en page-sitemap.xml (curl 2026-09-04) contra 23 declaradas al 26-jul (ESTADO L34); 6 guías /guides/* en index hoy contra 6 en noindex al 26-jul; de las 24 rutas nombradas: 14 en 200, 4 en 301, 6 en 404; fichas en namespace tipado: 17 en /golf-courses/ + 11 en /tour/ (crawl-hoy-detail.json, corte 2026-09-03).
Se cierra cuando: Cada excepción con decisión escrita de Iván; PLAN L7 con fecha de septiembre y ESTADO/runbook cerrados; ledger creado con filas retroactivas; las 6 guías con 7.2/7.3 PASS o devueltas a noindex; hubs con CollectionPage; ninguna URL que la guía llame LIVE responde 301/404; log retomado; diferidos escritos con razón.
Fase 2 · Fase 0 (L530-597) y Fase 1B (L638-696); §3.5 (L522-524); runbook IV.1-IV.5, P.1, 12.4, 12.5; Fase 2 seguimiento (L707-726)
Que el tráfico tenga dónde convertir y cómo medirse: /business/ y /partners/ en 200 con destino real de leads, contrato GA4 v1 aprobado con sus 5 custom dimensions, correo del Passport confirmado en buzón real, GSC confirmado (Manual Actions/Security, disavow sin subir a ciegas), perfiles sociales reales para sameAs y el menú (items 400/402 en «#»), filtro de tráfico interno en GA4, par consulta→página en el panel y línea base oficial del 7-sep.
Por qué ahora: Es lo que el §10 mide (leads y eventos) y hoy vale cero por diseño: /business/ y /partners/ 404 (curl 2026-09-04), contrato GA4 «sigue abierto» (L49), recepción del Passport no confirmada (runbook l.128-129). Además, sin filtro GA4, 951 de las 975 sesiones de Arizona son pruebas propias (salud L33; MEMORY.md:71) y sin el par consulta→página no se sabe qué URL recibe «cabo transportation» (244 imps). El Bloque 1 lleva abierto desde el 16-jul (runbook IV.1-IV.5); aquí se pide en el orden de prioridad del runbook y Claude sigue con lo suyo aunque llegue a medias. · Depende de: Fase 1 (destinos canónicos). El Bloque 1 puede llegar a medias: Claude avanza con /business/ y /partners/ en draft, el par consulta→página y la línea base sin esperar.
| Tarea | Quién | Gate (guía) | Evidencia |
|---|---|---|---|
| Entregar el Bloque 1 en el orden del runbook, en una sola página de decisión: (1) SMTP de admin@whatsincabo.com configurado directamente en WP Mail SMTP o credenciales creadas en ~/.wic-secrets/ (nunca en chat) → cierra 4.6/4.7; (2) aprobar el contrato GA4 v1 (passport_cta_click, generate_lead, reservation_click, phone_click, external_website_click; dimensiones entity_id, vertical, zone, guide_slug, cta_location), crear las 5 dimensiones o dar acceso, y activar el filtro «Internal traffic» con IP 93.188.165.234 (2 min, no retroactivo); (3) captura de GSC (Manual Actions, Security Issues) y estado real del disavow v2 — NO se sube sin quitar domain:pages.dev y dominios legítimos (P.1); (4) URLs oficiales de Facebook/Instagram para sameAs y menú; (5) DMARC rua= en hPanel; (6) brief de contenido y buzón/CRM de leads para /business/ y /partners/.RUNBOOK l.80, l.128-129, l.147-155, l.236-241, l.289; H-PAUSA L41-52; ROADMAP L123-124; salud-2026-09-04.html L33, L38; PLAN L551-571, L667-694 | Iván | Fase 0 L538-546 (GSC y disavow antes de escalar); L571 (no emitir eventos sin contrato y dimensiones); Fase 1B L665 (SMTP y recepción real); L694 (contenido/destino de leads); runbook l.14 (gates = STOP), l.236-241 (prioridad IV.1 🥇 → IV.3 → IV.5), l.289 (disavow no a ciegas); regla de llaves (roadmap L128) | Correo del Passport recibido en buzón real con spf=pass dkim=pass (4.6/4.7); captura de GSC en el log; 5 dimensiones visibles en GA4 Admin; filtro activo con fecha (US-AZ cae a ~0 sesiones nuevas en 7 días); items 400/402 con href real; DMARC con rua=; brief fechado en /partners-deck/. |
| Construir /business/ («List your business on What's in Cabo»: beneficios, categorías, relación con claim listing, formulario sobre la infraestructura endurecida del Passport) y /partners/ (qué gana el partner, perks buscados, cómo funcionan los leads, formulario, vitrina SOLO con los logos ya autorizados en la franja del home wicptn01 — Cactus y VIVO fuera hasta que Isrrael confirme) como páginas en draft/noindex con fila de ledger (nueve campos) y los 13 gates del §7 (hero con derechos, width/height/srcset/alt, author, canonical self, sources, CTA vivo, smoke) y QA premium PASS (Lighthouse ≥90, LCP <2.5 s). Preview privado bajo /partners-deck/.PLAN L667-689, L776-777; RUNBOOK l.196-199; curl 2026-09-04 (/business/ y /partners/ 404); MEM/project_partners_franja_logos.md; ROADMAP L108-109, L137 | Claude | §7 gates 1-13 (L1099-1111) y L1121 (no publicar con CTA a 404); §3.0 L353 y Fase 3 L760 (sin ledger no se publica); §4.1 L777 (/partners/ requiere perks/logos aprobados); runbook l.184 (OK de contenido + QA premium), l.201 (footer solo al publicar) | Dos filas de ledger; preview publicado; smoke 200/canonical/robots noindex mientras es draft; reporte qa-premium. |
| Deploys separados, uno por sesión de cambio: (a) con contrato y dimensiones: mu-plugin wic-analytics-events.php con listeners delegados gtag, baseline GA4 congelado antes (6.7), verificación en DebugView con entity_id y cta_location; (b) con el OK de contenido y QA PASS: publicar /business/ y /partners/ en index,follow + sitemap; (c) conectar el menú 1147 «For Businesses» y el CTA del footer; purge tras cada uno.RUNBOOK l.149, l.154, l.198-201; PLAN L691-696 | Claude | Runbook l.10 (un cambio a la vez; nunca empaquetar fases distintas en un deploy), l.13 (purge); Fase 0 L584-591 (GA4 es el sistema; no audiencias por page_path; medir por entity_id L236); §3.0 L352 (no noindex en sitemap) | Tres entradas en el log con antes/después y rollback; eventos vistos en DebugView; curl 200 + robots index en ambas páginas; sitemap con las dos URLs; menú 1147 con href real. |
| Medir sin ruido: (a) clave NUEVA en el contrato del panel con el par consulta→página de GSC (dimensiones query+page) vía cuenta de servicio wic-operador, con backup del JSON previo y sin reusar claves; publicar las 12 consultas del topQ con su URL; (b) lámina de IA rotulada «referidos desde IAs», no «citas» (los datos históricos se publican tal cual; la corrección va en la fuente); (c) el lunes 8-sep leer y congelar en el tablero la línea base oficial del rastreo del 7-sep: los 11 tipos de problema de dash-live.json → issues (salud L5/L7 cuenta 12 porque su tabla incluye filas que el panel no lista como issue: comentarios sin moderar L18 y categorías sin fichas L19); (d) de paso: HEALTHCHECKS_URL y switch «sesiones por país» (menores).dash-live.json → topQ/topP (listas independientes, sin par), issues (11), ia_meta; salud-2026-09-04.html L5, L7, L18-19, L33, L37; MEM/project_panel_v2_lenguaje_ivan.md L42, L52, L54 | Claude | §7 gate 13 (L1111); regla «clave nueva para fuente nueva; cada cifra mide lo que dice su etiqueta» (MEM/project_regla_dato_real_panel.md L11-29); regla de salud L5 (no adelantar el rastreo del domingo); ROADMAP L89 (datos tal cual, corrección en la fuente) | dash-live.json con la clave nueva verificada contra la interfaz de GSC en 3 pares (Iván comparte captura); tarjeta «Línea base 7-sep» con los 11 valores; lámina de IA re-rotulada. |
Cifra del panel: Leads medidos: 0 (no existen los eventos, L571); /business/ y /partners/: 404 (curl 2026-09-04); GA4 28-jul→1-sep: 1,967 sesiones, de ellas US-AZ 975 (951 medidas como pruebas propias) y US-VA 171 (160) son arneses (salud L33); reviews: 0; comentarios: corte 3-sep 5 con 0 aprobados (dash-live.json → reviews); el 4-sep 4 se marcaron spam y queda 1 pendiente (Muller, salud L18); par consulta→página: no existe en el panel.
Se cierra cuando: Fase 1B cerrada según L691-696: correo del Passport recibido en buzón real; /business/ y /partners/ en 200 index con formulario que llega a un destino real y generate_lead visto en DebugView; ningún CTA Passport/Business a 404 o «#»; filtro GA4 activo; par consulta→página publicado; línea base del 7-sep congelada.
Fase 3 · Fase 1A (L601-634); §11 carril paralelo 1 (L1250); runbook P.2, P.3 (l.290-291)
Arrancar el carril que la guía llama «el cuello de botella real de un sitio DR0» (L48): tracker de outreach sobre las entidades contactables, badge «Featured on What's in Cabo», emails por segmento, ask legítimo de enlace a la ficha, citations locales/turismo y PR editorial local; GBP solo con elegibilidad presencial verificable. La parte de Claude arranca ya; los envíos los decide Iván.
Por qué ahora: Es la única fase que mueve backlinks legítimos y partners (§10 L1223-1230) y lleva desde el 26-jul al 5% sin una cifra (ESTADO L125-156; PLAN L1250 sin métricas). 604 de 1,100 consultas están en posición 51+ (dash-live.json → dist). El ask de la Fase 1A es un enlace a la ficha /listing/{slug}/{id}/ (L611), no a /business/: la preparación no depende de la Fase 2; sí conviene que /partners/ exista antes de prometer perks por escrito (L777). · Depende de: Fase 1 (URLs canónicas del badge). Parte de Claude independiente de la Fase 2; los envíos que prometan perks esperan /partners/ en 200. Medir backlinks depende de la decisión sobre Ahrefs.
| Tarea | Quién | Gate (guía) | Evidencia |
|---|---|---|---|
| Construir el tracker de outreach con las 209 entidades contactables (268 publicadas menos las 59 playas, que son lugares sin contacto comercial): restaurantes 100, hoteles 35, golf 18, tours 16, eventos 12, transporte 10, yates 10, fotógrafos 7, tour operators 1; columnas: ficha, contacto oficial de EMPRESA (sin datos de persona física, LFPDPPP), segmento, impresiones/posición de su consulta según el par consulta→página, estado, fecha, resultado. Vive fuera de public_html (~/wic-tmp/ o hoja privada); en /partners-deck/ solo un resumen con conteos. Badge SVG/PNG con enlace a la ficha canónica en /listing/: golf (18) y los 11 tours en /tour/ se excluyen del badge hasta la Fase 6 (su URL sería 301). Plantillas por segmento con el ask legítimo. Lista de citations locales/turismo con NAP consistente. Nota de elegibilidad GBP sí/no con el criterio de Google citado. Nada se envía.PLAN L609-627, L1250; dash-live.json → verticales; RUNBOOK l.291 | Claude | Fase 1A L611 y L622-626 (enlace a su ficha, sin anchor manipulado, sin compra, sin perk obligatorio; GBP solo con elegibilidad); §9 L1209-1211; §3.0 L344 (URL tipada = 301); regla LFPDPPP (MEM/project_investigacion_2026_09.md L35); regla de la biblioteca (MEM/feedback_biblioteca_herramientas_regla.md L8-12) | Tracker con 209 filas y cero enviados; badge en /partners-deck/herramientas/ («ya está en la biblioteca»); plantillas y lista de citations publicadas para revisión; nota GBP en el tablero. |
| Una sola página de decisión: (a) segmento inicial y aprobación de plantillas; (b) resolver la contradicción briefing-Luis vs plan (runbook P.3) y nombrar quién envía («Iván + Luis/Sales», L604); (c) confirmación de Isrrael sobre Cactus y VIVO para que /partners/ y el badge solo muestren logos autorizados; (d) subir el plan de Ahrefs o descartarlo por escrito (API 403 «Insufficient plan», P.2) para poder medir backlinks.PLAN L604, L629-634, L777; RUNBOOK l.226, l.290-291; ROADMAP L108-109; MEM/project_partners_franja_logos.md | Iván+ventas | Fase 1A L604 (owner), L629-634 (criterio 60 días: 20-40 negocios contactados); L777 (logos aprobados); runbook l.290-291; Fase 0 L587 (Ahrefs es espejo, no reemplazo) | Decisión escrita; lista de logos autorizados; nombre del responsable de envíos; decisión sobre Ahrefs en el tablero. |
| Enviar los primeros 20-40 contactos con la plantilla aprobada, empezando por los negocios cuyas fichas ya reciben impresiones o clics (Harry's 430 imps; Nemi La Paz; Cabo T&T; Danys; Airport Cabo Limo; las 10 empresas del hub /transportation/); registrar respuesta, enlace obtenido (verificado con curl) y perk firmado; PR editorial local con la guía de huracanes y el panel como piezas (dato propio).PLAN L609-634; dash-live.json → topP, topQ; salud-2026-09-04.html L29 | Iván+ventas | Fase 1A L611-627 (tareas 3-7); criterio L629-634; §2.5 L235 (relaciones reales); §10 L1223-1230 | Tracker con 20-40 filas «enviado» con fecha; primer backlink legítimo con URL de origen verificada; primer perk en /partners/; primeras impresiones no-marca nuevas en el par consulta→página. |
Cifra del panel: Backlinks legítimos: sin medición (Ahrefs API 403 «Insufficient plan», runbook l.290; frescura.psi/appstore/otterly = null); negocios contactados: 0 registrados (ESTADO L125-156); GSC 85 días: 49 clics, 12,559 imps, CTR 0.39, posición 37.2; 604 de 1,100 consultas en posición 51+ (dash-live.json → gsc, dist); sesiones desde IAs: 8 de 1,967 (ChatGPT 7, Claude 1).
Se cierra cuando: A 60 días (L629-634): 20-40 negocios contactados con fecha; al menos un partner/perk firmado y un backlink legítimo verificado; primeras impresiones no-marca registradas. No se cuenta por páginas (L1213). La parte de Claude (tracker, badge, plantillas, citations, GBP) cierra en una sesión.
Fase 4 · Fase 4 (L765-769) sobre nodos existentes; §4.1 L785 (validar BOFU y aprobar flip); §3.3 L466-469 (no mover; gate de Iván); §7 gates 1-13; §8 L1189-1191 (investigación y escritura separadas); Fase 3 ledger
Convertir las 840 impresiones sin clic de las cinco consultas de transporte y las 903 preguntas de r/cabo sobre llegadas a SJD en una página que responda lo que se pregunta (Uber en llegadas con fecha y fuente, tarifa de taxi autorizado y shuttle, semáforo fiscal, tramo aduana→banqueta si Iván lo aprueba, eSIM), sin crear URL nueva y con el fact-check de Iván antes de publicar; dar a /hotels/ (940 imps, pos 55.7) un snippet al ángulo de «los cabos resorts»; y arrancar la capa de frescura (Apuesta 1) como piloto en 10 restaurantes.
Por qué ahora: Doble evidencia: panel (topQ: «cabo transportation» 244 imps pos 45.9, «cabo transportation services» 171/43.2, «cabo transfers» 167/44.3, «cabo limo» 132/28.8, «best group transportation in los cabos» 126/34.2; todas 0 clics) e investigación (#1 en títulos, 444; la guía hoy tiene 0 «uber», 0 «taxi», 0 «timeshare», 1 «customs», curl 2026-09-04). Cumple L1099 sin URL nueva. /hotels/ es la página con más impresiones del sitio y ninguna fase la tocaba. La frescura es la apuesta #1 de la investigación (44 posts «¿sigue abierto?») y solo tiene skill en restaurantes. · Depende de: Fase 2 (par consulta→página; eventos GA4 para medir external_website_click/phone_click desde la guía). Independiente de la Fase 3.
| Tarea | Quién | Gate (guía) | Evidencia |
|---|---|---|---|
| Con el par consulta→página de la Fase 2: informe de qué URL recibe cada una de las 5 consultas de transporte y «los cabos resorts»; revisar la canibalización /transportation/ vs guía de aeropuerto y /restaurants/ vs /best-restaurants-in-cabo/ que el handoff pedía vigilar; escribir el ledger de dos nodos (hub: «transportation/transfers/limo/group», intent comparar; guía: «uber/taxi/customs SJD», intent llegada), una consulta → una sola URL.dash-live.json → topQ/topP; H-PAUSA L71-76; salud-2026-09-04.html L26 | Claude | Fase 3 L743-761 (ledger); §3.3 L473-480 (hub ≠ guía); §7 gate 1 (L1099); H-PAUSA L71-76 (vigilancia pedida y no hecha) | Tabla consulta→página para las 12 del topQ; dos filas de ledger; nota de canibalización con decisión. |
| Package de reescritura de /guides/cabo-airport-transportation/ (read-only, con fuente y fecha por afirmación: estado de Uber en llegadas SJD, tarifas oficiales, norma de Aduanas, eSIM; el bloque aduana→banqueta/timeshare en sección separable); propuesta de title/description del hub /transportation/ (70 → 58 caracteres) y de /hotels/ contra «los cabos resorts»; propuesta de campo «última verificación» + estado abierto/cerrado con data-* y rama en el JS corrector. Nada se publica en esta tarea.investigacion-2026-09 §2 fila 2 (index.txt L152-157), §4 Apuesta 1-2 (L507-519); curl 2026-09-04 de la guía; SEO-HOT L50-66; salud-2026-09-04.html L26, L41 | Claude | §8 L1189-1191 (package con fuentes, el skill aplica lo aprobado); runbook l.51 (cero datos inventados: sin fuente se omite); L1117 (no FAQPage como palanca); regla de frescura (index.txt L513: sin responsable con nombre no se pone fecha) | Package congelado publicado bajo /partners-deck/ con cada fuente enlazada; propuestas de snippets con conteo de caracteres. |
| Una sola página de decisión (gate 7.1): (a) fact-check y aprobación editorial del package de la guía; (b) sí/no al bloque de timeshare («shark tank», 72 posts); (c) título de /transportation/ y snippet de /hotels/; (d) nombre del responsable de la capa de frescura y cadencia (60-90 días volátil); sin nombre, el piloto se aplaza por escrito.RUNBOOK l.160, l.237; PLAN L469, L785; investigacion-2026-09 §4 (index.txt L513, L519) | Iván | Runbook l.14 (gates = STOP) y l.160 (gate 7.1: revisión editorial + fact-check); §3.3 L469; §4.1 L785; index.txt L519 («eso lo decide Iván») y L513 | Cuatro casillas marcadas con fecha en la página y el tablero. |
| Con el OK: aplicar con wic-vertical-guide v0.7.0 la reescritura en la misma URL (canonical, robots y sitemap intactos; sources visibles; author; fecha de verificación con responsable nombrado); un deploy aparte para los snippets de /transportation/ y /hotels/; enlaces internos hub↔guía↔10 fichas con anchor natural; enlazar la guía de huracanes desde /hotels/ y las fichas de yates (no hay fichas de pesca; /los-cabos-fishing-zones/ es Elementor); URL Inspection ×3; leer posición y clics de las 5 consultas a 14 y 28 días sin prometer resultado.PLAN L447-449, L1097-1124; ROADMAP L179; MEM/project_estado_puerto_semar.md L11-21; dash-live.json → topQ | Claude | §7 gates 1-13 (L1099-1111); §3.3 L466 (no cambiar URL); runbook l.10 (un cambio por deploy); §9 L1211 (anchors no manipulados); L1124 (no prometer rankings); Fase 2 L726 (a la guía de huracanes solo se le añaden enlaces hacia ella) | Smoke 27/27 del skill; HTML servido con «uber/taxi/customs» >0 y fuentes enlazadas; curl con robots index y canonical intacta; serie por consulta a 0/14/28 días en el tablero; inlinks a la guía de huracanes +≥3. |
| Piloto de frescura en 10 restaurantes (única vertical con skill que valida el campo; Ola 1 dice «empezando por restaurantes»): Harry's 2126, Nemi La Paz, Casa de Brasa 4137, Lorenzillos 3931 y 6 más elegidos por el par consulta→página; campo meta de última verificación + estado, render visible con data-* y JS corrector, probado con payload falso extremo vía Playwright con GA bloqueado; smoke de wic-restaurant-listing por ficha. Eventos, transporte y el resto esperan al ciclo siguiente con mu-plugin propio y smoke propio (no hay skill).investigacion-2026-09 §5 Ola 1 (index.txt L543-544); dash-live.json → topP, ia_paginas; PLAN L1183-1189 | Claude | §2.5 L234 (nada se escala sin gates); §8 L1183-1189 (skills como fuente operativa: solo restaurantes, actividades, guías, golf); MEM/project_regla_congelamiento_cache.md L8-14; MEMORY.md:15 (bloquear GA en arneses); index.txt L543-544 (Ola 1) | 10 fichas con fecha visible y responsable; captura del payload falso corregido; entrada en el log; CTR de esas 10 vs resto a 28 días. |
Cifra del panel: Cinco consultas de transporte: 840 impresiones, 0 clics, posiciones 28.8-45.9 (dash-live.json → topQ, corte GSC 2026-09-01); /guides/cabo-airport-transportation/: 200 index, 1,296 palabras, 0 «uber», 0 «taxi», 1 «customs» (crawl-hoy-detail.json; curl 2026-09-04); /hotels/: 940 imps, pos 55.7, 2 clics; «los cabos resorts» 141 imps pos 50.7; /listing/harrys/2126/: 430 imps pos 10.5.
Se cierra cuando: Guía reescrita con fact-check de Iván, fuentes visibles y smoke PASS en su misma URL; snippets aplicados; a 28 días clic o mejora de posición medida en ≥3 de las 5 consultas de transporte y en «los cabos resorts» (gate 13, L1111); piloto de frescura vivo en 10 restaurantes o aplazado por escrito. La publicación no cuenta como éxito (L1213).
Fase 5 · Fase 2 seguimiento (L707-733); §7 CWV (L1135-1141), gates 4-5 y 10 (L1102-1103, L1108); Fase 4.1 drafts (L796, L817); runbook P3 (l.177, l.182), l.97; Ola 0 de la investigación (index.txt L535-540)
Cerrar lo que el rastreo del domingo seguirá marcando y los incumplimientos de derechos vivos: 59 playas y /cabo-passport/ fuera de caché, og:image de 6 fichas (verificado el 4-sep tras la purga: las 6 ya la llevan, 3 con la imagen por defecto 5615 y 3 con foto propia; cerrado), alt de 16 fichas de tours, atribución CC BY de Open-Meteo (home y huracanes), permisos de Instagram, crédito CC BY de Playa del Divorcio, 5 playas con foto de otra playa, dos defectos visuales de sitio entero, deuda transversal de rendimiento, publicación de /port-status/ si se ratificó, el boletín NHC que se congela el 1-dic, y los 14 borradores si Iván entrega fotos y USD.
Por qué ahora: No mueve el §10 por sí misma pero protege lo que sí lo mueve: derechos (runbook l.97: fotos solo oficiales), CWV (§7 L1135-1141) y la página mejor posicionada del sitio (huracanes: 221 imps, pos 9.4) que mentiría cinco meses tras el 1-dic. Crawl del 3-sep: 60 páginas «sin-encabezado» de caché (avg 3,397 ms; 56 de ellas >1.5 s) = 59 playas + /cabo-passport/ (903 ms); 52 «miss» (50 restaurantes + /map/ + cabo-adventures). Verificado 2026-09-04: /cabo-passport/ y /listing/medano-beach/2490/ responden ambas con `x-litespeed-cache-control: no-cache`. Open-Meteo: home 0 apariciones, huracanes texto sin <a> (curl 2026-09-04). El calentador del 4-sep no cura páginas excluidas de caché. · Depende de: Fase 1 (ratificación de /port-status/ y del hub del breadcrumb). Fase 2 (línea base del 7-sep para medir el delta). Codex para el motor de playas. Las fotos, permisos y USD solo los da Iván.
| Tarea | Quién | Gate (guía) | Evidencia |
|---|---|---|---|
| Caché: (a) Codex, en su carril del motor wic-beach-conditions.php, inventaría qué dato vivo queda en la ficha de playa (temperatura, UV), lo pasa a data-* con rama en el JS corrector, prueba con payload falso extremo y retira wic_bct_disable_full_page_cache() de las 59 fichas; Claude verifica en render fresco que ninguna playa emite veredicto diario ni «Estimated rip current risk» y resuelve la contradicción tablero (54 fichas) vs memoria (60); (b) Claude averigua por qué /cabo-passport/ sale con no-cache (probable exclusión por formulario/nonce), decide con la regla del congelamiento si se cachea con corrector o queda excluido a propósito, y lo registra; comprueba que el weekly report incluye /cabo-passport/ y las seis /region/ en el warm-up (runbook P3).crawl-hoy-detail.json → paginas[].cache/.ms; curl -D 2026-09-04 (/cabo-passport/, /listing/medano-beach/2490/); MEM/project_candado_playas.md L12-14; ROADMAP L68; salud-2026-09-04.html L11 | Codex (motor de playas) + Claude (verificación y Passport) | CANDADO playas (MEM/project_candado_playas.md L10-22; HANDOFF-CODEX-PLAYAS L61-67: el motor es carril de Codex); REGLA lo cacheado se congela (MEM/project_regla_congelamiento_cache.md L8-14); runbook l.12-13 (backup, purge), l.177 y l.182 (P3); salud L5 (no adelantar el rastreo) | Cabeceras de 59 playas y /cabo-passport/ en render fresco; captura del payload falso corregido; rastreo del domingo 14-sep con las playas en hit y «Respuesta lenta» comparada contra la línea base del 7-sep separando miss (calentador) de sin-encabezado (esta tarea) para no atribuir mérito ajeno. |
| Derechos y atribución: (a) <a href="https://open-meteo.com/">Weather data by Open-Meteo.com</a> junto a cada dato en /guides/los-cabos-hurricane-season/ (única edición de una guía viva: se registra como excepción a L726 por licencia CC BY) y en el widget de clima; para el home, Claude construye el widget Elementor WIC y lo coloca el socio/Iván (regla del home); (b) crédito visible CC BY 2.0 de Playa del Divorcio (adjunto 5510, Adamina) en /beaches/; (c) og:image propia (foto de su galería con derechos) para las 6 fichas que el crawl del 3-sep marcó «Sin imagen para redes» (ocean-safari/1936, our-tribe-photos/3281, izrael-reyna-photography/3310, paco-and-aga/3388, playa-el-cajoncito/2764, cabo-adventures/797); ese crawl es anterior a que salud del 4-sep fijara el adjunto 5615 como default y salud solo comprobó /disclaimer/, /beaches/ y /los-cabos-fishing-zones/: comprobar tras purge; (d) registrar en el tablero la pregunta de los 29 USD/mes de Open-Meteo Standard y la llave a ~/.wic-secrets/.curl 2026-09-04 (home 0; huracanes 1 texto, 0 <a>); MEM/project_openmeteo_licencia_comercial.md L11-17; crawl-hoy-detail.json → «Sin imagen para redes»; salud-2026-09-04.html L13; MEM/project_hub_playas.md L71-79 | Claude (construye) + socio/Iván (coloca el widget en el home) | CC BY (index.txt L535-536); runbook l.18 y CLAUDE.md global (home = widgets Elementor WIC); MEM/project_hub_playas.md L71-79 (crédito visible); runbook l.97 (fotos oficiales); §7 gate 10 (L1108); MEM/project_regla_congelamiento_cache.md | curl de huracanes y del home con ≥1 <a …open-meteo.com…>; captura del widget PC+tablet+móvil (verificación visual doble); crédito visible en /beaches/; og:image ≠ 5615 en las 6 fichas tras purge. |
| Una sola página de decisión de higiene: (1) reseña real de Muller sobre Harry's (aprobar, responder o esperar; nunca borrar; con n=1 no hay aggregateRating); (2) 1 foto oficial por cada una de las 14 fichas en borrador (Restaurant 6, Tours 7, Yacht 1) y precio USD del operador para Juan More 5141/5147 — antes, Claude verifica en BD el conteo real de fotos porque el runbook registra Cabo Luxury Yachts 4382, Los Claros 2135 y María Corona 3969 ya con 6; (3) 5 playas con foto de OTRA playa: quién aporta la foto real o se retira la ajena (regla: retirar antes que conservar foto de otro sitio); (4) permisos escritos de las cuentas de Instagram en los 5 muros (playas, hoteles, golf, transporte, San José); (5) /hotels/: azulejo 5 render CGI, azulejo 9 sin resolución, muro que repite 2 hoteles (PEND-HOT L28-48); (6) /tours-activities/: copy de la intro y destino de los 2 topónimos sin enlace (PEND-TOURS L30-40).salud-2026-09-04.html L18, L39-40; dash-live.json → verticales; RUNBOOK l.215, l.269-270; MEM/project_map_lote2_2026_09_04.md L69-72; ROADMAP L56; PEND-HOT L28-48; PEND-TOURS L30-40; MEM/project_toponimos_sembrados.md L14 | Iván | §7 L1115-1116 y salud L18 (reseña real: ni se inventa ni se borra); Fase 4.1 L796, L817 (cero drafts sin aprobación; USD primero, MEM/project_tours_explore L32-40); runbook l.97 y l.172 (fotos oficiales; retirar media ajena); MEM/project_hub_playas.md L40-42 y PEND-HOT L43-45 (permisos IG) | Decisiones escritas; 14 adjuntos {slug}-*.ext con procedencia; _starting-from en USD; lista de permisos IG recibidos; fotos de playa corregidas o retiradas. |
| Con lo que Iván entregue: regenerar los flip-packs (los del 17-jul cubrían 10 tours + 6 restaurantes, no el yate; hoy son 7+6+1) y publicar por lote con smoke por ficha (wic-restaurant-listing / wic-activity-listing) en /listing/{slug}/{id}/, nunca en /tour/; alt derivado del título/caption real del adjunto en la función que renderiza para las 16 fichas de tours y los hubs, EXCEPTO /map/ (solo vía build-map-page.py) y /golf-courses/ (coordinación con el equipo de golf); sitemap: sacar /about/ (responde 301: L345/L352) y confirmar /listings/ en noindex tras caducar la caché; las 4 legales responden 200 e indexables, así que L352 no aplica: se evalúan bajo L724 («internas sin valor») con decisión documentada; eventos: localizar las 2 fichas Event que verticales cuenta (12) y el crawl no (10), comprobar qué devuelven hoy /restaurant/nemi-la-paz/ y /event/san-jose-del-cabo-art-walk-2026/ (2 clics cada una, fuera del crawl; Art Walk 3784 sigue la regla P.6: noindex hasta calendario verificable) y revisar el 404 Monitor tras los 235 redirects.RUNBOOK l.222, l.227, l.231; dash-live.json → verticales (Events 12), topP; crawl-hoy-detail.json → Event 10, alt vacío 27, /about/; curl 2026-09-04 page-sitemap.xml | Claude | §7 gates 2-13 (L1100-1111); §3.0 L343-345 (ficha nueva en /listing/; vieja 301 de un salto, nunca en sitemap; no noindex en sitemap L352); Fase 2 L722-726, L731 (sin pérdida de URLs con impresiones); runbook l.10, l.294 (P.6); MEM/project_mapa_3d_living_map.md L29 (/map/ solo con build); H-PAUSA L71-76, L81 | Smoke PASS por ficha publicada; page-sitemap.xml sin /about/; curl -I de las dos URLs con Location a /listing/; export del 404 Monitor con conteo; rastreo del 14-sep con tours 16→0 alt vacío. |
| Sitio entero y fechas límite: (a) buscador del header que se sale bajo 396 px y pie que choca entre 768-880 px (verificación visual doble); (b) baseline de la deuda transversal (41 CSS bloqueantes, 27 scripts sin defer, 676 KB de fuentes con Inter bajada dos veces) y primer recorte: fuentes duplicadas y defer selectivo, con JS Defer de LiteSpeed OFF (rompía Vue/MyListing); conectar PSI/CrUX al panel (frescura.psi = null) etiquetando «sin CrUX» donde no haya field data; (c) antes del 1-dic: la guía de huracanes debe mostrar «boletín fuera de temporada, última emisión <fecha>» cuando el NHC congele su boletín del 1-dic al 15-may, con data-* y JS corrector; (d) si Iván ratificó /port-status/ en la Fase 1: publicarlo con ledger, rotulado «unofficial English summary», citando a SEMAR con hora y enlace, enlazado desde huracanes y fichas de yates; Claude redacta y Iván envía la consulta escrita a meteorologia@semar.gob.mx sobre sindicar a terceros (la republicación en el sitio propio está respaldada; la sindicación no).ROADMAP L142, L113-114; PEND-HOT L52-56; H-PAUSA L66; RUNBOOK l.256; dash-live.json → frescura; MEM/project_estado_puerto_semar.md L11-21; MEM/project_investigacion_2026_09.md L33; curl 2026-09-04 (/port-status/ 404) | Claude (Iván envía el correo a SEMAR) | §7 CWV L1135-1141; runbook l.256 (JS Defer OFF); MEM/feedback_verificacion_visual_doble.md L11-14; regla del congelamiento; Fase 3 L743-761 y L470 (ledger + excepción en raíz); index.txt L560, L572 (SEMAR: republicar sí, espejar/sindicar no; «unofficial English summary»); ROADMAP L113-114 (NHC) | Capturas antes/después en 18 anchos; frescura.psi con fecha; tarjeta NHC con owner y fecha en el tablero y prueba con payload «fuera de temporada»; /port-status/ 200 index con ledger y sello de hora cambiando entre dos misses; correo a SEMAR enviado con fecha. |
Cifra del panel: Crawl 2026-09-03: 107 páginas >1.5 s (50 restaurantes miss avg 3,471 ms + 56 playas + cabo-adventures); 60 «sin-encabezado» (59 playas + /cabo-passport/ a 903 ms, avg 3,397 ms); panel dice 160 (corrida 31-ago); 16/16 fichas de tours con alt vacío; 605 de 5,288 imágenes con alt vacío; 6 fichas sin og:image propia en el crawl del 3-sep; borradores 14; frescura.psi = null; atribución Open-Meteo: home 0, huracanes 0 <a> (curl 2026-09-04). Cifra oficial de cierre: rastreo del domingo, no se adelanta.
Se cierra cuando: Rastreo del 14-sep: playas y (si se decidió) /cabo-passport/ en hit; tours con 0 alt vacío; atribución CC BY visible en huracanes, widget y home; permisos IG y fotos de playa resueltos o retirados; 14 borradores publicados o rechazados con razón; sitemap sin /about/; 404 Monitor en cero nuevos; tarjeta NHC con dueño y fecha; /port-status/ publicado o diferido por escrito.
Fase 6 · Fase 5 (L860-1031) como procedimiento reutilizable; §3.1 L368-374; §2.3 L198-208; Gate 11.2 plantilla (L948-962); §9.1 (L1199); §11 carril 8 (L1257); Fase 6 L1091 (no mezclar con Palmilla 3D)
Completar la arquitectura de fichas (L343: /listing/ es la forma canónica) con el procedimiento completo: auditoría, pre-flight de enlaces sobre todas las fuentes, backup, mapa congelado, canary de 5 fichas, 2-4 semanas de observación y NUEVO go/no-go de Iván antes de cualquier lote. Alcance: 17 fichas en /golf-courses/{slug}/ (Costa Palmas ya vive en /listing/costa-palmas-golf-club/3232/) y 11 fichas TouristTrip en /tour/{slug}/ que la guía daba por retiradas. El breadcrumb de golf ya no es problema: desde el 22-ago wic-golf-hub-unify.php cuelga las 18 fichas de /golf-courses/ (verificado 2026-09-04 en Palmilla y Cabo Real: Home → Golf Courses → ficha); queda solo la migración de URL.
Por qué ahora: Es el carril 8 del §11 (L1257) y el primer NO del §9 (L1199: migrar sin pre-flight, backup, mapa congelado, verificación y rollback). Va al final porque no mueve la métrica norte por sí misma, pero debe cerrarse antes de repartir badges y enlaces externos a URLs que luego serían 301 permanentes (L344): por eso golf y los tours en /tour/ quedaron fuera del badge en la Fase 3. Esta fase NO cabe en una sesión: son al menos tres (auditoría, canary, lote) y dos gates de Iván separados por 2-4 semanas (L964-1031, L1009); aquí se programa la auditoría y el canary; el lote es el ciclo siguiente. · Depende de: Fase 1 (ratificación de /golf-courses/ y /tours-activities/ como hubs; decisión sobre /tour/). Coordinación con el equipo de golf. Bloquea el badge de la Fase 3 para golf y tours en /tour/ hasta que migren.
| Tarea | Quién | Gate (guía) | Evidencia |
|---|---|---|---|
| Auditoría previa de las 28 fichas (17 golf seleccionadas por _case27_listing_type, no por ruta; 11 tours en /tour/): rewrite rules, get_permalink(), sitemap Rank Math, schema @id/url, breadcrumbs, related links, colisiones de post_name, quién emite el redirect actual, y por qué los 11 tours nacieron en /tour/ tras una migración 105/105 PASS (¿publicados después del 26-jul sin _wic_neutral_url?). Mu-plugins con rutas hardcodeadas: el runbook l.284 habla de «3 mu-plugins con URLs tipadas hardcodeadas» sin nombrarlos; el crítico verificó por ssh el 2026-09-04 que wic-golf-hub-unify.php tiene 18 coincidencias literales de /golf-courses/ o /golf/ y wic-golf-seo-fix.php 5 (regex ~^/golf-courses/?$~ en L112) — la auditoría lo confirma y busca el tercero. Inventario de las 6 fichas con .html estático inyectado (buffer completo, prioridad -2000). Pre-flight de enlaces absolutos y relativos en mu-plugins, plugins, tema padre e hijo, post_content, _elementor_data y metas de schema. Mapa viejo/nuevo congelado (28 filas) con hash; backup mysqldump --no-tablespaces fuera de public_html.PLAN L913-927, L198-208, L371; RUNBOOK l.284; verificación ssh del crítico 2026-09-04 (unify 18, seo-fix 5, L112); MEM/project_donde_vive_html_fichas_golf.md L8-14; MEM/project_auditoria_seo_golf_2026_08_21.md L16-20; crawl-hoy-detail.json → /tour/ 11 | Claude | Fase 5.2 L913-927 (11 puntos de auditoría); §2.3 L198-208 (pre-flight completo); §3.1 L374; runbook l.12 (backup), l.284 (3 mu-plugins) | Informe de auditoría publicado bajo /partners-deck/ con conteo de enlaces por fuente, lista de mu-plugins con rutas literales (archivo y línea), mapa 28×2 con hash, backup fechado, explicación del origen de los 11 /tour/. |
| Una sola decisión: go / no-go / go parcial (solo tours) al canary, coordinado con el equipo de golf (la guía dice que otro equipo trabaja esa vertical); Palmilla 3D, el pin del adapter 2.3.10 y la Ruta A/B de Cabo Real NO se mezclan (decisiones aparte, diferidas en la Fase 1).PLAN L27, L1029, L1091, L952; H-PAUSA L79-83; H-PALM-31 L14-16 | Iván | Fase 5.6 L1029 (gate humano separado + actualización explícita del plan); Fase 6 L1091 (migración /listing/ independiente del piloto del skill); H-PAUSA L81 (golf exige coordinación); gate 11.2 L952-962 (aprobación humana) | OK escrito en el log con fecha, alcance (28 / solo 11) y nombre del contacto del equipo de golf. |
| Canary de 5 fichas de bajo riesgo (3 golf sin módulo 3D + 2 tours en /tour/) con flag _wic_neutral_url por ficha y los 11 checks (vieja 301 directa, nueva 200, self-canonical, og:url, schema @id/url, breadcrumb Golf/Tours → hub, sitemap nueva sí/vieja no, internal links, 0 cadenas, GSC sin errores nuevos, rollback probado), purge all, y 2-4 semanas de observación con 404 Monitor y GSC; al final, informe para el segundo go/no-go. El lote de las 23 restantes (dejando las 6 con .html estático al final) y la actualización del PLAN a «N/N en /listing/» son el ciclo siguiente, tras ese segundo OK.PLAN L964-1031, L17-18 (mecanismo probado 22 días); GATE-11.2-EVIDENCIA-CANARY-LISTING-2026-07-25.md (anexo, L1163) | Claude | Fase 5.4 L964-996 (canary 5-10 fichas, 11 checks, backup); L1009 («tras canary: si pasa 2-4 semanas → nuevo go/no-go de Iván para lotes»); Fase 5.6 L1018-1030; §3.0 L344-345; runbook l.13 (purge); MEM/project_map_litespeed_cache.md L11-15 (purge url no purga) | Tabla 5×11 checks PASS en el log; sitemap sin las 5 viejas; 404 Monitor sin nuevos 404 a 14 días; informe de canary fechado para el segundo gate. |
Cifra del panel: Fichas en namespace tipado hoy: 17 /golf-courses/ + 11 /tour/ = 28 de 266 fichas rastreadas (crawl-hoy-detail.json, corte 2026-09-03); 18 páginas con schema GolfCourse (17 + costa-palmas en /listing/); breadcrumb de golf: Home → Golf Courses → ficha en Palmilla y Cabo Real (curl 2026-09-04); /golf-courses/cabo-real-golf-club/ recibe 2 de las 8 sesiones desde IA (dash-live.json → ia_paginas). Esta cifra no es métrica norte (L1213); la fase se justifica por L344 (cada enlace externo a URL tipada sería un 301).
Se cierra cuando: Auditoría publicada; go/no-go registrado; canary 5/5 con 11/11 PASS y 2-4 semanas sin errores nuevos en GSC ni 404; informe listo para el segundo gate. El lote completo, el sitemap sin URLs viejas y la actualización del PLAN a la cifra real cierran en el ciclo siguiente, no en esta fase.
| Qué | Por qué | Regla |
|---|---|---|
| Publicar 12 páginas /guides/cabo-weather-in-<mes>/ o una /cabo-weather-by-month/ en raíz, o cualquier lote de páginas por batch (42 de restaurantes, 27 de tours) | La guía prohíbe medir el éxito por páginas publicadas, clonar páginas por combinación y escalar indexación programática sin gates; una guía nueva va bajo /guides/{slug}/ con ledger de nueve campos. Search Console SÍ está conectado (BigQuery desde 07-26, 1,100 consultas): lo que falta es volumen para consultas donde el sitio no aparece (Keyword Planner), y Autocomplete es ranking, no volumen. La vía permitida es UNA guía bajo /guides/ con ledger, diferida hasta medir 28 días la de aeropuerto (registrado en Fase 1). | PLAN L142-144 (§2.2), L234 (§2.5), L353, L743-761, L1201, L1204, L1213; dash-live.json → serie (fuente 'bq' desde 07-26); investigacion-2026-09 §2 (index.txt L138) |
| Comprar enlaces, usar PBNs o pactar «perk a cambio de link» para acelerar la Fase 1A | Tres NO explícitos del §9 y la regla de oro: la autoridad se construye con relaciones reales; el ask legítimo es un enlace a su ficha sin anchor manipulado y sin intercambio obligatorio. | PLAN L1209-1211 (§9.11-9.13), L1120 (§7), L235 (§2.5), L622-626 (Fase 1A) |
| Importar reseñas de Google/TripAdvisor o emitir aggregateRating (incluida Harry's con una sola reseña real) para tapar el «0 reviews» del panel | Regla dura del §7 y NO 14/15: no aggregateRating falso ni reviews importadas como propias; ratings externos solo como badge atribuido; una reseña real ni se inventa ni se borra. | PLAN L1115-1116, L1132, L1212, L146; salud-2026-09-04.html L18; dash-live.json → reviews |
| Redactar FAQ para las 55 fichas sin FAQ (golf 16, eventos 12, transporte 10, yates 9, fotógrafos 7, 1 operador) como palanca SEO o «rich result» | §7: no FAQPage por default; según el plan (L1117) Google dejó de mostrar FAQ rich results en mayo de 2026 y retiró la documentación en junio (afirmación del plan, sin URL verificada en el paquete); FAQs visibles solo con datos reales de cada ficha, sin inventar una pregunta; es proyecto editorial que decide Iván, no SEO. | PLAN L1117 (§7); salud-2026-09-04.html L25, L42 |
| Promover a index las 19 categorías vacías, /listings/, /explore/?type= o cualquier taxonomía con 0-2 fichas para «llenar el índice» o «atrapar» las consultas de transporte | NO 10/15; términos con 0-2 fichas o solo grid van a NOINDEX/MERGE; los parámetros de /explore/ no son landings; promover vía wic_ih_exempt() es STOP; la consulta se atiende desde el hub /transportation/ existente. | PLAN L1208, L505-510, L494-495, L354, L1118; RUNBOOK l.112, l.142; dash-live.json → cats (19 de 65) |
| Construir /nightlife/ o /events/ ahora porque dan 404, ni weddings/bachelorette sin inventario | NO 9/15 y Fase 4B.4: sin ledger y ≥6 fichas reales no se publica indexable; nightlife tiene 2 fichas claras. /nightlife/ y /events/ son los únicos 404 medidos de ese grupo (2026-09-04); /events/ no es hub de la guía (los ocho hubs están en L398-411), es el catálogo #10 de la investigación; /weddings/ no se midió. | PLAN L1207, L856, L1119, L808-817, L398-411; curl 2026-09-04 (/nightlife/, /events/ 404); investigacion-2026-09 §3 fila 10 (index.txt L364-369) |
| Migrar las 17 fichas de golf o las 11 de /tour/ «rápido» con el mu-plugin probado, encadenar canary y lote en la misma sesión, o mezclarlo con la activación de Palmilla 3D | NO 1/15 aplica ahora a golf; tras el canary pasan 2-4 semanas y hay nuevo go/no-go humano; la migración /listing/ es gate independiente del piloto del skill de golf; el gate 11.2 es plantilla obligatoria. | PLAN L1199, L374, L964-1031, L1009, L1029, L1091, L952 |
| Mover las 4 guías en raíz (/best-restaurants-in-cabo/, /best-tacos-in-cabo-san-lucas/, /best-seafood-in-cabo/, /best-romantic-restaurants-in-cabo/) a /guides/, crear sus duplicados bajo /guides/, o mover /guides/cabo-airport-transportation/ a otra URL | NO 2/15 y §3.3: no mover guías actuales ni cambiar URLs por estética; crear su gemela canibaliza; el BreadcrumbList ya se les añadió en su URL (wic-breadcrumb-schema-pages.php). | PLAN L1200, L451-458, L466, L138; salud-2026-09-04.html L14 |
| Crear /attractions/{slug}/{id}/, /place/ o cualquier segundo namespace de fichas, o dejar que los borradores se publiquen en /tour/ | NO 4/15 y regla dura §3.0: una entidad = una ficha canónica en /listing/{slug}/{id}/; la semántica vive en schema, taxonomías, hubs y breadcrumbs; hoy ya hay 11 fichas en /tour/ que hay que migrar, no sumar más. | PLAN L1202, L355, L343-347, L378-396, L897-902; crawl-hoy-detail.json → /tour/ 11 |
| Emitir eventos GA4 antes de que Iván apruebe el contrato v1 y existan las cinco custom dimensions; construir audiencias por page_path; crear otra propiedad GA4 | Fase 0: no emitir hasta aprobación y dimensiones; la medición se ancla a entidades, no a paths. | PLAN L571, L584-591, L236; RUNBOOK l.147-149 |
| Publicar un veredicto diario propio de nadabilidad por playa (o reactivar wic_bct_estimated_rip_risk), o insinuar alianza con ZOFEMAT | Candado vigente: sin veredicto diario hasta validar ≥15 días contra ZOFEMAT en Palmilla/Chileno/Médano/Migriño; el motor marcaba High en 25 de 39 playas y «No swimming» en 49 de 60 fichas en verano. Solo clasificación aprobada 20/33/6 + «check the posted flags»; republicar la bandera oficial como cita (con hora y enlace) es decisión de Iván aparte; citar a ZOFEMAT, nunca «en alianza con». | MEMORY.md (CANDADO playas); HANDOFF-CODEX-PLAYAS-2026-08-06.md L24-67; MEM/project_mapa_3d_living_map.md L32; investigacion-2026-09 §6 (index.txt L574) |
| Comprar Otterly (o cualquier herramienta AEO) como palanca de ranking, crear páginas/«chunks» para IAs, prometer citas de asistentes, o tratar llms.txt como gate | §7: no hacks AEO/GEO; llms.txt opcional, no señal de ranking; no prometer rankings ni citas. Hoy las IAs traen 8 de 1,967 sesiones; si entra Otterly es Standard anual ($160/mes) tras prueba gratuita conectada al panel, decisión de Iván. | PLAN L1122-1124, L1111; dash-live.json → ia_meta; otterly-2026-09-03 (otterly.txt L88-95); MEM/project_otterly_decision.md L15-19 |
| Editar post_content o _elementor_data del home para meter la atribución de Open-Meteo, el badge, el alt o cualquier arreglo detectado en «/» | Regla del socio: el home nunca se edita; todo entra como widget Elementor WIC (colocado por el socio/Iván) o vestido por clase body desde mu-plugin. | RUNBOOK l.18; CLAUDE.md global; H-PAUSA L83; MEM/project_home_lanzamiento_paridad.md L18 |
| Publicar los 14 borradores bajando el gate a 5 fotos, rellenando con stock, o convirtiendo MXN a USD por cuenta propia | Fase 4.1: cero publicación de drafts sin aprobación; gate de 6 fotos oficiales; sin precio USD del operador la ficha no se publica; fotos solo de fuentes oficiales, prohibido stock/TripAdvisor/Google. | PLAN L796, L817; RUNBOOK l.51, l.97; MEM/project_tours_explore_2026_08_13.md L32-40 |
| Empaquetar tareas de fases distintas en un solo deploy (analytics + publicación + menú; migración + breadcrumb; snippets + reescritura), o tocar /map/ fuera de build-map-page.py, o el motor de playas fuera del carril de Codex | Runbook: un cambio a la vez, verificado y registrado antes del siguiente, con backup y purge; /map/ solo se reconstruye con build-map-page.py con guardia de linaje (la regresión del 19-ago vino de saltárselo); wic-beach-conditions.php es carril de Codex. | RUNBOOK l.10-13; MEM/project_mapa_3d_living_map.md L29; MEM/project_map_regresion_base_vieja.md L29-32; HANDOFF-CODEX-PLAYAS L61-67 |
| Construir más hubs /region/{zona}/ indexables o liberar los 6 slugs de zona antes de la enmienda de L843-852, ni usar /los-cabos/ como prefijo | El plan fija /{zona}/ como hub cross-vertical con ledger y aprobación para renombrar los 6 adjuntos; /region/san-jose-del-cabo/ es una excepción que la Fase 1 ratifica o revierte, no un patrón; whatsincabo.com ya implica Los Cabos. | PLAN L843-852, L337-339, L278-294; ESTADO L207; DEPLOY-SJDC L1-33 |
| Adelantar o relanzar el rastreo del panel para «ver ya» la mejora de caché, filtrar del panel las sesiones históricas de Arizona, o pegar llaves/credenciales en el chat | La cifra oficial la mide el rastreo del domingo; adelantarlo daría mérito falso. Los datos se publican tal cual y la corrección va en la fuente (arneses bloqueados, filtro GA4). Las llaves se crean en el servidor (~/.wic-secrets/, WP Mail SMTP), nunca en chat. | salud-2026-09-04.html L5, L33; ROADMAP L89, L128; MEM/project_regla_dato_real_panel.md L11-29; index.txt L539 |
Ranking de los tres planes (media de tres jueces sobre 10): guia-primero 7.0 (violaciones 21, errores de hecho 18) · cerrable-primero 6.9 (violaciones 17, errores de hecho 19) · cifra-primero 6.7 (violaciones 23, errores de hecho 19). Crítico final: con reparos — Sin violaciones de §3/§7/§9: ninguna URL nueva sin ledger, ningún hub thin, no FAQPage por default, no aggregateRating, canary+2-4 semanas+segundo go/no-go, golf/home//map/ respetados como fronteras, la enmienda del PLAN va después de la decisión de Iván (L38) y la única edición de una guía viva (atribución CC BY) se declara como excepción registrada. Cada fase trae owner, gate con línea, evidencia y cifra de hoy; los owners débiles («ventas», «equipo de golf») están declarados en supuestos. Todas las cifras, URLs y estados cotejados salen del paquete salvo las siete señaladas en errores; de esas, la más seria es la del breadcrumb «Restaurants» en golf, que ya no es cierta (verificado en vivo el 2026-09-04 en Palmilla y Cabo Real y en wic-golf-hub-unify.php L4) y que el plan repite dos veces como estado actual. No apruebo porque la regla es «sin errores»; todos son correcciones de redacción o de rotulado de fecha (≤1 sesión) y los faltantes son menores o diferibles con una línea cada uno. Con esas correcciones y con los diferidos nombrados (fotos de otra playa, /cabo-passport/ sin caché, ESTADO/runbook, 7.2 de las 5 guías restantes) el plan queda aprobable..
Tablero: roadmap · Evidencia de hoy: salud-2026-09-04 · Panel: seo-geo-cockpit.pages.dev