Auditoría SEO — fibrolab.cl (re-audit v2)

Fecha: 2026-04-29 (segunda corrida del día tras commits/cambios en working tree) URL: https://www.fibrolab.cl/ Tipo de negocio: Hybrid — Manufacturer + HomeAndConstructionBusiness + LocalBusiness + SAB nacional. Fábrica propia en La Pintana, instalación en todo Chile. Stack: WordPress + WooCommerce + Rank Math + LiteSpeed Cache + GTM (GTM-W6DGGKK) + PixelYourSite Free 11.2.0.4 Idioma: es-CL (hreflang es-CL + x-default autorreferenciados) NAP: Fibrolab · Los Álamos 2538, La Pintana, Región Metropolitana · +56 9 8225 6792 · RUT 77.424.952-4


SEO Health Score — 63 / 100

Categoría Peso Score Ponderado
Technical SEO 22% 74 16.28
Content Quality / E-E-A-T 23% 55 12.65
On-Page SEO 20% 62 12.40
Schema / Datos estructurados 10% 62 6.20
Performance (CWV proxy) 10% 70 7.00
AI Search Readiness (GEO) 10% 52 5.20
Imágenes 5% 75 3.75
Total ~63

Local SEO (informativo, fuera de fórmula): 58 / 100 — empeora 3 puntos vs ayer porque la verificación live confirmó que /contacto/ no existe (301 a home), eliminando el candidato natural para Google Maps embed.

Lectura del score: el sitio NO retrocedió; los subagentes encontraron issues nuevos (Merchant Center hasMerchantReturnPolicy/shippingDetails, breadcrumb producto incompleto, URL /jacuzzi/ mal escrita en llms.txt, og:type: article en categorías, /contacto/ 301, /bordes/ con noindex en lugar de 301) que el audit de ayer no detectó. Varios fixes críticos del audit anterior sí aterrizaron en código (ver sección "Fixes confirmados" más abajo).


Fixes confirmados desde audit anterior (✓)

Verificados en HTML/PHP live de hoy:

  1. Critical CSS inline + main CSS deferredfunctions.php:154-163 y :297-310. CSS principal se carga con media="print" onload.
  2. Google Fonts self-hosted (Montserrat + Nunito WOFF2 variables)functions.php:128-139. Poppins eliminado. preload con crossorigin.
  3. jQuery deferfunctions.php:274-283, filtro fibrolab_defer_jquery_scripts confirmado en HTML live.
  4. Rank Math @id alias a #localbusinessfunctions.php:842-854. Cero nodos Organization huérfanos.
  5. Deduplicación schema: WooCommerce woocommerce_structured_data_product suprimido + Rank Math Product/Article/BreadcrumbList suprimidos vía filtro. Cero duplicados detectados en URLs muestreadas.
  6. Garantía dual aclarada en /nosotros/ (page-nosotros.php:168-169): "5 años estructural en piscinas nuevas / 1 año en reparación".
  7. FAQ /reparacion/ reescrita con contenido técnico genuino: aparecen ahora rodamina, ISO-NPG, ASTM C581, CSM 300-450 g/m². El benchmark de calidad esperado.
  8. Favicon resuelto en HTML (link rel=icon a icon-100x100.png), aunque /favicon.ico directo sigue 404.
  9. llms.txt incluye /reparacion/ y /nosotros/ que faltaban.
  10. Service schema completo en las 5 páginas: image, areaServed, provider @id vinculado a #localbusiness, offers con priceCurrency: CLP.
  11. Headers de seguridad: HSTS preload, CSP completa con report-uri, X-Frame-Options, X-Content-Type-Options, Permissions-Policy, Referrer-Policy strict-origin-when-cross-origin.

Plan de acción priorizado

