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)

  1. 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).
  2. OpenReplay removido del HTML live. Mejora INP real porque ya no hay tracker en wp_head priority 1 ocupando el slot más alto del head.
  3. Galería /piscinas-de-fibra/ sin loading="eager" + data-no-lazy="1" — el issue v3 #24 está resuelto. Las 30 imágenes ya no saturan bandwidth en LCP window.
  4. Self-hosted fonts vivos (Montserrat + Nunito WOFF2 con preload). Reemplaza Google Fonts CDN. Elimina handshake DNS/TLS extra.
  5. Critical CSS inline (<style id="fibrolab-critical">). Primer paint sin esperar bundle de 271KB.
  6. Hero preload <link rel="preload" imagesrcset> con WebP funcionando en home.
  7. Width/height declarados en 77/77 imágenes (CLS bajo control).
  8. Sistema de reviews construido (inc/fl-reviews.php): trigger woocommerce_order_status_completed con email automático de solicitud. Infraestructura lista, falta importar las 10 reseñas hardcoded para que AggregateRating se emita.
  9. Service schema añadido para /spas/, /bordes-de-piscina/, /cobertor-de-seguridad/, /paneles-solares/, /jacuzzi/ con campo type correcto.
  10. /spa-y-jacuzzi//jacuzzi/ en footer, schema y enlaces internos.
  11. 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

🟢 LOW — backlog


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