Auditoría SEO Unificada — fibrolab.cl (v3 — 2026-04-28)
Re-auditoría con 8 subagentes especializados (Technical, Content/E-E-A-T, Schema, Sitemap, Performance, GEO, Local, Visual). Compara contra
seo-audit-2026-04-27-v2.md(v1 día anterior). Auditoría hecha sobre el sitio LIVE en producción y cruzada con el árbol de archivos local que tiene cambios SIN DESPLEGAR.
Puntaje de Salud SEO: 61 / 100
| Categoría | Peso | v3 | v2 | Δ | Ponderado |
|---|---|---|---|---|---|
| SEO Técnico | 22% | 64 | 68 | −4 | 14.08 |
| Contenido / E-E-A-T | 23% | 59 | 54 | +5 | 13.57 |
| SEO On-Page (visual+local+sitemap) | 20% | 55 | 65 | −10* | 11.00 |
| Datos Estructurados (Schema) | 10% | 71 | 68 | +3 | 7.10 |
| Rendimiento (CWV) | 10% | 58 | 60 | −2 | 5.80 |
| Búsqueda con IA (GEO) | 10% | 70 | 67 | +3 | 7.00 |
| Imágenes | 5% | 50 | 45 | +5 | 2.50 |
| Total | 61.05 |
* La caída de "On-Page" refleja un desglose más granular esta vez: visual=62, local=44, sitemap=72. En v2 era un único score consolidado.
Hallazgo central: el equipo hizo cambios significativos en disco (functions.php +622 líneas, single-product.php reescrito, front-page.php 45 líneas, page-bombas/bordes/cobertor) pero ninguno está desplegado a producción. El score real al deploy + 3 fixes de panel (Rank Math/LiteSpeed) sería ~75/100.
Tipo de negocio: Negocio local híbrido — fábrica (Los Álamos 2538, La Pintana, RM) + área de servicio nacional. Vertical: construcción (HomeAndConstructionBusiness + LocalBusiness). RUT 77.424.952-4. Fundada 2020.
Δ Verificado vs v2 (2026-04-27)
✅ Resuelto en LIVE
| Issue v2 | Estado v3 |
|---|---|
/spa-y-jacuzzi/ competía con /spas/ (C3) |
PARCIAL: /spa-y-jacuzzi/ → 301 → /jacuzzi/. Ya no es duplicado. PERO /spas/ sigue 200 con canonical self → conflicto migrado a /spas/ vs /jacuzzi/ (ambos 200, ambos en sitemap). Sin redirect canónico. |
/tienda2/ indexable (C2) |
PARCIAL: ahora 301 → /piscinas-de-fibra/. Eliminado de page-sitemap.xml. Sigue presente en product-sitemap.xml como primera entrada. |
| Author enumeration (M2) | PARCIAL: robots.txt bloquea /?author= y /author/. El 301 va al home sin exponer username. Falta el filtro PHP. |
🔄 Aún OPEN en LIVE (verificado nuevamente)
| Issue | Estado |
|---|---|
C1 — Swiper render-blocking en <head> |
OPEN. En LIVE: <script src=".../swiper-bundle.min.js" data-no-defer="1"> sin defer/async. Hallazgo nuevo: functions.php local marca in_footer=true (línea 185), pero LiteSpeed Cache lo está sobreescribiendo y subiéndolo al <head>. El deploy del archivo no basta — requiere ajuste en panel LiteSpeed. |
| C5 — Contradicción +500 vs +1.000 instalaciones | OPEN en LIVE. Fix en disco (front-page.php) pendiente deploy. |
| H1 — Google Fonts + Font Awesome render-blocking | OPEN. Sin técnica media="print" onload. cdnjs FA ~19 KB + 3 familias Fonts síncronas. |
| H2 — H1 enterrado en home | OPEN en LIVE — confirmado visualmente. El hero no tiene <h1> HTML; el único <h1> aparece en byte 103.826 de 110.000 (penúltimo heading). Fix en disco pendiente deploy. |
H4 — /nosotros/ thin sin fundador |
PARCIAL: ahora 495 palabras (era 289). Sigue thin (mínimo 600). Fundador continúa sin nombre público. |
| H5 — Service schema faltante | PARCIAL en LIVE: presente en /piscinas-de-fibra/, /bombas-de-calor/, /jacuzzi/. Sigue ausente en /spas/, /bordes-de-piscina/, /paneles-solares/. Fix en disco pendiente deploy. |
H6 — FAQPage en /bordes-de-piscina/ |
OPEN. La página tiene 5 items FAQ HTML sin emitir JSON-LD. |
| H7 — Article en páginas comerciales | OPEN. Rank Math sigue emitiendo Article en /spas/, /jacuzzi/, /bombas-de-calor/, /bordes-de-piscina/, /paneles-solares/, /nosotros/. |
| H8 — Testimonios reciclados sin fechas | AGRAVADO. Detectado: testimonio de Katherine Meller sobre "bomba de calor" aparece en /jacuzzi/ (contexto incorrecto). Isabela Mora habla de "borde atérmico" en /jacuzzi/. Patrón clásico de testimonios manipulativos según QRG Sept 2025. |
| H9 — Sin captación de Google Reviews | OPEN. fl-reviews.php solo captura WC reviews on-site. |
| H10 — 0 service-area pages publicadas | OPEN AGRAVADO. local-sitemap.xml solo apunta a locations.kml. Cero comunas. |
| M3 — IndexNow ausente | OPEN. /indexnow.txt 404. |
| M4 — sameAs solo FB+IG | OPEN. Sin GBP, YouTube, LinkedIn, Wikidata. |
M5 — FAQPage /bombas-de-calor/ cubre solo 4 de 5 Q-A |
OPEN. |
M7 — Sin AboutPage / Organization.taxID / founder |
OPEN. |
M9 — Sin dateModified |
OPEN. |
| M10 — Tono coloquial / AI patterns | OPEN. /reparacion/ con redacción circular. |
| M11 — Boilerplate garantías idéntico | OPEN. Verbatim entre home y /nosotros/. |
| M13 — Sin embed Google Maps | OPEN. |
| M14 — Geo 5 decimales | OPEN (precisión OK, posición pin no verificada). |
M15 — priceRange "$$" |
OPEN. |
| M6 — llms.txt URLs rotas | PARCIAL. /bordes-de-piscinas/ y /cotizar/ arreglados. Nuevas roturas detectadas: /spa-y-jacuzzi/ (301 → /jacuzzi/) y /cobertor-de-seguridad/ (301 → /modelo/cobertor-de-seguridad-para-piscinas/). |
🔴 CRÍTICO
C1. Meta description "más de 10 años de experiencia" es factualmente falsa
Hallazgo nuevo no detectado en v2. La meta description del home y de /revestimiento-fibra-de-vidrio/ afirma "más de 10 años de experiencia". El propio <h1> del home dice "desde 2020" (= 6 años en 2026). Misma contradicción aparece en OG description y Twitter card.
Impacto: Riesgo directo de Trustworthiness. Un quality rater verifica "About this result" → ve texto contradictorio en una sola página.
Cómo: Rank Math → Titles & Meta → Homepage description: cambiar a "desde 2020" o "+5 años de experiencia". Revisar también page-revestimiento-fibra-de-vidrio.php:26. 5 minutos.
C2. Swiper render-blocking — fix en disco pero LiteSpeed lo sobreescribe
Hallazgo refinado. functions.php (disco) marca Swiper con in_footer=true (línea 185) y excluye de defer/optimize de LiteSpeed (líneas 219-238). En LIVE el <script> sigue en <head> sin defer porque LiteSpeed Cache mueve scripts excluidos al head para evitar conflictos. El deploy del archivo solo no resuelve el issue.
Cómo:
1. Desplegar functions.php.
2. En LiteSpeed Cache → Page Optimization → JS Settings: confirmar que swiper-bundle.min.js no esté en una regla que lo fuerce al head. Idealmente usar defer desde el enqueue:
// En functions.php, en wp_enqueue_script: usar argumento $in_footer = true Y filtro de defer:
add_filter( 'script_loader_tag', function( $tag, $handle ) {
if ( $handle === 'swiper' ) {
return str_replace( '<script ', '<script defer ', $tag );
}
return $tag;
}, 10, 2 );
- Si Swiper debe estar listo antes de DOMContentLoaded para evitar FOUC: pintar el primer slide como
<picture>estático y diferir Swiper.
Impacto LCP esperado: −0.4 a −0.8 s.
C3. /spas/ y /jacuzzi/ en competencia (C3 v2 migrado)
Tras el 301 de /spa-y-jacuzzi/ → /jacuzzi/, ahora /spas/ (200, canonical self, en sitemap) y /jacuzzi/ (200, canonical self, en sitemap) compiten por la misma intent ("hot tub / spa / jacuzzi"). El home enlaza a /spas/; /jacuzzi/ es la página más rica.
Cómo: Decidir canónica única. Recomendado: 301 /spas/ → /jacuzzi/. Actualizar enlaces internos. Sacar /spas/ del sitemap.
C4. Contradicción +500 vs +1.000 instalaciones (C5 v2 sin desplegar)
Persiste en LIVE: page-nosotros.php:47 muestra "+500 Proyectos"; front-page.php:331 afirma "+1.000 instalaciones". Fix existe en disco — desplegar.
Cómo: Deploy de front-page.php + cambio del data-counter en page-nosotros.php:47 a 1000 (o aclaración explícita "+500 piscinas / +1.000 trabajos totales").
C5. /producto/minipiscina/ sin Product schema
Hallazgo nuevo. Single-product LIVE emite solo CollectionPage (Rank Math) — sin Product, sin Offer, sin AggregateRating. Sin schema Product no hay elegibilidad para rich results de Google Shopping.
Cómo: Desplegar /wp-content/themes/fibrolab/woocommerce/single-product.php (reescrito). Verificar que fibrolab_schema_product se dispare en is_singular('product').
C6. /page/2/ duplicado exacto del home, indexable
Hallazgo nuevo. https://www.fibrolab.cl/page/2/ retorna 200, <meta name="robots" content="follow, index">, canonical apunta al home. Contenido prácticamente idéntico al home (119.614 vs 119.725 bytes). Señal contradictoria: canonical correcto pero indexable.
Cómo: En functions.php:
add_filter( 'rank_math/robots', function( $robots ) {
if ( is_paged() ) { $robots[] = 'noindex'; }
return $robots;
});
C7. Imágenes generadas por ChatGPT en producción (C4 v2)
9 archivos ChatGPT-Image-Apr-*.png confirmados en /wp-content/uploads/2025/04/. Si están en galerías de productos, contradicen "fábrica real" → señal E-E-A-T negativa directa.
Cómo: find /root/Proyecto_compartido/fibrolab.cl/wp-content/uploads/ -iname "ChatGPT-Image*" -delete y reemplazar por fotos reales en wp-admin.
🟠 ALTO
H1. CSS render-blocking (Google Fonts 3 familias + Font Awesome cdnjs)
Sin técnica media="print" onload. Tamaño FA ~19 KB comprimido + latencia 2 conexiones externas.
Cómo: Patrón print/onload swap o reemplazar FA por SVGs inline para los 4-6 íconos efectivamente usados:
<link rel="stylesheet" href="..." media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="..."></noscript>
H2. Hero PNG de 1.75 MB como fallback activo
Existe otono.png.webp (148 KB) servido vía <picture>, pero el <img src> apunta al PNG. Browsers que negocien el WebP están bien; el PNG sigue descargable y es la imagen que algunos parsers de Lighthouse miden como LCP.
Cómo: Convertir otono.png a AVIF (target <80 KB) y WebP (existe). Cambiar <img src> al WebP. Activar LiteSpeed Image Optimization para el resto del media library (64 imágenes aún sin WebP).
H3. Cache-Control no-store, private en páginas de producto WooCommerce
Hallazgo nuevo. /producto/* devuelve cache-control: no-store, private aunque x-litespeed-cache: hit. El cliente no cachea. TTFB observado en /producto/minipiscina/: 1.71 s.
Cómo: Verificar en LiteSpeed Cache → Cache → Do Not Cache que las páginas de producto no estén excluidas para cookies de carrito vacío. Investigar si WC fuerza cookie de sesión a usuarios anónimos.
H4. /tienda2/ sigue en product-sitemap.xml
Tras el 301, sigue siendo la primera entrada del sitemap de productos.
Cómo: Rank Math → Sitemap → Excluir página /tienda2/. 5 minutos.
H5. Service schema faltante en /spas/, /bordes-de-piscina/, /paneles-solares/
El fix en fibrolab_schema_service (functions.php disco) cubre algunos pero no todos. Desplegar y verificar mapeo de slugs.
H6. FAQPage en /bordes-de-piscina/ sin emitir
La página tiene 5 items FAQ HTML ricos (200+ palabras por respuesta) que no son machine-readable. Pierde elegibilidad SGE/AI Overviews.
Cómo: Añadir bloque JSON-LD antes de get_footer():
$faq = [
['q'=>'¿Qué es un borde atérmico?', 'a'=>'Los bordes atérmicos son piezas prefabricadas en hormigón polimérico reforzado...'],
// ... 5 items
];
$schema = ['@context'=>'https://schema.org','@type'=>'FAQPage','mainEntity'=>array_map(fn($i)=>['@type'=>'Question','name'=>$i['q'],'acceptedAnswer'=>['@type'=>'Answer','text'=>$i['a']]],$faq)];
echo '<script type="application/ld+json">'.wp_json_encode($schema, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE).'</script>';
H7. Rank Math Article en páginas comerciales
6 páginas comerciales (/spas/, /jacuzzi/, /bombas-de-calor/, /bordes-de-piscina/, /paneles-solares/, /nosotros/) emiten @type: Article. Misrepresenta el propósito.
Cómo: En cada página, Rank Math → Schema → cambiar a WebPage/CollectionPage. O filtro:
add_filter( 'rank_math/json_ld', function( $data, $jsonld ) {
if ( is_page( ['spas','jacuzzi','bombas-de-calor','bordes-de-piscina','paneles-solares','nosotros'] ) ) {
unset( $data['richSnippet'] );
}
return $data;
}, 99, 2 );
H8. Testimonios fuera de contexto en /jacuzzi/ (H8 v2 agravado)
Testimonio de Katherine Meller habla de "bomba de calor" en página de jacuzzi. Isabela Mora menciona "borde atérmico" en página de jacuzzi. Patrón QRG Sept 2025 = manipulativo.
Cómo: Anclar cada testimonio a su servicio. Añadir fecha + comuna + foto verificable. Mínimo 3 testimonios contextuales por página, no boilerplate rotado.
H9. /paneles-solares/ afirmación sin fuente "hasta 90%"
"Reduce hasta un 90% tu cuenta de electricidad" sin referencia técnica, sin perfil del cliente. Sin certificación SEC visible. Recomendación "Off Grid es la mejor opción" sin criterio. Riesgo de contenido oportunista fuera del core business.
Cómo: Citar fuente (CNE / Fraunhofer / SEC), agregar disclaimer "depende del consumo y radiación zonal", y aclarar el partner instalador SEC si existe.
H10. /revestimiento-super-brite/ thin (601 palabras) sin H1
Hallazgo nuevo. La primera sección es un H2; sin diferenciador vs fibra de vidrio, sin precios m², sin proceso. Genérico.
Cómo: Añadir H1, expandir a 800+ palabras con tabla comparativa Super Brite vs fibra de vidrio, costo por m² orientativo, fotos del proceso.
H11. 0 service-area pages publicadas + local-sitemap solo con KML (H10 v2)
local-sitemap.xml solo apunta a locations.kml. Cero comunas. template-comuna.php listo. Es la mayor brecha local.
Cómo: Lanzar 4 comunas iniciales del Gran Santiago (Maipú, Puente Alto, La Florida, San Bernardo) usando template-comuna.php, cada una con 1 testimonio real + fl_comuna_distancia_km. Después: Las Condes, Viña del Mar, Quilpué, Rancagua. No superar 15 sin instalación citable por ciudad.
H12. Sin proceso de captación de Google Reviews (H9 v2)
Sin shortlink GBP en flujo post-venta. La regla 18-day de Sterling Sky implica caída en local pack si pasan >3 semanas sin nueva review.
Cómo: En fl-reviews.php, tras WC order completed + 7 días, añadir email/WhatsApp con https://g.page/r/XXXXX/review. Meta: 2+ reviews/mes.
🟡 MEDIO
M1. Redirect /tienda2/ apunta a /piscinas-de-fibra/ (semánticamente incorrecto)
Debería redirigir a /tienda/ (shop archive real) o recibir noindex + canonical.
M2. Sin hreflang es-CL ni x-default
Sitio nacional chileno sin geotargeting explícito. Solo og:locale=es_CL.
<link rel="alternate" hreflang="es-CL" href="https://www.fibrolab.cl/" />
<link rel="alternate" hreflang="x-default" href="https://www.fibrolab.cl/" />
M3. Sin Vary: Accept-Encoding en headers
LiteSpeed → Cache → Browser Cache → activar Vary, o .htaccess:
Header append Vary Accept-Encoding
M4. priceRange "$$" poco informativo (M15 v2)
Cambiar a "Desde CLP 1.790.000" o rango explícito CLP.
M5. NAP inconsistente: 3 variantes de name
<title> home: "Fabrica de Piscinas FIBROLAB". Schema/footer: "Fibrolab". Añadir alternateName en schema:
"name": "Fibrolab",
"alternateName": "Fábrica de Piscinas Fibrolab"
M6. Schema LocalBusiness incompleto: faltan taxID, founder, hasMap
RUT 77.424.952-4 solo en footer HTML, no en JSON-LD. Sin hasMap (URL GBP). Sin nombre del fundador.
M7. sameAs: ausente GBP, YouTube, LinkedIn, Wikidata (M4 v2)
Correlación YouTube ↔ citaciones AI ~0.737. Crear canal con 3 videos + perfil LinkedIn corporativo.
M8. llms.txt con 2 URLs en 301 (M6 v2 parcial)
/spa-y-jacuzzi/→ reemplazar por/jacuzzi//cobertor-de-seguridad/→ reemplazar por/modelo/cobertor-de-seguridad-para-piscinas/o eliminar- Añadir dirección completa "Los Álamos 2538, La Pintana, RM" (hoy truncada).
M9. Sin dateModified (M9 v2)
Bajo expectativas freshness Dec 2025, páginas con precios lucen estáticas.
M10. Embed Google Maps ausente (M13 v2)
CSP ya permite frame-src google.com. Añadir iframe en footer//contacto/.
M11. Boilerplate garantías idéntico home/nosotros (M11 v2)
3 cards de garantía verbatim entre front-page.php:302-318 y page-nosotros.php:167-191.
M12. /reparacion/ redacción circular AI-generated (M10 v2)
"Muchas veces la suerte no se encuentra de nuestro lado..." → reescribir con plazos, materiales, precios orientativos.
M13. /spas/ sin H1 propio + sin diferenciador técnico
Empieza con "SPA Hot Tub" sin explicar diferencia. Sin specs jets/litros/potencia.
M14. /instrucciones-de-uso/ (410 palabras) — solo enlace a PDF
Inserir contenido del manual como HTML inline (filtrado, química, mantenimiento semanal) para indexación.
M15. post-sitemap.xml estancado 17 meses
Lastmod 2024-11-17. Reactivar blog (1 post/mes en temporada): "precio piscina fibra Chile 2026", "mantenimiento invierno", comparativas Aquark.
M16. product_cat-sitemap.xml solo 1 URL
Solo /producto/minipiscina/. Faltan categorías esperadas (piscinas, bombas, spas, cobertores). Revisar visibilidad de catálogo en WooCommerce.
M17. local-sitemap.xml indexa locations.kml no páginas
Si no hay comunas publicadas, desactivar el sub-sitemap en Rank Math hasta tenerlas.
M18. IndexNow ausente (M3 v2)
/indexnow.txt 404. Instalar Bing URL Submissions Plugin o hook transition_post_status.
M19. Author entity = "Admin" en /nosotros/
JSON-LD emite "name":"Admin" como Person. Para AI E-E-A-T, "Admin" no aporta credibilidad. Cambiar display name del usuario WP a nombre real del responsable.
M20. /financiamiento-salvum/ no identifica operador en H1
Salvum (operado por Forum Servicios Financieros S.A.) — la CMF exige identificar al acreedor en prominencia. H1 actual: "Financiamiento de hasta el 100%".
🟢 BAJO
| ID | Hallazgo | Fix |
|---|---|---|
| L1 | X-XSS-Protection: 1; mode=block obsoleto |
Eliminar header en LiteSpeed/Apache |
| L2 | PDF de manual link no-www (page-instrucciones-de-uso.php:41) |
Añadir www. |
| L3 | Inconsistencia formato teléfono (+56 9 8225 6792 vs +56982256792) |
Estandarizar |
| L4 | data-counter="6" (años experiencia) hardcoded en page-nosotros.php:63 |
<?php echo date('Y') - 2020; ?> |
| L5 | paneles-solares-familia-1024x683.png apariencia stock-photo |
Verificar / reemplazar |
| L6 | RSS feed link en <head> con post sitemap stale |
Decidir si publicar blog o remove_action('wp_head','feed_links',2) |
| L7 | 64 imágenes sin WebP/AVIF | Activar LiteSpeed Image Optimization |
| L8 | <noscript> opacity hack WC |
Default WC, no SEO issue |
| L9 | WhatsApp bubble z-index check en mobile | Testear superposición con CTAs |
| L10 | /nosotros/ H1 genérico ("Nosotros") |
Cambiar a "Fábrica chilena de piscinas de fibra de vidrio" |
Inventario Schema (LIVE — actualizado v3)
| Página | @types live | Service | FAQPage | Notas |
|---|---|---|---|---|
/ |
LocalBusiness, HomeAndConstructionBusiness, WebSite, WebPage, ImageObject | n/a | n/a | OK, sameAs incompleto |
/piscinas-de-fibra/ |
Article, Service, FAQPage, BreadcrumbList | ✅ | ✅ | Article a remover |
/bombas-de-calor/ |
Article, Service, FAQPage, BreadcrumbList | ✅ | ⚠️ 4/5 Q-A | Article a remover |
/spas/ |
Article, FAQPage, BreadcrumbList | ❌ | ✅ | Article + Service faltantes |
/jacuzzi/ |
Article, Service, FAQPage, BreadcrumbList | ✅ | ✅ | Article a remover |
/bordes-de-piscina/ |
Article, BreadcrumbList | ❌ | ❌ | + Article a remover |
/cobertor-de-seguridad/ |
(301 → producto) | n/a | n/a | Redirige a producto WC |
/paneles-solares/ |
Article, FAQPage, BreadcrumbList | ❌ | ✅ | Article + Service faltantes |
/nosotros/ |
Article, BreadcrumbList | n/a | n/a | + AboutPage a añadir |
/producto/minipiscina/ |
CollectionPage, BreadcrumbList | n/a | n/a | Sin Product schema |
Inventario Sitemap (v3)
| Sub-sitemap | URLs | Δ vs v2 | Issues |
|---|---|---|---|
page-sitemap.xml |
12 | −1 | /tienda2/ removido ✅; /spas/ y /jacuzzi/ ambos presentes |
product-sitemap.xml |
30 | 0 | Primera entrada sigue /tienda2/ ❌ |
product_cat-sitemap.xml |
1 | 0 | Solo /producto/minipiscina/ |
post-sitemap.xml |
6 | 0 | Lastmod 2024-11-17 (stale) |
local-sitemap.xml |
1 (KML) | 0 | Sin páginas reales |
Plan de acción priorizado
Hoy / 1 día — Deploy + 3 ajustes de panel (impacto +12-14 puntos de score)
- Deploy del árbol local (
functions.php,front-page.php,single-product.php,page-bombas-de-calor.php,page-bordes-de-piscina.php,page-cobertor-de-seguridad.php,assets/) — resuelve H2/C4/C5/H5(parcial)/M5(parcial). - Rank Math → Titles & Meta → Home description: cambiar "10 años" por "desde 2020". (C1)
- Rank Math → Sitemap → Excluir
/tienda2/del product-sitemap. (H4) - LiteSpeed Cache → JS Settings: validar que Swiper no se fuerce al head; añadir
deferpor filtro PHP. (C2)
1 semana — Críticos restantes + altos
- 301
/spas/→/jacuzzi/. (C3) noindexenis_paged(). (C6)- Eliminar
ChatGPT-Image-*.pngy reemplazar fotos. (C7) - Filtro Rank Math para suprimir
Articleen páginas comerciales. (H7) - Optimizar PNG hero a AVIF + WebP (eliminar fallback PNG 1.75 MB). (H2)
- Investigar
Cache-Control: no-storeen productos. (H3) - Añadir
FAQPageJSON-LD a/bordes-de-piscina/. (H6) - Anclar testimonios al servicio correcto (eliminar Katherine Meller / Isabela Mora de
/jacuzzi/). (H8) - Añadir disclaimer / fuente al "90%" de
/paneles-solares/. (H9)
1 mes — Altos restantes + medios
- Publicar 4 service-area pages: Maipú, Puente Alto, La Florida, San Bernardo. (H11)
- Implementar shortlink GBP en flujo post-venta. (H12)
- Pattern
media="print" onloadpara fonts/FA. (H1) - Expandir
/nosotros/con fundador, RUT inline, anécdota 2020, certificaciones. AñadirAboutPageschema +Organization.taxID/founder. (M6) - Añadir GBP/YouTube/LinkedIn a
sameAs. Crear canal YouTube con 3 videos. (M7) - Embed Google Maps en footer. (M10)
- Reescribir
/reparacion/y/spas/con specs reales. (M12, M13) - Inline contenido del manual en
/instrucciones-de-uso/. (M14) - Añadir hreflang
es-CL+x-default. (M2) - Corregir 2 URLs en llms.txt + dirección completa. (M8)
- Implementar IndexNow. (M18)
- Reactivar blog: 1 post/mes en temporada. (M15)
- Cambiar author entity de "Admin" a nombre real. (M19)
Tracking
- Re-auditar en 2 semanas (post-deploy).
- Configurar Google API key (CrUX/PSI/GSC) para field data:
python3 /root/.claude/skills/seo/scripts/google_auth.py.
Limitaciones del reporte
- Sin field data CrUX/PSI ni GSC (sin credenciales Google API). Estimaciones de Performance son lab-equivalent.
- GBP live: sin acceso a panel; CID, categoría primary, conteo de reviews y posición en map pack no verificables sin DataForSEO o Search Console.
- Citation audit (amarillas.cl, Houzz, MercadoLibre Chile) no verificado en vivo.
aggregateRatingreal de WooCommerce no accesible sin BD.- Pin GBP vs entrada física de fábrica no verificado en Street View.