CRÍTICO (esta semana)

  1. hasMerchantReturnPolicy + shippingDetails ausentes en Product Offerfunctions.php:658-671. Google Merchant Center los exige desde 2024 para rich results de producto. Sin estos campos, ningún producto califica para Shopping Graph ni rich snippet de precio en SERP. Bloqueador comercial directo.
  2. /contacto/ no existe — devuelve 301 a home — Verificado live. Elimina el candidato natural para <iframe> Maps embed, formulario de contacto independiente, y ContactPage schema. Crear página dedicada con: NAP completo, embed GBP, formulario, horario, schema ContactPage + Organization.contactPoint.
  3. Sin política de privacidad ni Términos & Condiciones/politica-de-privacidad/, /terminos-y-condiciones/ y /privacidad/ devuelven HTTP 404. Footer sin enlaces legales. Ley 19.496 (Protección al Consumidor) exige información precontractual escrita para ventas sobre $100K CLP. Riesgo regulatorio activo con Sernac. Trustworthiness es el eje de mayor peso en E-E-A-T (30%).
  4. Sin mención de Sernac ni derechos del consumidor — Cero ocurrencias de "Sernac", "consumidor", "Ley 19.496" en las 9 páginas analizadas. Gap QRG Sept-2025 para servicios financiados.
  5. Title home sin tilde: <title>Fabrica de Piscinas FIBROLAB... debe ser "Fábrica". OG y Twitter arrastran el mismo error. Corregir en Rank Math → Inicio → Título SEO.
  6. Meta description "6 años" vs OG "10 años" — dos valores distintos en mismo render. foundingDate: 2020 en schema indica ~6 años. Unificar en Rank Math → Inicio → Descripción General + Social.
  7. Pasajes definitorios "first-40-words" ausentes en /piscinas-de-fibra/, /spas/, /jacuzzi/, /reparacion/. Las 4 páginas abren con banner promocional ("Temporada Baja…") o lista de componentes en lugar de definición. Bloqueante #1 de citación AI Overviews / Perplexity / ChatGPT.
  8. URL incorrecta en llms.txt: /spa-y-jacuzzi/ (que hace 301) en lugar de /jacuzzi/. NEW. Bloquea resolución de la entidad jacuzzi por ChatGPT.
  9. Speakable schema ausente en todas las páginas — Una línea de JSON-LD apuntando al CSS selector del bloque definitorio (cuando exista) activa extracción confiable en Google AIO.

