# Sitemap SEO — Labento (estrategia de marca + crawl)

> **Fecha:** 2026-08-06  
> **Rol:** arquitectura de URLs indexables alineada al posicionamiento de marca.  
> **Complementa:** [`PLAN_SEO.md`](./PLAN_SEO.md), [`CONTEXTO_SEO.md`](./CONTEXTO_SEO.md),  
> [`MANUAL_IDENTIDAD_PUBLICA.md`](./MANUAL_IDENTIDAD_PUBLICA.md).  
> **Implementación técnica:** `GET /sitemap.xml` → `App\Controllers\Seo::sitemap`  
> (referenciado en `GET /robots.txt`).

---

## 1. Posicionamiento → qué debe indexar Google

| Elemento de marca | Valor canónico | Implicación SEO |
|-------------------|----------------|-----------------|
| **Marca** | Labento (Branded House) | Brand queries → `/` |
| **Categoría** | Software / LIMS SaaS para laboratorios clínicos | KW primaria en title/schema de `/` |
| **Beneficio** | Un solo sistema: **caja → lab → resultados** | Anclas de landing y futuro cluster de contenido |
| **CTA** | Crear laboratorio en minutos | `/registro` es la URL de conversión |
| **Pricing (voz obligatoria)** | **$0 en fase de desarrollo** · precios **por determinarse** · sin tarjeta | Meta + schema + FAQ; nunca “gratis para siempre” |
| **Confianza (EEAT)** | Aviso LFPDPPP + términos de uso | `/privacidad`, `/terminos` indexables, prioridad baja |

**Outcome de SERP deseado**

1. Query brand *Labento* → snippet de `/`.  
2. Query non-brand *software para laboratorios clínicos* → `/` con title/description controlados.  
3. Intent transaccional “crear / probar lab” → `/registro`.  
4. Queries legales/confianza → `/privacidad` o `/terminos` (soporte EEAT, no tráfico principal).

---

## 2. Mapa de superficie (indexable vs no)

```
                    LABENTO — SUPERFICIE PÚBLICA
┌─────────────────────────────────────────────────────────────┐
│  INDEX (sitemap + index,follow)                             │
│  ┌──────────┐  ┌──────────┐  ┌────────────┐  ┌──────────┐  │
│  │    /     │  │ /registro│  │ /privacidad│  │ /terminos│  │
│  │  home    │  │  trial   │  │  EEAT      │  │  EEAT    │  │
│  │  prio 1.0│  │  prio 0.9│  │  prio 0.4  │  │  prio 0.4│  │
│  └──────────┘  └──────────┘  └────────────┘  └──────────┘  │
├─────────────────────────────────────────────────────────────┤
│  NO INDEX (robots Disallow y/o meta noindex)                │
│  /login · /r/* · /s/* · backoffice (/dashboard, /ordenes…)  │
│  /ayuda · /documentacion · /feedback · /notificaciones …    │
└─────────────────────────────────────────────────────────────┘
```

### 2.1 Incluir en `sitemap.xml` (Now — ya en código)

| URL | Rol de marca | priority | changefreq | Notas |
|-----|--------------|----------|------------|-------|
| `/` | Home de producto + narrativa PAS | **1.0** | weekly | KW primaria, JSON-LD SoftwareApplication + FAQPage |
| `/registro` | Conversión trial | **0.9** | monthly | Title/description propios; sin schema Review |
| `/privacidad` | Confianza / LFPDPPP | **0.4** | yearly | EEAT; no competir por KW de producto |
| `/terminos` | Confianza / reglas de uso | **0.4** | yearly | Mismo criterio |

### 2.2 Excluir siempre del sitemap

| URL / patrón | Motivo |
|--------------|--------|
| `/login` | Auth; **noindex, follow** |
| `/r/*`, `/s/*` | Portal resultados (PHI / tokens); noindex + Disallow |
| Todo backoffice | Auth + noindex + Disallow en robots |
| `/ayuda`, `/documentacion` | Solo autenticados |
| Errores 404/500 | noindex en vistas de error |
| Anchors de landing (`/#faq`, `/#funciones`…) | **No son URLs separadas**; no van al sitemap XML |

---

## 3. Arquitectura de información (landing como hub)

La home concentra el journey. Los anchors son **navegación interna**, no páginas SEO distintas:

| Anchor | Sección | Intent de marca |
|--------|---------|-----------------|
| (hero) | Hero + CTA | Categoría + beneficio + pricing honesto |
| `#problema` | PAS | Dolor del dueño de lab |
| `#funciones` | Features 3×2 | Pilares de producto |
| `#como-funciona` | 3 pasos | Reducir fricción al trial |
| `#trial` | Acceso $0 | Objeción de precio |
| `#para-quien` | Fit / no-fit | Calificación de lead |
| `#testimonios` | Escenarios por rol | **No reseñas de terceros** (no schema Review) |
| `#faq` | FAQ | Objeciones; fuente del `FAQPage` JSON-LD |

**Flujo de conversión (crawl + humano)**

```
Google / social / referral
        │
        ▼
   [/] Landing  ──anchors──►  entender producto
        │
        ├── CTA ──►  [/registro]  ──►  trial (auth app)
        │
        └── footer ──►  [/privacidad] · [/terminos]  (confianza)
```

---

## 4. Pilares de mensaje → clusters de contenido (Next / Later)

Arquitectura de marca (Branded House) aplicada a **contenido futuro**.  
**No crear blog ni landings extra** hasta baseline de impresiones en GSC (`PLAN_SEO` kill criteria).

### Pilar A — Caja / POS

