whatsincabo · guía canónica PLAN-SEO-FINAL-WIC-2026-06-30 · propuesta de fases

Qué sigue, por 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.

6
fases · una sesión cada una
25
tareas con owner y gate
7
decisiones o acciones de Iván
17
cosas que la guía prohíbe y no se harán
Tesis del orden. Todo lo técnico sin gate está cerrado desde julio (runbook l.272) y en agosto el sitio construyó mucho más de lo que la guía registra (hubs /beaches/, /golf-courses/, /tours-activities/, /region/san-jose-del-cabo/, seis guías liberadas, /map/, huracanes), pero la métrica norte sigue en cero medible: /business/ y /partners/ dan 404 (curl 2026-09-04), el contrato GA4 v1 no está aprobado (PLAN L49, L571), la recepción del correo del Passport nunca se confirmó en buzón real (runbook l.128-129: E2E 2/2 PASS, wp_mail=accepted, sin inbox), la Fase 1A sigue al 5% sin un negocio contactado registrado (ESTADO L125-156) y el sitio suma 49 clics en 85 días con 963 de 1,100 consultas en posición >20 (dash-live.json → gsc, dist). El orden es: (1) poner la guía al día con decisión de Iván ANTES de la enmienda (L38), porque fija qué URLs son destino de CTAs, breadcrumbs, badges y outreach; (2) abrir los rails que el §10 mide (leads y eventos) y medir sin ruido (filtro GA4, par consulta→página); (3) arrancar la Fase 1A, que es el único carril que mueve partners y backlinks y cuya parte de Claude no depende de nada (el ask es un enlace a la ficha, L611); (4) responder la demanda #1 que GSC ya enseña (transporte: 840 impresiones, 0 clics) reescribiendo una guía existente con gate 7.1 de Iván, más el piloto de frescura en restaurantes; (5) higiene, derechos y fechas límite (caché de playas y Passport, og:image, Open-Meteo CC BY, NHC 1-dic, /port-status/); y (6) al final la deuda de migración (17 golf + 11 tours en /tour/) con auditoría y canary de 2-4 semanas, porque no mueve el §10 por sí misma pero debe cerrarse antes de repartir badges a URLs que luego serían 301 (L344). Cada fase es una sesión de Claude más una página de decisión de Iván; lo que no cabe se difiere por escrito, no se calla.

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)

Fase 1 — Poner la guía al día: Iván decide las excepciones, luego Claude enmienda PLAN, ESTADO, runbook y log

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).

TareaQuiénGate (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-48IvánL38 (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-766ClaudeL38 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-61ClaudeRunbook 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-33Claude§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 L52ClaudeRunbook 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)

Fase 2 — Rails de medición y conversión: Bloque 1 de Iván, /business/ y /partners/ fuera del 404, medir sin ruido

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.

TareaQuiénGate (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-694IvánFase 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, L137Claude§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-696ClaudeRunbook 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, L54Claude§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)

Fase 3 — Fase 1A: autoridad orgánica legítima (tracker, badge, plantillas, citations, PR local)

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.

TareaQuiénGate (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.291ClaudeFase 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.mdIván+ventasFase 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 L29Iván+ventasFase 1A L611-627 (tareas 3-7); criterio L629-634; §2.5 L235 (relaciones reales); §10 L1223-1230Tracker 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

Fase 4 — Responder la demanda #1 que GSC enseña: guía de aeropuerto con gate 7.1, hub /transportation/, /hotels/ y piloto de frescura en restaurantes

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.

TareaQuiénGate (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 L26ClaudeFase 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, L41Claude§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ánRunbook 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 L513Cuatro 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 → topQClaude§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-1189Claude§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)

Fase 5 — Higiene, derechos y fechas límite: caché de playas y Passport, og:image, alt, Open-Meteo CC BY, /port-status/, NHC 1-dic, borradores y fotos

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.

TareaQuiénGate (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 L11Codex (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-79Claude (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.mdcurl 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 L14Ivá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.xmlClaude§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, L81Smoke 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)

Fase 6 — Cerrar la deuda de migración: auditoría y canary de golf (17) y tours en /tour/ (11) con la plantilla del gate 11.2

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.

TareaQuiénGate (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/ 11ClaudeFase 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-16IvánFase 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)ClaudeFase 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.

Lo que NO se hace, y por qué

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 1ATres 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 panelRegla 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 transporteNO 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 inventarioNO 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 3DNO 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 URLNO 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 GA4Fase 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 ZOFEMATCandado 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 propiaFase 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 CodexRunbook: 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 prefijoEl 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 chatLa 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

Supuestos y contradicciones entre fuentes

Cómo se construyó

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..

Fuentes leídas y huecos declarados

Tablero: roadmap · Evidencia de hoy: salud-2026-09-04 · Panel: seo-geo-cockpit.pages.dev