ALTO (2 semanas)

  1. @type LocalBusiness sin Manufacturerfunctions.php:349. Cambiar a ["Manufacturer", "HomeAndConstructionBusiness", "LocalBusiness"]. Diferenciador vertical clave; Fibrolab fabrica producto propio.
  2. postalCode 8830000 incorrectofunctions.php:389. La Pintana opera en rango 8820xxx (Los Álamos 2538 ~ 8830426 según fuentes; el agente schema lo señaló 8830426, pero el agente local apunta 8820xxx; verificar oficialmente en Correos de Chile antes de sustituir). Postal code incorrecto rompe matching de citaciones agregadas.
  3. sameAs sin URL del Google Business Profilefunctions.php:411-414. Solo Facebook + Instagram. Agregar https://maps.app.goo.gl/<id> (URL pública del GBP). Prerequisito: reclamar/verificar el GBP.
  4. Sin embed Google Maps en ningún template del sitio — Cero <iframe> Maps en homepage, /nosotros/, ni en /contacto/ (que no existe). El signal de GBP de mayor peso, totalmente ausente.
  5. Breadcrumb de producto incompleto/modelo/piscina-4-8-metros/ emite Inicio → Piscina 4.8 Metros, falta nivel intermedio Piscinas de Fibra → /piscinas-de-fibra/. Bloquea rich results de breadcrumb.
  6. AggregateRating no se emite — La lógica condicional en functions.php:429-440 (home) y :674-713 (productos) es correcta y policy-compliant, pero requiere reseñas WooCommerce aprobadas. Hoy hay 0. Importar 3-5 reviews reales vía el admin de inc/fl-reviews.php.
  7. Tabla comparativa fibra vs hormigón vs proyectado ausente — #1 pasaje citable para query "qué piscina comprar Chile". Insertar tabla HTML en /piscinas-de-fibra/ y replicar en llms.txt.
  8. Definición spa vs jacuzzi ausente — Alta demanda de búsqueda sin respuesta. /spas/ y /jacuzzi/ coexisten con productos parcialmente solapados. Insertar bloque definitorio + tabla diferencial en al menos una de las dos.
  9. /spas/ sin tabla de specs técnicas — 794 palabras pero cero números (jets, capacidad, kW, voltaje, dimensiones por modelo). FAQ responde "similar a un electrodoméstico grande" en lugar de cifras. Para productos $3.7M-$5.3M esto bloquea decisión informada.
  10. /jacuzzi/ thin content — ~430 palabras. Sin specs ni diferenciación.
  11. /nosotros/ sin equipo nombrado — 453 palabras (vs target 500-600). Sin nombres del equipo, CV del fundador, certificaciones SEC, número MINVU si aplica.
  12. FAQ /piscinas-de-fibra/ con tono incongruente y "muchos años" — Texto auto-referencial mezclando 2ª/3ª persona ("Si quiere tener un bonito jardín…", "Eres un instalador?"). La frase "muchos años en el mercado" contradice foundingDate: 2020. Reescribir con el mismo registro técnico de /reparacion/ y /bombas-de-calor/.
  13. /financiamiento-salvum/ sin CAE / tasas de referencia — Menciona "Forum Servicios Financieros S.A." pero sin Carga Anual Equivalente. Ley 19.496 Art. 37 lo exige en publicidad de crédito al consumo. NEW.
  14. Testimonios sin comunafront-page.php:208-268. Los 10 testimonios (Felipe Faundez, Katherine Meller, Isabela Mora, Ernesto González, Gabriela López, Marco Soto, Sergio Ortega, Paola Olivares, Renato Díaz, Guillermo Bustos) tienen nombre+apellido pero ningún campo location. La comuna es el geo-anchor local más fuerte en es-CL. Agregar 'location' => 'Maipú, RM' al array y renderizar.
  15. IndexNow key file 404GET /<hex32>.txt devuelve 404 con x-litespeed-tag: 074_HTTP.404. La lógica en functions.php:1626-1639 es correcta, pero LiteSpeed Cache intercepta antes de WP. Excluir patrón /<hex>.txt en LiteSpeed → Excluir → URI (regex). O bien crear el archivo físico en raíz.
  16. og:type: article en /spas/ y /jacuzzi/ — Páginas de categoría deberían usar website o product. Rank Math asigna article por defecto a non-front-page. Corregir en Rank Math por página → Social → OG Type. NEW.
  17. GTM en <head> — Aunque j.async=true, el snippet se inyecta vía wp_head(). Mover a wp_body_open reduce parser-block en INP móvil.

MEDIO (1 mes)

  1. /bordes/ con noindex, follow — Solución mínima pero incompleta para el duplicado vs /bordes-de-piscina/. Reemplazar por 301 permanente al canónico para consolidar señales de enlace.
  2. local-sitemap.xml con un único KMLlocations.kml no es página HTML indexable. Eliminar el sitemap o reemplazar la entrada por /nosotros/.
  3. post-sitemap.xml con lastmod 2024-11-17 — 17 meses sin posts. No tocar el sitemap (todos los posts existentes devuelven 200) pero publicar al menos 1 post antes de 2026-06-01 para refrescar.
  4. Disallow: /wp-json/wp/v2/users debajo del Sitemap: — funcional pero estilísticamente mal. Reordenar dentro del bloque User-agent: *.
  5. longitude con 4 decimalesfunctions.php:395. PHP serializa float -70.63280 como -70.6328 (pierde trailing zero). Cambiar a string '-70.63280' para forzar 5 decimales (~1.1 m de precisión).
  6. priceValidUntil = date('Y-12-31')functions.php:665. La cadena 'Y-12-31' produce hoy 2026-12-31 "por accidente" (PHP solo reemplaza Y, los -12-31 viajan como literal). El día 1 enero 2027 emitirá fecha pasada e invalidará el Offer. Cambiar a date('Y') . '-12-31'.
  7. seller en Product Offerfunctions.php:666-669. Apunta a Organization huérfana sin @id. Cambiar a {"@id": "https://www.fibrolab.cl/#localbusiness"} para vincular al grafo.
  8. Service schema con image vacía en /bordes-de-piscina/functions.php:549. Llenar URL real.
  9. WebPage ausente en páginas de servicio interiores/piscinas-de-fibra/, /spas/, /jacuzzi/, /bombas-de-calor/, /reparacion/ no emiten nodo WebPage. Solo home y producto. Reduce profundidad del knowledge graph. NEW.
  10. hasMap ausente del LocalBusiness — agregar misma URL del GBP.
  11. pys-version-script PixelYourSite con console.log en producción — Ruido. Filtrar vía script_loader_tag o configurar PixelYourSite. NEW.
  12. llms.txt incompleto vs spec: agregar ## Last-Updated: 2026-04-29, declaración de licencia (CC BY 4.0 o RSL), sección ## FAQ con 3-5 Q&A (incluyendo diferencia spa vs jacuzzi y costo instalación), ## Comparativa de Tipos de Piscina (replicar la tabla del sitio).
  13. FAQPage JSON-LD ausente — Las 5 páginas con FAQ HTML no emiten markup. Aunque Google restringió rich result a gov/health desde Aug 2023, AI engines (Perplexity, ChatGPT, AIO) siguen extrayendo FAQPage estructurado. Ganancia AI marginal pero gratuita.
  14. Authoritativeness — sin equipo, sin prensa, sin YouTube — Listar 1-2 personas en /nosotros/ con rol y años de oficio. Crear/enlazar canal YouTube si existe (correlación 0.737 con citación AI). Buscar y citar 1 mención de prensa o asociación gremial chilena (CChC, Cámara de Comercio).