| | |
|--|--|
| **Mensaje** | Cobrar y cotizar sin salir del flujo del laboratorio |
| **Prueba en producto** | Cotización, carrito, abonos, folio por sucursal |
| **URL candidata (Later)** | `/funciones/punto-de-venta` o guía `/guias/como-cobrar-en-laboratorio` |
| **KW de apoyo** | software laboratorio punto de venta, cotización laboratorio clínico |

### Pilar B — Laboratorio / captura

| | |
|--|--|
| **Mensaje** | Ordenes y resultados en un tablero, no en Excel ni XML |
| **Prueba** | Kanban lab, capturas, `campos_resultado` |
| **URL candidata** | `/funciones/laboratorio` · guía LIMS en la nube |
| **KW de apoyo** | LIMS laboratorio clínico, sistema de laboratorio en la nube |

### Pilar C — Entrega de resultados

| | |
|--|--|
| **Mensaje** | Entrega al paciente/médico sin fricción (portal + PDF) |
| **Prueba** | Portal `/r` y `/s` (operativos; **no indexables**) |
| **URL candidata** | `/funciones/resultados` (marketing, sin tokens reales) |
| **KW de apoyo** | entrega de resultados laboratorio, portal resultados pacientes |

### Pilar D — Confianza y compliance

| | |
|--|--|
| **Mensaje** | Datos clínicos con reglas claras (LFPDPPP, roles) |
| **URLs Now** | `/privacidad`, `/terminos` |
| **Later** | Solo si GSC muestra queries legales o sales pide one-pager |

### Pilar E — Pricing / acceso (sin inventar planes)

| | |
|--|--|
| **Mensaje** | $0 en desarrollo; precios por determinarse; sin tarjeta |
| **URL Now** | Ancla `#trial` + FAQ en `/`; conversión en `/registro` |
| **URL Next (opcional)** | `/precios` solo si se necesita landing dedicada — **misma voz**, sin tiers inventados |

---

## 5. Sitemap XML canónico (contrato técnico)

**Endpoint:** `https://{DOMINIO_CANONICO}/sitemap.xml`  
**Generado por:** `Seo::sitemap` con `base_url()` (no hardcodear dominio en repo).

```xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://DOMINIO/</loc>
    <lastmod>YYYY-MM-DD</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://DOMINIO/registro</loc>
    <lastmod>YYYY-MM-DD</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://DOMINIO/privacidad</loc>
    <lastmod>YYYY-MM-DD</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.4</priority>
  </url>
  <url>
    <loc>https://DOMINIO/terminos</loc>
    <lastmod>YYYY-MM-DD</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.4</priority>
  </url>
</urlset>
```

`robots.txt` debe incluir:

```txt
Sitemap: https://DOMINIO/sitemap.xml
```

### Gobernanza (regla de producto)

1. **Toda URL de marketing nueva** (p. ej. `/precios`) se añade a `Seo::sitemap` **y** al footer si es permanente.  
2. **Nunca** reintroducir `public/robots.txt` con `Disallow: /` (el estático pisa la ruta CI).  
3. Portal y app **fuera** del sitemap aunque sean “públicas” en el sentido de sin login parcial.  
4. Al publicar página nueva: title único, description con pricing honesto si es comercial, canonical vía `opengraph`.  
5. Schema `Review` **prohibido** sobre escenarios por rol (no son reseñas de terceros).

---

## 6. Prioridad de indexación (ops)

| Paso | Acción | Dueño |
|------|--------|--------|
| 1 | `app.baseURL` = HTTPS canónico en prod | Ops |
| 2 | Verificar propiedad en Google Search Console | Ops / Product |
| 3 | Enviar `https://DOMINIO/sitemap.xml` | Ops |
| 4 | Confirmar que el edge **no** sirve robots estático viejo | Ops |
| 5 | 14–28 días: `/` y `/registro` en estado *Indexed* | Métrica |

---

## 7. Roadmap de URLs (Now / Next / Later)

| Horizonte | URLs | Objetivo de marca |
|-----------|------|-------------------|
| **Now** | `/`, `/registro`, `/privacidad`, `/terminos` | Encontrar + entender + confiar + convertir |
| **Next** | Opcional `/precios` (misma voz $0/TBD); contact real en footer | Reducir fricción de decisión |
| **Later** | Cluster por pilares A–C (1 URL fuerte por pilar o guías) | Non-brand volume **después** de baseline GSC |
| **No** | Blog masivo, comparativas inventadas, SEO de backoffice | Ruido y riesgo de thin content |

---

## 8. Checklist de aceptación (sitemap v1)

- [x] `GET /sitemap.xml` responde 200 y XML válido  
- [x] Solo 4 URLs de marketing (sin login, portal ni app)  
- [x] Priorities 1.0 / 0.9 / 0.4 / 0.4  
- [x] Referenciado en `robots.txt` vía `base_url('sitemap.xml')`  
- [x] `/privacidad` y `/terminos` en sitemap + footer  
- [x] `lastmod` en cada entrada del XML  
- [ ] GSC: propiedad verificada + sitemap enviado en **producción**  
- [ ] Sin `public/robots.txt` bloqueante en prod  

---

## 9. Referencias de código

| Archivo | Rol |
|---------|-----|
| `app/Controllers/Seo.php` | Genera robots + sitemap |
| `app/Config/Routes.php` | `sitemap.xml`, `robots.txt`, legales |
| `app/Controllers/Legal.php` | `/privacidad`, `/terminos` |
| `app/Views/partials/jsonld_landing.php` | Schema home |
| `app/Views/layouts/public.php` | Footer + links legales |
| `tests/unit/LandingRegistroTest.php` | Contratos SEO |

---

*Documento de estrategia de sitemap (marca + SEO). Actualizar al añadir URLs de marketing.*
