# Auditoría SEO — fibrolab.cl **Fecha:** 2026-04-29 **URL:** https://www.fibrolab.cl/ **Tipo de negocio:** Local Service / Manufacturer híbrido (fábrica de piscinas de fibra de vidrio + instalación nacional) **Stack:** WordPress + WooCommerce + Rank Math + LiteSpeed Cache + GTM (GTM-W6DGGKK) + PixelYourSite **Idioma:** es-CL **NAP:** Fibrolab · Los Álamos 2538, La Pintana, Región Metropolitana · +56 9 8225 6792 · RUT 77.424.952-4 --- ## SEO Health Score — 68 / 100 | Categoría | Peso | Score | Ponderado | |---|---:|---:|---:| | Technical SEO | 22% | 74 | 16.28 | | Content Quality / E-E-A-T | 23% | 61 | 14.03 | | On-Page SEO | 20% | 70 | 14.00 | | Schema / Datos estructurados | 10% | 78 | 7.80 | | Performance (CWV) | 10% | 60 | 6.00 | | AI Search Readiness (GEO) | 10% | 61 | 6.10 | | Imágenes | 5% | 75 | 3.75 | | **Total** | | | **~68** | **Local SEO Score (informativo, fuera de la fórmula):** 61 / 100 — debilidad principal: ausencia de embed de Google Maps y `sameAs` apuntando al GBP. --- ## Plan de acción priorizado ### CRÍTICO (esta semana) 1. **Garantía contradictoria 5 años vs 1 año** — Home/Nosotros declaran "Garantía 5 años" mientras `/reparacion/` dice "Garantía 1 año". Bajo Ley 19.496 esto es ambiguo legalmente y el QRG de Google lo penaliza como inconsistencia de Trustworthiness. Aclarar alcance: 5 años estructural de fabricación / 1 año servicio de reparación. 2. **FAQ de `/reparacion/` con contenido genérico** — Las 4 respuestas (~280 palabras totales, mínimo recomendado 800) contienen frases auto-referenciales sin información técnica ("Fibrolab hace las cosas bien y por consiguiente vale totalmente la pena"). Marcador clásico QRG Sept-2025 de "unhelpful content". Reescribir con proceso real: inspección, marca de gel coat, tiempo de cura, plazo de llenado. 3. **Sin referencia a Sernac / derechos del consumidor** — Requisito legal en Chile para venta a consumidor sobre $100K CLP y gap de Trustworthiness. 4. **`@id` LocalBusiness vs Organization desincronizados** — Rank Math emite `Organization @id=#organization` y el tema emite `LocalBusiness @id=#localbusiness`. Google los trata como entidades distintas. Fix: filtro `rank_math/json_ld` para alinear el `@id`. 5. **IndexNow no configurado** — Rank Math Pro lo soporta nativo; archivo de verificación devuelve 404. Configurar en Rank Math → General → IndexNow para notificación automática a Bing/Yandex. ### ALTO (2 semanas) 6. **jQuery 3.7.1 sin defer en ``** — Render-blocking confirmado (`functions.php:175`). Único impacto más alto en LCP móvil. Excluir de defer LiteSpeed solo si rompe; alternativa: cargar en footer. 7. **CSS crítico no inlineado** — `fibrolab.css` 271 KB, 11.047 líneas, blockea el render. Inline ~4 KB ATF en `wp_head` priority 1 + diferir el resto. Estimado: −800 ms a −1.4 s en LCP móvil. 8. **3 familias Google Fonts (Montserrat + Nunito + Poppins)** — Poppins solo se usa en precios ATB; quitar y self-host Montserrat + Nunito (WOFF2 subset latin). Estimado: −400 ms en FCP móvil. 9. **5 nodos `Service` con `image` vacío** — `page-reparacion`, `page-jacuzzi`, `page-spas`, `page-revestimiento-super-brite`, `page-cobertor-de-seguridad` quedan sin imagen en el JSON-LD. Cargar URLs reales en el array `$services` de `fibrolab_schema_service()`. 10. **Sin embed de Google Maps en sitio** — Cero `iframe` de Maps en cualquier template. Es el signal de GBP más alto y ausente. Embed mínimo en `/contacto/` y `/nosotros/`. 11. **Página `/nosotros/` sin equipo nombrado ni credenciales** — ~350 palabras (mínimo 500-600 para "About"). Agregar al menos un perfil con nombre, rol, años de oficio, foto. Sumar número SEC contractor si lo hay. 12. **Testimonios sin comuna** — Los 10 testimonios del home llevan nombre + apellido pero no la comuna. La comuna es un signal local fuerte en Chile y un anchor geo para AI overviews. 13. **`/spas/` cuerpo delgado** — ~400 palabras vs 800 mínimo. Sin tabla de specs (jets, capacidad, dimensiones, kW, °C). La tabla por sí sola sería el principal target de citación AI. 14. **Tipo `Manufacturer` ausente del LocalBusiness** — Fabrican producto propio. Cambiar `@type` a `["Manufacturer", "HomeAndConstructionBusiness", "LocalBusiness"]`. Diferenciador vertical y E-E-A-T verificable. 15. **`AggregateRating` ausente del LocalBusiness** — El sistema interno (`fl-reviews.php`) está bien construido y respeta políticas (provenance + warning anti-fake). Importar reviews reales de WhatsApp/GBP a los top 3 productos para activar el bloque rich result. ### MEDIO (1 mes) 16. **Título home sin tilde en "Fábrica"** — `Fabrica de Piscinas FIBROLAB...` debe ser "Fábrica". OG arrastra el mismo error. 17. **Meta description "6 años" vs OG "10 años"** — Inconsistencia entre snippet visible (6) y OG (10). Unificar. 18. **GTM dispara en `<head>`** — Mover el snippet justo después de `<body>` (el noscript ya está ahí). Reduce parser-block en INP móvil. 19. **`Disallow: /wp-json/wp/v2/users` mal ubicado** — Está fuera del bloque `User-agent: *`. Reordenar en robots.txt. 20. **Postal code `8830000` aparenta placeholder** — La Pintana usa códigos en rango 8820xxx. Verificar contra Correos de Chile y corregir `functions.php:303`. Postal code incorrecto rompe matching de citaciones. 21. **`priceValidUntil` con rollover anual** — Cambiar `date('Y-12-31')` por `date('Y-12-31', strtotime('+1 year'))` en `fibrolab_schema_product()`. 22. **Tabla comparativa fibra vs hormigón vs proyectado** — Sin tabla con tiempo instalación, mantenimiento, vida útil, rango de precio CLP, resistencia a cloro. Es el #1 target citable para "¿qué piscina comprar en Chile?". 23. **Pasajes definitorios "first-40-words"** — `/piscinas-de-fibra/` y `/spas/` abren con banner promocional, no con definición. Insertar bloque `<section>` 140-160 palabras antes del grid de productos. Activa AI Overviews y Perplexity. 24. **`Speakable` schema ausente** — Agregar `speakableSpecification` apuntando al CSS selector del nuevo párrafo definitorio. Una línea por página. 25. **`llms.txt` incompleto** — Existe (bien), pero faltan URLs de `/spas/`, `/jacuzzi/`, `/reparacion/`, `/nosotros/`, sección `## FAQ`, campo `## Last-Updated` y declaración de licencia legible (RSL/CC). 26. **`/cobertor-de-seguridad/` 200 pero ausente del sitemap** — Decidir: agregar al sitemap o 301 al producto canónico. 27. **`/bordes/` vs `/bordes-de-piscina/`** — Posible duplicado. Resolver con 301 al canónico. 28. **`local-sitemap.xml` con KML único** — `locations.kml` no es indexable como página. Quitar o reformular. 29. **Diferencia spa vs jacuzzi sin definir** — Query alta demanda completamente sin respuesta en el sitio. Agregar bloque definitorio en `/spas/` o `/jacuzzi/`. 30. **Footer sin política de privacidad ni T&C** — Obligación bajo Ley 21.096 (datos personales) y signal Trust básico. ### BAJO (backlog) - Slider hero auto-rotate 3000 ms — subir a 5000–6000 ms (lectores es-CL necesitan ~5 s). - CSP con `unsafe-inline`/`unsafe-eval` — inevitable con GTM/Woo, documentar. - Alt text de galerías genéricos ("Instalación Fibrolab N") — agregar comuna y modelo. - `WebSite` schema sin `SearchAction` — agregar bloque `potentialAction` para Sitelinks Search Box. - Tono FAQ en `/piscinas-de-fibra/` mezcla registro hiperformal con coloquial — homogeneizar. - Telefono ausente del header móvil — para conversión local (call-to-call). - Cabecera `Disallow` para `Bingbot` no explícita — agregar `Allow: /` por hygiene. --- ## Detalle por categoría ### 1. Technical SEO — 74/100 **PASS:** - HTTPS + HSTS preload (`max-age=31536000; includeSubDomains; preload`). - CSP completa, X-Frame-Options, X-Content-Type-Options, Permissions-Policy. - Redirects 301: http→https, non-www→www. - LiteSpeed cache sirviendo `x-litespeed-cache: hit`. - robots.txt con AI bots (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended) explícitamente permitidos; CCBot bloqueado. - Hreflang `es-CL` + `x-default` autorreferenciados, correctos para sitio monolingüe. - Canónicos auto-referenciados; HTTP 200 en todas las URLs muestreadas. - Renderizado SSR completo; contenido clave en primeros 3.000 bytes. - Todas las imágenes con `width`/`height` explícitos. **Gaps:** - jQuery sin defer (HIGH), IndexNow no configurado (HIGH). - Title sin tilde, meta desc inconsistente (MEDIUM). - `Disallow: /wp-json/wp/v2/users` fuera del bloque `User-agent: *` (MEDIUM). ### 2. Content Quality / E-E-A-T — 61/100 | Factor | Score | |---|---:| | Experience | 55 | | Expertise | 58 | | Authoritativeness | 42 | | Trustworthiness | 68 | **Fortalezas:** RUT visible, dirección física verificable, 1.000+ instalaciones reclamadas, fotos reales WhatsApp en testimonios, contenido técnico genuino en `/bombas-de-calor/` (COP, modulación inverter, intercambiador titanio, regla 0.25–0.3 kW/m³). **Debilidades:** Cero personal nombrado en `/nosotros/`, contradicción de garantía, FAQs genéricas en `/reparacion/`, sin Sernac, sin tabla comparativa, sin precio en repair, "muchos años" inconsistente con foundingDate 2020. ### 3. Schema / Datos estructurados — 78/100 **Bien hecho:** - Rank Math Product/Article/BC suprimidos vía filtro → sin duplicados. - Service nodes referencian `provider: #localbusiness` correctamente. - WooCommerce native suprimido vía `woocommerce_structured_data_product`. - `aggregateRating` condicional a reviews reales en DB → policy-compliant. - BreadcrumbList salta home/404 correctamente. **Pendiente:** Alinear `@id` Rank Math Org / theme LocalBusiness, 5 imágenes vacías en Service, `priceValidUntil` rollover, agregar `Manufacturer` al type array, `SearchAction`, `Speakable`. ### 4. Sitemap — PASS (47 URLs total) | Sitemap | URLs | Lastmod | |---|---:|---| | post-sitemap | 6 | 2024-11-17 (stale) | | page-sitemap | 11 | 2026-04-29 | | product-sitemap | 29 | 2026-04-22 | | local-sitemap | 1 (KML) | 2026-04-29 | Todas las 47 URLs devuelven 200. Sin thin-content gate (no hay páginas-ciudad). Páginas faltantes: `/cobertor-de-seguridad/`, `/instrucciones-de-uso/`, `/bordes/` duplicado. ### 5. Performance / CWV — 60/100 (estimado) | Métrica | Estimado mobile | |---|---| | LCP | 3.2 – 5.0 s (Needs Improvement / Poor) | | FCP | 1.8 – 2.8 s | | TTFB | 300 – 700 ms | | INP (proxy) | 200 – 350 ms | | CLS | 0.05 – 0.18 (borderline) | Tres cuellos de botella: (1) chain CSS render-blocking (Google Fonts + Font Awesome CDN + 271 KB stylesheet), (2) jQuery sync en head, (3) GTM en head. **Bien hecho:** Hero `<picture>` con WebP `imagesrcset` + `fetchpriority=high` + `<link rel=preload>`. Imágenes con dimensiones. `font-display: swap`. **Riesgo:** Si LiteSpeed no generó `.webp` para `otono.png`/`otonom.png`, el preload apunta a 404 y el LCP empeora a worst-case. ### 6. GEO / AI Search — 61/100 | Plataforma | Score | |---|---:| | Google AI Overviews (es-CL) | 58 | | ChatGPT Search | 55 | | Perplexity | 65 | | Bing Copilot | 50 | `llms.txt` existe (ventaja sobre competencia chilena). FAQPage en 5 páginas. Pero pasajes definitorios ausentes para 4 de 5 queries de alta demanda: "qué es piscina de fibra", "cuánto dura", "cuánto cuesta instalar Chile", "spa vs jacuzzi". La única cita-ready es el bloque mecanístico de `/bombas-de-calor/`. ### 7. Local SEO — 61/100 NAP consistente entre footer/schema/front-page (formato del teléfono varía pero E.164 correcto en schema). Schema LocalBusiness con `geo`, `areaServed` (RM + Valparaíso + O'Higgins + Maule + Chile), `openingHoursSpecification`, `foundingDate`. Sistema de reviews interno bien construido en `fl-reviews.php` con guardas anti-fake. **Gap mayor:** Sin Maps embed, sin GBP URL en `sameAs`, sin AggregateRating activo, sin pasajes para queries locales tipo "fábrica de piscinas Santiago". ### 8. Visual / ATF (mobile + desktop) Screenshots guardados en `/root/Proyecto_compartido/fibrolab.cl/screenshots/2026-04-29/` (16 imágenes). `/piscinas-de-fibra/` mobile ATF es el más fuerte: H1 + 3 trust icons (48 hrs / 60 cuotas / Garantía) + 2 CTAs visibles sin scroll. Home mobile ATF carece de teléfono + dirección. Hamburger correctamente posicionado y tap-friendly. Hero slider 3 s muy rápido para lectura es-CL. --- ## Decisiones que requieren input - **Páginas por comuna (RM):** El theme ya tiene `template-comuna.php`. Recomendado solo si pasa el quality gate (foto real local + cita cliente local + 300+ palabras únicas). 3-5 comunas máx (Santiago, Las Condes/Vitacura, Viña del Mar, Rancagua). Confirmar antes de producir. - **Reviews import a productos:** El importer en `fl-reviews.php` tiene warning explícito anti-fake. ¿Tienen acceso a screenshots/exports de reviews reales (WhatsApp / GBP) para poblar? - **GBP listing status:** No verificable desde el código. Si no está reclamado, paso 0 antes de pasos 10/15. --- ## Files clave inspeccionados - `wp-content/themes/fibrolab/functions.php` (schema + enqueue + LCP preload) - `wp-content/themes/fibrolab/front-page.php` (hero slider, intro, testimonios) - `wp-content/themes/fibrolab/footer.php` (NAP rendido) - `wp-content/themes/fibrolab/page-piscinas-de-fibra.php` - `wp-content/themes/fibrolab/page-spas.php` - `wp-content/themes/fibrolab/page-bombas-de-calor.php` - `wp-content/themes/fibrolab/page-jacuzzi.php` - `wp-content/themes/fibrolab/page-reparacion.php` - `wp-content/themes/fibrolab/page-nosotros.php` - `wp-content/themes/fibrolab/inc/fl-reviews.php` - `wp-content/themes/fibrolab/assets/js/fibrolab.js` - `wp-content/themes/fibrolab/assets/css/fibrolab.css` (271 KB) - `/llms.txt`, `/robots.txt`, `/sitemap_index.xml` + 4 child sitemaps --- ## Comparación con auditoría 2026-04-28 Esta corrida re-evalúa con foco en: - Schema duplicate `@id` (nuevo hallazgo no registrado en versión anterior). - Postal code 8830000 sospechoso de placeholder (nuevo). - IndexNow 404 (nuevo). - Garantía 5y vs 1y (re-confirmado). - jQuery + Google Fonts triple (re-confirmado, sin progreso desde 2026-04-28). Si la auditoría del 28 ya cubrió estos, los puntos persistentes deberían tomar prioridad de implementación esta semana.