BAJO (backlog)


Detalle por categoría

1. Technical SEO — 74/100

Confirmados PASS: - Critical CSS inlined, main CSS deferred (media=print onload). - Google Fonts self-hosted con preload + crossorigin. - jQuery con defer confirmado en HTML. - Canonical autorreferenciado en /, /piscinas-de-fibra/, /spas/, /jacuzzi/. - meta robots: index, follow en muestreo. - Hreflang es-CL + x-default correctos para sitio monolingüe. - HSTS preload, CSP completa, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, X-XSS-Protection. - Favicon HTML resuelto. - HTTP/2 + LiteSpeed cache HIT. - 79 imágenes en home, todas con width/height (CLS PASS).

Gaps activos: Title sin tilde (CRIT), meta desc 6 vs OG 10 años (CRIT), IndexNow key 404 (HIGH), GTM en head (HIGH), og:type: article en categorías (MEDIUM, NEW), robots.txt orden (LOW).

2. Content Quality / E-E-A-T — 55/100

Eje Score
Experience 52
Expertise 68
Authoritativeness 38
Trustworthiness 48

Fortalezas: RUT visible, NAP consistente, 1.000+ instalaciones declaradas, foundingDate y dirección coherentes entre schema y contenido visible, contenido técnico genuinamente experto en /reparacion/ (rodamina, ISO-NPG, ASTM C581) y /bombas-de-calor/ (COP, kWh/m³, inverter), garantía dual aclarada en /nosotros/, financiamiento con entidad nombrada (Forum Servicios Financieros S.A. — Grupo BBVA).

Debilidades: Cero personal nombrado en /nosotros/, sin Sernac/política privacidad/T&C, FAQ /piscinas-de-fibra/ con tono incongruente y "muchos años" vs foundingDate 2020, /spas/ y /jacuzzi/ thin content sin specs numéricas, testimonios sin comuna, /financiamiento-salvum/ sin CAE/tasas legales.

3. Schema / Datos estructurados — 62/100

Bien hecho: Rank Math @id alineado a #localbusiness, deduplicación Woo+RM activa, @context HTTPS, URLs absolutas en todas las propiedades, Service schema completo con provider @id, WebSite SearchAction presente en home.

Gaps críticos: hasMerchantReturnPolicy + shippingDetails ausentes en Product (CRIT, blocker Merchant Center), Manufacturer no en @type, postalCode placeholder, sameAs sin GBP, breadcrumb producto incompleto (falta nivel intermedio), AggregateRating sin reseñas en BD, seller huérfano, WebPage ausente en interiores, Speakable ausente en todo el sitio, priceValidUntil con bug latente para 2027, longitude 4 decimales por float PHP.

