# 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 ``** — Mover el snippet justo después de `` (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 `` 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 `` con WebP `imagesrcset` + `fetchpriority=high` + ``. 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.