# Auditoría SEO Unificada — fibrolab.cl (v3 — 2026-04-28) > Re-auditoría con 8 subagentes especializados (Technical, Content/E-E-A-T, Schema, Sitemap, Performance, GEO, Local, Visual). Compara contra `seo-audit-2026-04-27-v2.md` (v1 día anterior). Auditoría hecha sobre **el sitio LIVE en producción** y cruzada con el árbol de archivos local que tiene cambios SIN DESPLEGAR. --- ## Puntaje de Salud SEO: **61 / 100** | Categoría | Peso | v3 | v2 | Δ | Ponderado | |---|---|---|---|---|---| | SEO Técnico | 22% | 64 | 68 | −4 | 14.08 | | Contenido / E-E-A-T | 23% | 59 | 54 | +5 | 13.57 | | SEO On-Page (visual+local+sitemap) | 20% | 55 | 65 | −10\* | 11.00 | | Datos Estructurados (Schema) | 10% | 71 | 68 | +3 | 7.10 | | Rendimiento (CWV) | 10% | 58 | 60 | −2 | 5.80 | | Búsqueda con IA (GEO) | 10% | 70 | 67 | +3 | 7.00 | | Imágenes | 5% | 50 | 45 | +5 | 2.50 | | **Total** | | | | | **61.05** | \* La caída de "On-Page" refleja un desglose más granular esta vez: visual=62, local=44, sitemap=72. En v2 era un único score consolidado. **Hallazgo central:** el equipo hizo cambios significativos en disco (functions.php +622 líneas, single-product.php reescrito, front-page.php 45 líneas, page-bombas/bordes/cobertor) pero **ninguno está desplegado a producción**. El score real al deploy + 3 fixes de panel (Rank Math/LiteSpeed) sería ~75/100. **Tipo de negocio:** Negocio local híbrido — fábrica (Los Álamos 2538, La Pintana, RM) + área de servicio nacional. Vertical: construcción (HomeAndConstructionBusiness + LocalBusiness). RUT 77.424.952-4. Fundada 2020. --- ## Δ Verificado vs v2 (2026-04-27) ### ✅ Resuelto en LIVE | Issue v2 | Estado v3 | |---|---| | `/spa-y-jacuzzi/` competía con `/spas/` (C3) | **PARCIAL**: `/spa-y-jacuzzi/` → 301 → `/jacuzzi/`. Ya no es duplicado. PERO `/spas/` sigue 200 con canonical self → conflicto migrado a `/spas/` vs `/jacuzzi/` (ambos 200, ambos en sitemap). Sin redirect canónico. | | `/tienda2/` indexable (C2) | **PARCIAL**: ahora 301 → `/piscinas-de-fibra/`. Eliminado de `page-sitemap.xml`. Sigue presente en `product-sitemap.xml` como primera entrada. | | Author enumeration (M2) | **PARCIAL**: robots.txt bloquea `/?author=` y `/author/`. El 301 va al home sin exponer username. Falta el filtro PHP. | ### 🔄 Aún OPEN en LIVE (verificado nuevamente) | Issue | Estado | |---|---| | C1 — Swiper render-blocking en `` | **OPEN**. En LIVE: `'; ``` ### H7. Rank Math `Article` en páginas comerciales 6 páginas comerciales (`/spas/`, `/jacuzzi/`, `/bombas-de-calor/`, `/bordes-de-piscina/`, `/paneles-solares/`, `/nosotros/`) emiten `@type: Article`. Misrepresenta el propósito. **Cómo:** En cada página, Rank Math → Schema → cambiar a `WebPage`/`CollectionPage`. O filtro: ```php add_filter( 'rank_math/json_ld', function( $data, $jsonld ) { if ( is_page( ['spas','jacuzzi','bombas-de-calor','bordes-de-piscina','paneles-solares','nosotros'] ) ) { unset( $data['richSnippet'] ); } return $data; }, 99, 2 ); ``` ### H8. Testimonios fuera de contexto en `/jacuzzi/` (H8 v2 agravado) Testimonio de Katherine Meller habla de "bomba de calor" en página de jacuzzi. Isabela Mora menciona "borde atérmico" en página de jacuzzi. Patrón QRG Sept 2025 = manipulativo. **Cómo:** Anclar cada testimonio a su servicio. Añadir fecha + comuna + foto verificable. Mínimo 3 testimonios contextuales por página, no boilerplate rotado. ### H9. `/paneles-solares/` afirmación sin fuente "hasta 90%" "Reduce hasta un 90% tu cuenta de electricidad" sin referencia técnica, sin perfil del cliente. Sin certificación SEC visible. Recomendación "Off Grid es la mejor opción" sin criterio. Riesgo de contenido oportunista fuera del core business. **Cómo:** Citar fuente (CNE / Fraunhofer / SEC), agregar disclaimer "depende del consumo y radiación zonal", y aclarar el partner instalador SEC si existe. ### H10. `/revestimiento-super-brite/` thin (601 palabras) sin H1 **Hallazgo nuevo.** La primera sección es un H2; sin diferenciador vs fibra de vidrio, sin precios m², sin proceso. Genérico. **Cómo:** Añadir H1, expandir a 800+ palabras con tabla comparativa Super Brite vs fibra de vidrio, costo por m² orientativo, fotos del proceso. ### H11. 0 service-area pages publicadas + local-sitemap solo con KML (H10 v2) `local-sitemap.xml` solo apunta a `locations.kml`. Cero comunas. `template-comuna.php` listo. Es la mayor brecha local. **Cómo:** Lanzar 4 comunas iniciales del Gran Santiago (Maipú, Puente Alto, La Florida, San Bernardo) usando `template-comuna.php`, cada una con 1 testimonio real + `fl_comuna_distancia_km`. Después: Las Condes, Viña del Mar, Quilpué, Rancagua. **No superar 15 sin instalación citable por ciudad.** ### H12. Sin proceso de captación de Google Reviews (H9 v2) Sin shortlink GBP en flujo post-venta. La regla 18-day de Sterling Sky implica caída en local pack si pasan >3 semanas sin nueva review. **Cómo:** En `fl-reviews.php`, tras WC order completed + 7 días, añadir email/WhatsApp con `https://g.page/r/XXXXX/review`. Meta: 2+ reviews/mes. --- ## 🟡 MEDIO ### M1. Redirect /tienda2/ apunta a `/piscinas-de-fibra/` (semánticamente incorrecto) Debería redirigir a `/tienda/` (shop archive real) o recibir noindex + canonical. ### M2. Sin hreflang `es-CL` ni `x-default` Sitio nacional chileno sin geotargeting explícito. Solo `og:locale=es_CL`. ```html ``` ### M3. Sin `Vary: Accept-Encoding` en headers LiteSpeed → Cache → Browser Cache → activar Vary, o `.htaccess`: ``` Header append Vary Accept-Encoding ``` ### M4. `priceRange "$$"` poco informativo (M15 v2) Cambiar a "Desde CLP 1.790.000" o rango explícito CLP. ### M5. NAP inconsistente: 3 variantes de name `` home: "Fabrica de Piscinas FIBROLAB". Schema/footer: "Fibrolab". Añadir `alternateName` en schema: ```json "name": "Fibrolab", "alternateName": "Fábrica de Piscinas Fibrolab" ``` ### M6. Schema LocalBusiness incompleto: faltan `taxID`, `founder`, `hasMap` RUT 77.424.952-4 solo en footer HTML, no en JSON-LD. Sin `hasMap` (URL GBP). Sin nombre del fundador. ### M7. sameAs: ausente GBP, YouTube, LinkedIn, Wikidata (M4 v2) Correlación YouTube ↔ citaciones AI ~0.737. Crear canal con 3 videos + perfil LinkedIn corporativo. ### M8. llms.txt con 2 URLs en 301 (M6 v2 parcial) - `/spa-y-jacuzzi/` → reemplazar por `/jacuzzi/` - `/cobertor-de-seguridad/` → reemplazar por `/modelo/cobertor-de-seguridad-para-piscinas/` o eliminar - Añadir dirección completa "Los Álamos 2538, La Pintana, RM" (hoy truncada). ### M9. Sin `dateModified` (M9 v2) Bajo expectativas freshness Dec 2025, páginas con precios lucen estáticas. ### M10. Embed Google Maps ausente (M13 v2) CSP ya permite `frame-src google.com`. Añadir iframe en footer/`/contacto/`. ### M11. Boilerplate garantías idéntico home/nosotros (M11 v2) 3 cards de garantía verbatim entre `front-page.php:302-318` y `page-nosotros.php:167-191`. ### M12. `/reparacion/` redacción circular AI-generated (M10 v2) "Muchas veces la suerte no se encuentra de nuestro lado..." → reescribir con plazos, materiales, precios orientativos. ### M13. `/spas/` sin H1 propio + sin diferenciador técnico Empieza con "SPA Hot Tub" sin explicar diferencia. Sin specs jets/litros/potencia. ### M14. `/instrucciones-de-uso/` (410 palabras) — solo enlace a PDF Inserir contenido del manual como HTML inline (filtrado, química, mantenimiento semanal) para indexación. ### M15. `post-sitemap.xml` estancado 17 meses Lastmod 2024-11-17. Reactivar blog (1 post/mes en temporada): "precio piscina fibra Chile 2026", "mantenimiento invierno", comparativas Aquark. ### M16. `product_cat-sitemap.xml` solo 1 URL Solo `/producto/minipiscina/`. Faltan categorías esperadas (piscinas, bombas, spas, cobertores). Revisar visibilidad de catálogo en WooCommerce. ### M17. `local-sitemap.xml` indexa `locations.kml` no páginas Si no hay comunas publicadas, desactivar el sub-sitemap en Rank Math hasta tenerlas. ### M18. IndexNow ausente (M3 v2) `/indexnow.txt` 404. Instalar Bing URL Submissions Plugin o hook `transition_post_status`. ### M19. Author entity = "Admin" en `/nosotros/` JSON-LD emite `"name":"Admin"` como Person. Para AI E-E-A-T, "Admin" no aporta credibilidad. Cambiar display name del usuario WP a nombre real del responsable. ### M20. `/financiamiento-salvum/` no identifica operador en H1 Salvum (operado por Forum Servicios Financieros S.A.) — la CMF exige identificar al acreedor en prominencia. H1 actual: "Financiamiento de hasta el 100%". --- ## 🟢 BAJO | ID | Hallazgo | Fix | |---|---|---| | L1 | `X-XSS-Protection: 1; mode=block` obsoleto | Eliminar header en LiteSpeed/Apache | | L2 | PDF de manual link no-www (`page-instrucciones-de-uso.php:41`) | Añadir `www.` | | L3 | Inconsistencia formato teléfono (`+56 9 8225 6792` vs `+56982256792`) | Estandarizar | | L4 | `data-counter="6"` (años experiencia) hardcoded en `page-nosotros.php:63` | `<?php echo date('Y') - 2020; ?>` | | L5 | `paneles-solares-familia-1024x683.png` apariencia stock-photo | Verificar / reemplazar | | L6 | RSS feed link en `<head>` con post sitemap stale | Decidir si publicar blog o `remove_action('wp_head','feed_links',2)` | | L7 | 64 imágenes sin WebP/AVIF | Activar LiteSpeed Image Optimization | | L8 | `<noscript>` opacity hack WC | Default WC, no SEO issue | | L9 | WhatsApp bubble z-index check en mobile | Testear superposición con CTAs | | L10 | `/nosotros/` H1 genérico ("Nosotros") | Cambiar a "Fábrica chilena de piscinas de fibra de vidrio" | --- ## Inventario Schema (LIVE — actualizado v3) | Página | @types live | Service | FAQPage | Notas | |---|---|---|---|---| | `/` | LocalBusiness, HomeAndConstructionBusiness, WebSite, WebPage, ImageObject | n/a | n/a | OK, sameAs incompleto | | `/piscinas-de-fibra/` | Article, Service, FAQPage, BreadcrumbList | ✅ | ✅ | Article a remover | | `/bombas-de-calor/` | Article, Service, FAQPage, BreadcrumbList | ✅ | ⚠️ 4/5 Q-A | Article a remover | | `/spas/` | Article, FAQPage, BreadcrumbList | ❌ | ✅ | Article + Service faltantes | | `/jacuzzi/` | Article, Service, FAQPage, BreadcrumbList | ✅ | ✅ | Article a remover | | `/bordes-de-piscina/` | Article, BreadcrumbList | ❌ | ❌ | + Article a remover | | `/cobertor-de-seguridad/` | (301 → producto) | n/a | n/a | Redirige a producto WC | | `/paneles-solares/` | Article, FAQPage, BreadcrumbList | ❌ | ✅ | Article + Service faltantes | | `/nosotros/` | Article, BreadcrumbList | n/a | n/a | + AboutPage a añadir | | `/producto/minipiscina/` | CollectionPage, BreadcrumbList | n/a | n/a | **Sin Product schema** | --- ## Inventario Sitemap (v3) | Sub-sitemap | URLs | Δ vs v2 | Issues | |---|---|---|---| | `page-sitemap.xml` | 12 | −1 | `/tienda2/` removido ✅; `/spas/` y `/jacuzzi/` ambos presentes | | `product-sitemap.xml` | 30 | 0 | Primera entrada sigue `/tienda2/` ❌ | | `product_cat-sitemap.xml` | 1 | 0 | Solo `/producto/minipiscina/` | | `post-sitemap.xml` | 6 | 0 | Lastmod 2024-11-17 (stale) | | `local-sitemap.xml` | 1 (KML) | 0 | Sin páginas reales | --- ## Plan de acción priorizado ### Hoy / 1 día — Deploy + 3 ajustes de panel (impacto +12-14 puntos de score) 1. **Deploy del árbol local** (`functions.php`, `front-page.php`, `single-product.php`, `page-bombas-de-calor.php`, `page-bordes-de-piscina.php`, `page-cobertor-de-seguridad.php`, `assets/`) — resuelve H2/C4/C5/H5(parcial)/M5(parcial). 2. **Rank Math → Titles & Meta → Home description**: cambiar "10 años" por "desde 2020". (C1) 3. **Rank Math → Sitemap → Excluir `/tienda2/`** del product-sitemap. (H4) 4. **LiteSpeed Cache → JS Settings**: validar que Swiper no se fuerce al head; añadir `defer` por filtro PHP. (C2) ### 1 semana — Críticos restantes + altos 5. 301 `/spas/` → `/jacuzzi/`. (C3) 6. `noindex` en `is_paged()`. (C6) 7. Eliminar `ChatGPT-Image-*.png` y reemplazar fotos. (C7) 8. Filtro Rank Math para suprimir `Article` en páginas comerciales. (H7) 9. Optimizar PNG hero a AVIF + WebP (eliminar fallback PNG 1.75 MB). (H2) 10. Investigar `Cache-Control: no-store` en productos. (H3) 11. Añadir `FAQPage` JSON-LD a `/bordes-de-piscina/`. (H6) 12. Anclar testimonios al servicio correcto (eliminar Katherine Meller / Isabela Mora de `/jacuzzi/`). (H8) 13. Añadir disclaimer / fuente al "90%" de `/paneles-solares/`. (H9) ### 1 mes — Altos restantes + medios 14. Publicar 4 service-area pages: Maipú, Puente Alto, La Florida, San Bernardo. (H11) 15. Implementar shortlink GBP en flujo post-venta. (H12) 16. Pattern `media="print" onload` para fonts/FA. (H1) 17. Expandir `/nosotros/` con fundador, RUT inline, anécdota 2020, certificaciones. Añadir `AboutPage` schema + `Organization.taxID/founder`. (M6) 18. Añadir GBP/YouTube/LinkedIn a `sameAs`. Crear canal YouTube con 3 videos. (M7) 19. Embed Google Maps en footer. (M10) 20. Reescribir `/reparacion/` y `/spas/` con specs reales. (M12, M13) 21. Inline contenido del manual en `/instrucciones-de-uso/`. (M14) 22. Añadir hreflang `es-CL` + `x-default`. (M2) 23. Corregir 2 URLs en llms.txt + dirección completa. (M8) 24. Implementar IndexNow. (M18) 25. Reactivar blog: 1 post/mes en temporada. (M15) 26. Cambiar author entity de "Admin" a nombre real. (M19) ### Tracking - Re-auditar en 2 semanas (post-deploy). - Configurar Google API key (CrUX/PSI/GSC) para field data: `python3 /root/.claude/skills/seo/scripts/google_auth.py`. --- ## Limitaciones del reporte - Sin field data CrUX/PSI ni GSC (sin credenciales Google API). Estimaciones de Performance son lab-equivalent. - GBP live: sin acceso a panel; CID, categoría primary, conteo de reviews y posición en map pack no verificables sin DataForSEO o Search Console. - Citation audit (amarillas.cl, Houzz, MercadoLibre Chile) no verificado en vivo. - `aggregateRating` real de WooCommerce no accesible sin BD. - Pin GBP vs entrada física de fábrica no verificado en Street View.