4. AI Search Readiness (GEO) — 52/100

Dimensión Peso Score
Citabilidad (pasajes definitorios) 25% 38
Legibilidad estructural 20% 62
Multi-modal (tablas) 15% 45
Autoridad / brand signals 20% 28
Accesibilidad técnica AI 20% 90

AI crawlers: GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended explícitamente permitidos. CCBot bloqueado. Excelente.

Bloqueantes: Pasajes definitorios ausentes en 4/6 URLs analizadas (sólo / y parcial /bombas-de-calor/); URL /spa-y-jacuzzi/ errónea en llms.txt impide resolución de la entidad jacuzzi por ChatGPT; Speakable schema ausente; FAQPage JSON-LD ausente; sin tabla comparativa fibra-hormigón-proyectada (#1 pasaje citable de la categoría); brand authority débil (sin equipo, sin prensa, sin YouTube).

5. Sitemaps — 61/100

Sitemap URLs Lastmod Estado
post-sitemap.xml 6 2024-11-17 STALE 17 m
page-sitemap.xml 11 2026-04-29 Fresco
product-sitemap.xml 29 2026-04-22 Aceptable
local-sitemap.xml 1 KML 2026-04-29 INVÁLIDO

47 URLs totales, todas las muestreadas devuelven 200, canonicals correctos. Issues: /bordes/ con noindex (debe ser 301), local-sitemap con KML único, post-sitemap stale.

6. Local SEO — 58/100 (informativo)

Dimensión Peso Score
GBP signals 25% 22
Reviews y reputación 20% 55
Local on-page 20% 68
NAP / citaciones 15% 72
Local schema 10% 78
Local link / authority 10% 9

NAP consistente entre footer (+56 9 8225 6792) y schema (+56982256792 E.164). El gap principal es la ausencia total de embed Google Maps + sameAs GBP + página /contacto/.

7. Performance (CWV proxy, sin datos de campo) — ~70/100

Mejoras desde audit anterior cierran muchos gaps: jQuery defer, critical CSS inline, fonts self-hosted, todas las imágenes con width/height. HTML home 125 KB (verificar brotli activo: curl -H 'Accept-Encoding: br' -sI https://www.fibrolab.cl/ | grep content-encoding). Quedan: GTM en head (no body open), key IndexNow 404, optimizar caché para producto/categoría.

8. Imágenes — 75/100

Todas con width/height (CLS PASS). Pendiente: alt text genérico en galerías ("Instalación Fibrolab N") — agregar comuna + modelo.


Acciones inmediatas recomendadas (≤4 horas de trabajo, máximo retorno)

  1. (15 min) Rank Math → Inicio: corregir tilde en "Fábrica" + unificar "X años" entre meta description y OG description.
  2. (15 min) llms.txt: cambiar /spa-y-jacuzzi/ por /jacuzzi/, agregar ## Last-Updated: 2026-04-29 y ## License: CC BY 4.0.
  3. (20 min) functions.php:349 agregar 'Manufacturer'. Línea :395 cambiar longitude a string. Línea :665 cambiar a date('Y') . '-12-31'. Línea :666-669 seller con @id #localbusiness.
  4. (30 min) Verificar postal code real de Los Álamos 2538 La Pintana en Correos de Chile y reemplazar 8830000 en :389.
  5. (30 min) front-page.php:208-268 agregar campo location (comuna, RM) a cada uno de los 10 testimonios y renderizar.
  6. (45 min) Insertar bloque definitorio (140-160 palabras) antes del grid de productos en /piscinas-de-fibra/, /spas/, /jacuzzi/, /reparacion/. Agregar Speakable JSON-LD apuntando al CSS selector del bloque.
  7. (1 h) Insertar tabla comparativa fibra vs hormigón vs proyectado en /piscinas-de-fibra/ y replicarla en llms.txt.
  8. (1 h) Agregar hasMerchantReturnPolicy + shippingDetails al Product Offer en functions.php:658-671 (bloqueador Merchant Center).

Estos 8 fixes elevan el score estimado de 63 → ~74-78.


Limitaciones de esta auditoría