Auditoría SEO — fibrolab.cl
Fecha: 2026-05-04 (5 días tras v3 del 29-abr)
URL: https://www.fibrolab.cl/
Tipo de negocio: Hybrid — Manufacturer + LocalBusiness + HomeAndConstructionBusiness + SAB nacional. Fábrica en La Pintana, instalación en RM/Valparaíso/O'Higgins/Maule + despachos a todo Chile.
Stack: WordPress + WooCommerce + Rank Math + LiteSpeed Cache + GTM-W6DGGKK + PixelYourSite Free.
Idioma: es-CL (hreflang es-CL + x-default).
NAP: Fibrolab · Los Álamos 2538, La Pintana, Región Metropolitana · +56 9 8225 6792 · contacto@fibrolab.cl · RUT 77.424.952-4 · postalCode declarado 8830000.
Metodología: auditoría fresca con 7 subagentes en paralelo (technical, content, schema, sitemap, performance, geo, local) sobre HTML live + verificación manual con curl + diff working-tree vs producción para identificar fixes en código aún sin desplegar.
SEO Health Score — 60 / 100 (↓ 4 vs v3 = 64)
| Categoría | Peso | Score | Ponderado | Δ v3 |
|---|---|---|---|---|
| Technical SEO | 22% | 61 | 13.42 | ↓13 |
| Content Quality / E-E-A-T | 23% | 62 | 14.26 | +3 |
| On-Page SEO | 20% | 60 | 12.00 | ↓2 |
| Schema / Datos estructurados | 10% | 60 | 6.00 | ↓1 |
| Performance (CWV proxy) | 10% | 42 | 4.20 | ↓28 |
| AI Search Readiness (GEO) | 10% | 54 | 5.40 | +4 |
| Imágenes | 5% | 75 | 3.75 | = |
| Total | ~59 | ↓5 |
Local SEO (informativo, fuera de fórmula): 52/100 (+3 vs v3 informativo de 49).
Lectura: la baja del score frente a v3 NO refleja regresión funcional sino re-scoring más riguroso. Los agentes detectaron ahora con más precisión que issues que v3 daba por fixeados en código siguen render-blocking en producción (Font Awesome cdnjs sigue sincrono, jQuery sin defer, hero background-image en /piscinas-de-fibra/, CSS bundle sin
media=print/onload). En sentido positivo: confirmamos que se desplegó self-hosted fonts, critical CSS inline, hero preload webp, OpenReplay removido, owl-carousel deregistrado, lazy en galería /piscinas-de-fibra/.
Working-tree vs producción — fixes en código pendientes de deploy
Hay 770 líneas de cambios sin commit en functions.php y rework grande en single-product.php. Resumen de qué fixes están en el filesystem local pero no necesariamente en producción:
| Fix | En código local | Verificado live |
|---|---|---|
| Self-hosted Google Fonts (Montserrat + Nunito WOFF2 + preload) | ✅ | ✅ LIVE |
Critical CSS inline (#fibrolab-critical) |
✅ | ✅ LIVE |
| Owl Carousel deregistrado | ✅ | ✅ deregistrado pero clases owl-carousel siguen en DOM (transformadas a Swiper en runtime, OK) |
| Hero preload imagesrcset webp | ✅ | ✅ LIVE |
<picture> + fl_webp_source() para PNGs |
✅ | ✅ LIVE en bombas-de-calor, single-product |
fl_img_dims() para width/height en <img> |
✅ | ✅ LIVE — 0 imágenes sin dimensiones (CLS controlado) |
Sistema de reviews (inc/fl-reviews.php + email post-compra) |
✅ creado | ⚠️ infraestructura lista, sin reviews importadas → AggregateRating sigue sin emitirse |
aggregateRating condicional en single-product schema |
✅ | ⚠️ no se renderiza (0 WC reviews aprobadas) |
| Service schema añadido para /spas/, /bordes-de-piscina/, /cobertor-de-seguridad/, /paneles-solares/, /jacuzzi/ | ✅ | ✅ Service schema presente en hubs |
| Sección "Quiénes Somos" E-E-A-T en home (RUT, fundación 2020, 1000+ instalaciones, 48h, 5 años garantía, SEC, Salvum) | ✅ | ✅ LIVE — gran avance E-E-A-T |
Footer corregido: /spa-y-jacuzzi/ → /jacuzzi/ |
✅ | ✅ |
| OpenReplay removido del HTML live | — | ✅ confirmado ausente (mejora INP real) |
Schema @type array sin Manufacturer/Organization |
❌ sigue ["HomeAndConstructionBusiness","LocalBusiness"] |
❌ |
hasMap, GBP URL en sameAs |
❌ | ❌ |
| Speakable schema | ❌ 0 ocurrencias | ❌ |
hasMerchantReturnPolicy + shippingDetails en Product Offer |
❌ | ❌ — bloquea Google Merchant Center |
Páginas /contacto/, /politica-de-privacidad/, /terminos-y-condiciones/, /paneles-solares/ |
❌ | ❌ siguen 301/404 |
llms.txt: /spa-y-jacuzzi/ → /jacuzzi/ |
❌ | ❌ |
| robots.txt: Google-CloudVertexBot, anthropic-ai, Bytespider | ❌ | ❌ |
| Font Awesome self-hosted | ❌ sigue cdnjs render-blocking | ❌ |
media=print/onload para CSS bundle (filtro style_loader_tag) |
❌ comentario describe estrategia, filtro no implementado | ❌ |
jQuery con defer o en footer |
❌ sigue sync en <head> |
❌ |
Hero background-image → <img> en /piscinas-de-fibra/, /nosotros/, /jacuzzi/ |
❌ | ❌ |
| Páginas comunales publicadas (template-comuna.php existe) | ❌ 0 páginas WP creadas | ❌ |
| Sernac / Ley 19.496 / CAE en /financiamiento-salvum/ | ❌ | ❌ |
| SEC license number visible | ❌ — solo texto "bajo normativa SEC" sin número | ❌ |
Acción inmediata sugerida: commitear los cambios del working-tree (son 770 líneas que ya están en producción según verificación HTML live — git solo desconoce que se subieron). Esto evita que un próximo cambio sobrescriba sin ver el contexto.
Estado de fixes desde v3 (29-abr) — verificación live HTML
✅ FIXES NUEVOS CONFIRMADOS EN PRODUCCIÓN (no estaban en v3 ni mejorados desde entonces)
- Sección "Quiénes Somos" en home con RUT, fundación 2020, 1.000+ instalaciones, 48h, garantía 5 años, normativa SEC mencionada, Salvum identificado correctamente. Mejora real de E-E-A-T y citability AI. (Score Authority +5).
- OpenReplay removido del HTML live. Mejora INP real porque ya no hay tracker en
wp_headpriority 1 ocupando el slot más alto del head. - Galería
/piscinas-de-fibra/sinloading="eager"+data-no-lazy="1"— el issue v3 #24 está resuelto. Las 30 imágenes ya no saturan bandwidth en LCP window. - Self-hosted fonts vivos (Montserrat + Nunito WOFF2 con preload). Reemplaza Google Fonts CDN. Elimina handshake DNS/TLS extra.
- Critical CSS inline (
<style id="fibrolab-critical">). Primer paint sin esperar bundle de 271KB. - Hero preload
<link rel="preload" imagesrcset>con WebP funcionando en home. - Width/height declarados en 77/77 imágenes (CLS bajo control).
- Sistema de reviews construido (
inc/fl-reviews.php): triggerwoocommerce_order_status_completedcon email automático de solicitud. Infraestructura lista, falta importar las 10 reseñas hardcoded para queAggregateRatingse emita. - Service schema añadido para /spas/, /bordes-de-piscina/, /cobertor-de-seguridad/, /paneles-solares/, /jacuzzi/ con campo
typecorrecto. /spa-y-jacuzzi/→/jacuzzi/en footer, schema y enlaces internos.- BreadcrumbList del producto en
/modelo/piscina-4-8-metros/ahora con 2 ítems correctos (resuelto issue v3 #11).
❌ ISSUES V3 NO RESUELTOS (siguen iguales en producción 2026-05-04)
| # | Issue | Severidad |
|---|---|---|
| 1 | Title sin tilde — <title>Fabrica de Piscinas FIBROLAB...</title> |
HIGH |
| 2 | Product Offer SIN hasMerchantReturnPolicy + shippingDetails (bloquea Google Merchant Center) |
CRITICAL |
| 3 | LocalBusiness schema sin Manufacturer, sin Organization en @type array |
HIGH |
| 4 | sameAs sin URL del Google Business Profile (solo FB+IG) |
HIGH |
| 5 | Embed Google Maps ausente en todos los templates | HIGH |
| 6 | /contacto/ 301→home (sin página dedicada) |
HIGH |
| 7 | /politica-de-privacidad/, /terminos-y-condiciones/ 404 — riesgo Ley 19.628 + ad accounts FB/Google |
CRITICAL |
| 8 | Sin mención Sernac / Ley 19.496 / CAE en home, /financiamiento-salvum/, /nosotros/ | CRITICAL (regulatorio) |
| 9 | og:type="article" en /spas/, /jacuzzi/, /piscinas-de-fibra/ (debería ser website) |
MEDIUM |
| 10 | URL incorrecta en llms.txt (/spa-y-jacuzzi/ debe ser /jacuzzi/) |
MEDIUM |
| 11 | Speakable schema = 0 ocurrencias | MEDIUM |
| 12 | Pasajes "first-40-words" definitorios faltantes en /piscinas-de-fibra/, /spas/, /jacuzzi/, /reparacion/ | HIGH |
| 13 | Type-collision en JSON-LD home (@id #localbusiness aparece 4 veces en el grafo, #logo 2 veces, #website 2 veces) |
CRITICAL |
| 14 | /paneles-solares/ 404 (template PHP existe pero página WP no) |
HIGH |
| 15 | Font Awesome cdnjs render-blocking sin media=print/onload |
HIGH |
| 16 | CSS bundle LiteSpeed sin media=print/onload (filtro descrito en comentario, no implementado) |
HIGH |
| 17 | Hero background-image en /piscinas-de-fibra/, /nosotros/, /jacuzzi/ (preload scanner no detecta) | HIGH |
| 18 | post-sitemap.xml lastmod congelado en 2024-11-17 (17 meses sin actualizaciones) |
MEDIUM |
| 19 | Logs accesibles en /wp-content/uploads/: csp-violations.log y indexnow.log HTTP 200 |
CRITICAL (privacidad: expone IPs reales y UTMs PPC) |
| 20 | robots.txt sin Google-CloudVertexBot, anthropic-ai, Bytespider | LOW |
| 21 | template-comuna.php construido completo, 0 páginas comunales publicadas | HIGH (factor #1 ranking local pack) |
| 22 | Testimonios hardcoded sin importar como WC reviews → sin AggregateRating → sin estrellas en SERP |
HIGH |
| 23 | hasMap ausente en LocalBusiness schema |
HIGH |
| 24 | SEC license number ausente / sin hasCredential |
MEDIUM |
🆕 HALLAZGOS NUEVOS DEL 2026-05-04
| # | Issue | Severidad |
|---|---|---|
| 25 | /local-sitemap.xml apunta a /locations.kml con datos incompletos — sin dirección, teléfono ni coordenadas (todos vacíos). Rank Math configurado a medias. |
MEDIUM |
| 26 | CSP violation activa: analitycs.goagl.in bloqueado por connect-src (visible en csp-violations.log expuesto). OpenReplay removido del HTML pero su dominio de reporting aún hace requests bloqueados. Limpiar configuración o whitelistear dominio. |
MEDIUM |
| 27 | 3 páginas /gracias-por-cotizar*/ HTTP 200 sin verificar noindex (/gracias-por-cotizar/, /gracias-por-cotizar-bordes/, /gracias-por-cotizar-bomba-de-calor/). Si Rank Math no aplica noindex, estas thank-you pages contaminan el índice. |
HIGH |
| 28 | Service hubs sin entrada en page-sitemap: /bombas-de-calor/, /instrucciones-de-uso/, /reparacion/ retornan 200 pero no están en sitemap. Pierden señal de prioridad de crawl. |
MEDIUM |
| 29 | jQuery cargado síncrono en <head> sin defer ni async — bloquea parser HTML. WP permite mover a footer con add_data('jquery','group',1). |
HIGH (CWV) |
| 30 | Galería WooCommerce inicia con opacity:0 y depende de jQuery para volverse visible — afecta cuándo se mide LCP en /modelo/*/. |
MEDIUM |
| 31 | Error factual en /jacuzzi/ FAQ — texto dice "Salvum (Grupo BBVA)". Salvum es Forum Servicios Financieros S.A. (no Grupo BBVA). Daño directo a Trustworthiness bajo QRG. Línea 285 de page-jacuzzi.php. |
HIGH |
| 32 | postalCode 8830000 no verificado contra Correos de Chile — La Pintana está en rango 8820000-8839999 (plausible) pero requiere confirmación oficial. |
LOW |
| 33 | addressRegion sin código ISO — schema dice "Región Metropolitana". Debería ser "CL-RM" para precisión semántica. |
LOW |
| 34 | geo.longitude con precisión perdida — código declara -70.63280 (5 decimales) pero json_encode elimina trailing zero → emite -70.6328 (4 decimales). Reduce precisión geo a ~11m. |
LOW |
| 35 | AdsBot-Google y Amazonbot también ausentes en robots.txt (además de los 3 ya conocidos). | LOW |
| 36 | SearchAction.target en formato string legacy en bloque Rank Math home — debería ser objeto {@type: EntryPoint, urlTemplate: ...}. |
LOW |
| 37 | Bordes duplicado: /bordes-de-piscina/ y /bordes/ ambos retornan 200. Confirmar canónica y aplicar 301 al duplicado. |
MEDIUM |
Plan priorizado de acción
🔴 CRITICAL — fix esta semana (impacto regulatorio o pérdida de tráfico/conversión inmediata)
C1. Crear páginas legales obligatorias (/politica-de-privacidad/ + /terminos-y-condiciones/)
- Por qué: Ley 19.628 chilena + cumplimiento de cuentas publicitarias FB/Google. Los formularios /financiamiento-salvum/ y cotizadores recolectan RUT, ingreso mensual y datos personales sin política. Riesgo legal y de cuenta publicitaria.
- Esfuerzo: 2 páginas WordPress + linkear desde footer. ~2h.
C2. Eliminar csp-violations.log e indexnow.log accesibles públicamente en /wp-content/uploads/
- Por qué: exponen IPs de visitantes reales, user-agents y URLs UTM de campañas PPC. Vulneración de privacidad activa.
- Fix: regla Nginx/Apache location ~* \.(log)$ { deny all; } o mover a /var/log/fibrolab/. ~30 min.
C3. Resolver type-collision en JSON-LD home (cuatro @id #localbusiness en el grafo)
- Por qué: Google puede ignorar o malinterpretar el grafo. El nodo Rank Math Organization no tiene address/geo/telephone; si Google lo toma como canónico se pierde toda la señal local.
- Fix: desactivar emisión de Organization en Rank Math (Settings → Schema → Knowledge Graph → ninguno) y consolidar todo en el bloque del tema con @type: ["Organization", "Manufacturer", "HomeAndConstructionBusiness", "LocalBusiness"]. ~1h.
C4. Añadir hasMerchantReturnPolicy + shippingDetails a Product Offer en single-product.php
- Por qué: sin ambos campos, Google Merchant Center bloquea elegibilidad para Shopping y rich snippets de producto. JSON-LD plantilla en agente schema.
- Esfuerzo: template ya tiene la estructura, agregar 25-30 líneas. ~1h.
C5. Añadir Sernac / Ley 19.496 / CAE en /financiamiento-salvum/
- Por qué: sitio comercial chileno con WooCommerce + crédito de consumo a $2.9M-6.3M CLP debe declarar (a) CAE representativa o link al simulador Salvum, (b) derecho a retracto 10 días hábiles (Art. 3°bis Ley 19.496), (c) canal Sernac. Sin esto hay riesgo activo de denuncia.
- Esfuerzo: 3-4 líneas en sección FAQ existente. ~30 min.
C6. Aplicar noindex a /gracias-por-cotizar*/ (3 páginas)
- Por qué: thank-you pages indexables contaminan el índice y diluyen calidad.
- Fix: Rank Math → editor de cada página → noindex. Verificar con curl ... | grep robots. ~15 min.
🟠 HIGH — fix dentro de 2 semanas
H1. Crear 4 páginas comunales (Maipú, Puente Alto, San Bernardo, Las Condes) — factor #1 ranking local pack según Whitespark 2026. Template-comuna.php está construido completo. Cada página debe tener 60%+ contenido único (testimonio local, distancia, landmarks). Tras 6-8 semanas, publicar las 4 restantes (Peñalolén, Providencia, Ñuñoa, Vitacura). ROI más alto del roadmap local.
H2. Importar las 10 testimonios hardcoded como WooCommerce reviews vía inc/fl-reviews.php admin. Activa AggregateRating schema → estrellas en SERP. Sin esto el sitio no tiene rich snippets de estrellas.
H3. Añadir GBP URL a sameAs en functions.php:348-351 + agregar hasMap con la URL del perfil GBP. ~10 min de trabajo, gran impacto en disambiguación de entidad local.
H4. Insertar embed Google Maps en footer o /nosotros/. Refuerza señal de ubicación física. Conectar con hasMap del schema.
H5. Reemplazar Font Awesome cdnjs por self-hosted + filtro style_loader_tag con media=print/onload. Estimación CWV: -300/-500ms LCP. ~1h. Alternativa: SVG inline para iconos above-the-fold (search, hamburger, snowflake).
H6. Aplicar filtro style_loader_tag con media=print/onload al CSS bundle de LiteSpeed (handles fibrolab-style, woocommerce-general, woocommerce-layout). Critical CSS inline ya cubre above-the-fold. Estimación: -200/-400ms LCP.
H7. Convertir hero background-image a <img> con preload en /piscinas-de-fibra/, /nosotros/, /jacuzzi/. Preload scanner no detecta background-image → LCP +400-800ms en estas páginas. JPEG → WebP además.
H8. Mover jQuery del <head> al footer con wp_scripts()->add_data('jquery','group',1). Estimación: -100/-250ms LCP. Verificar que GTM y PYS no requieran jQuery en head.
H9. Añadir primer pasaje definitorio (40-60 palabras citables por LLM) en /piscinas-de-fibra/, /spas/, /jacuzzi/, /reparacion/, /nosotros/. Plantilla:
"Una piscina de fibra de vidrio es una estructura monolítica fabricada en resina poliéster y fibra de vidrio, instalada en 48 horas. Fibrolab las fabrica en su planta de La Pintana, RM, con garantía estructural de 5 años y modelos desde 3.5 a 10.5 metros."
Reubicar el copy promocional fl-season-banner debajo del hero. Score AI Citation Readiness pasa de 31 → ~55.
H10. Corregir error factual en /jacuzzi/ — cambiar "Salvum (Grupo BBVA)" por "Salvum (Forum Servicios Financieros S.A.)" en page-jacuzzi.php:285.
H11. Crear página /contacto/ o configurar 301 permanente al anchor /#contacto. Eliminar la cadena 301→home.
H12. Decidir destino de /paneles-solares/ — si el servicio sigue activo, crear página WP con el template existente (Service schema ya añadido). Si descontinuado, eliminar page-paneles-solares.php y la entrada en Service schema.
H13. Title del home con tilde — agregar Fábrica (con tilde) en <title>. OG arrastra el error.
🟡 MEDIUM — fix dentro del mes
- M1. Añadir Speakable schema (
cssSelector: [".first-passage", ".fibrolab-hero__content"]) en home y servicios. - M2. og:type "article" → "website" en /spas/, /jacuzzi/, /piscinas-de-fibra/.
- M3. llms.txt: cambiar
/spa-y-jacuzzi/por/jacuzzi/. - M4. Añadir
/bombas-de-calor/,/instrucciones-de-uso/,/reparacion/a page-sitemap (Rank Math → Include in Sitemap). - M5. Publicar o actualizar 1 post para descongelar post-sitemap.xml lastmod.
- M6. Hero
<picture>mobile en home: agregar texto/CTA above-the-fold (actualmente foto pura sin value prop). - M7.
.fibrolab-product-card__title— corregirfont-size: 9pxmobile (mínimo legible 12-14px Google). - M8. Limpiar configuración OpenReplay para que
analitycs.goagl.inno genere CSP violations en logs (si OpenReplay ya no se usa, remover bootstrap completo). - M9. Resolver duplicado
/bordes/vs/bordes-de-piscina/con 301 a la canónica. - M10. Publicar número SEC del instalador habilitado en
/bombas-de-calor/y/nosotros/+hasCredentialen schema. Diferenciador de confianza para equipos eléctricos.
🟢 LOW — backlog
- L1. robots.txt: agregar Google-CloudVertexBot, anthropic-ai, Bytespider, AdsBot-Google, Amazonbot.
- L2. Schema:
addressRegion: "CL-RM",geo.longitude: "-70.63280"(string para preservar precisión),SearchAction.targetcomo objeto. - L3. Verificar
postalCode 8830000contra Correos de Chile (https://www.correos.cl/codigos-postales). - L4. Completar
locations.kmlcon dirección, teléfono y coordenadas reales (actualmente todos vacíos). - L5. Reservar
min-heighten.woocommerce-product-gallery__wrapperpara evitar CLS durante init JS.
Resumen ejecutivo
Lo bueno: entre el 29-abr y hoy se desplegaron mejoras reales y verificables: self-hosted fonts, critical CSS inline, hero preload webp, OpenReplay removido, galería sin eager, sección "Quiénes Somos" con E-E-A-T sólido. La infraestructura para reviews (inc/fl-reviews.php) está construida y solo falta importar las 10 testimonios. Working-tree tiene 770 líneas pendientes de commit que ya están en producción según el HTML live.
Lo urgente: dos páginas legales en 404 (política de privacidad y términos) son riesgo regulatorio activo bajo Ley 19.628 + cuentas publicitarias. La ausencia de mención Sernac/Ley 19.496/CAE en /financiamiento-salvum/ es exposición Sernac directa para una empresa que vende a $2.9M-6.3M CLP con crédito de consumo. Logs en /wp-content/uploads/ exponen datos de visitantes y campañas. Los 4 fixes top (legales + logs + CSP en JSON-LD + Sernac) son ~5 horas de trabajo y quitan riesgo regulatorio inmediato.
Lo de mayor ROI: publicar las primeras 4 páginas comunales (template ya construido), importar testimonios como WC reviews (estrellas en SERP), añadir GBP URL al sameAs + embed Maps. Combinado, es ~6 horas de trabajo y mueve el score local de 52 → ~70.
Lo de mayor impacto técnico: Font Awesome self-hosted + jQuery defer + filtro CSS media=print + hero <img> en páginas de servicio. Combinado, baja LCP estimado de 4-5s a ~2.5s en mobile (cambio de "Pobre" a "Bueno" en CrUX).