Saltar al contenido
Doctor SEO

SEO con IA: la IA como herramienta de trabajo

Claude Skills para SEO: instalar, usar y escribir la tuya

Qué es un skill de Claude en términos de fichero, el presupuesto de carga progresiva y sus tres niveles, dónde se instala en cada superficie y un SKILL.md de auditoría on-page completo que puedes copiar.

Actualizado el 2 octubre 2026 33 min de lectura

Al terminar esta lección tendrás un fichero SKILL.md de auditoría SEO instalado y funcionando, y sabrás calcular lo que te cuesta cada skill que dejas puesto y no usas.

Ese coste es la parte que casi nadie cuenta. La documentación de Anthropic sobre Agent Skills, consultada el 23 de septiembre de 2026, fija el nivel 1 de la carga progresiva en «~100 tokens per Skill» y ese nivel se carga siempre, al arrancar la sesión. No cuando usas el skill: al arrancar. Instalar los 51 skills de SEO que Hawk Academy publica gratis supone arrastrar del orden de 5.100 tokens de metadatos en cada conversación, hables de SEO ese día o no. Es aritmética sobre un presupuesto documentado: vale como orden de magnitud.

El coste de metadatos de un skill instalado: la instalación, cada sesión y la sumaDiagrama de tres pasos sobre el coste de tener skills instalados. Uno, la instalación: cada skill deja cargados su nombre y su descripción, y Anthropic documenta el nivel 1 de la carga progresiva en unos 100 tokens por skill, que se pagan al arrancar la sesión y no al usarlo. Dos, cada sesión: ese coste se repite en cada conversación que abres, se hable de SEO ese día o no, y solo el cuerpo del SKILL.md espera a que su descripción encaje con lo que pides. Tres, la suma: instalar los 51 skills de SEO que publica Hawk Academy arrastra del orden de 5.100 tokens de metadatos antes de la primera pregunta, y de esa suma lo único que se promete es el orden de magnitud. Presupuesto documentado por Anthropic, consultado el 23 de septiembre de 2026.Cada skill instalado se paga al arrancar la sesión, seuse o noPor qué el número de skills que dejas puestos es una decisión de coste y no de comodidad.1La instalaciónCada skill deja cargados sunombre y su descripción: unos100 tokens por skill.CUÁNDO SE PAGAAl arrancar la sesión, no al usarlo:el nivel 1 no espera a nada.2Cada sesiónEse coste se repite en cadaconversación, hables de SEO esedía o no.CUÁNDO SE PAGASiempre. Solo el cuerpo delSKILL.md espera a que sudescripción encaje.3La sumaInstalar los 51 skills de HawkAcademy arrastra del orden de5.100 tokens.CUÁNDO SE PAGAAntes de la primera pregunta. Lasuma solo promete el orden demagnitud.Criterio de la casa, no de Anthropic: si no has invocado un skill en 30 días, vuelve al repositorio.Nivel 8 del curso de SEO gratuito. Agent Skills de Anthropic, consultado el 23 de septiembre de 2026.doctor-seo.net
El coste del nivel 1 de la carga progresiva, que se paga por cada skill instalado y en cada conversación. Presupuesto de Anthropic (Agent Skills, consultado el 23 de septiembre de 2026); los 5.100 tokens son aritmética sobre esa cifra y valen como orden de magnitud, no como medición. Los 51 skills son la cifra que anuncia Hawk Academy.

La lección anterior, qué puede y qué no puede hacer Claude en SEO, delimita el alcance. Esta empaqueta un proceso propio para que se dispare solo cuando toca, con su fichero de umbrales y su script determinista. Seguimos en el nivel 8, que va de usar el modelo como herramienta. Cómo te citan los buscadores con IA es otra cosa y vive en el nivel de GEO y AIO.

Lo que vas a aprender

  • Qué es un skill de Claude, con los nombres de campo y los límites que publica Anthropic.
  • El presupuesto de carga progresiva y cómo usarlo para decidir cuántos skills tener instalados.
  • Dónde se instala en claude.ai, en Claude Code y en la API, y por qué instalarlo en uno no lo pone en los otros.
  • Un SKILL.md de auditoría on-page completo, con su fichero de umbrales y su script, listo para copiar.
  • Qué puede auditar Claude a partir de un rastreo y qué falla cuando le das permiso de escritura.

Qué es un skill de Claude, en términos de fichero

Un skill de Claude es una carpeta con un fichero SKILL.md dentro, y ese fichero empieza con un bloque YAML de dos campos obligatorios. La documentación de plataforma de Anthropic, consultada el 23 de septiembre de 2026, lo dice así: «Every Skill requires a SKILL.md file with YAML frontmatter». Los dos campos obligatorios son name y description.

El campo name admite un máximo de 64 caracteres, solo minúsculas, números y guiones, no puede contener etiquetas XML y no puede contener las palabras reservadas «anthropic» ni «claude». El campo description tiene que ser no vacío, no puede contener etiquetas XML y, según esa misma página, admite hasta 1.024 caracteres. Sobre esa cifra hay un problema que trato más abajo, porque otra página de Anthropic dice 200.

Lo importante del campo description no es su longitud sino su función: es lo único que Claude lee para decidir si carga el skill. La guía de buenas prácticas de Anthropic pide escribirlo en tercera persona («Processes Excel files and generates reports», no «I can help you process Excel files») e incluir qué hace el skill y cuándo usarlo. Una descripción vaga no es un skill mal escrito: es un skill que no se dispara nunca.

La documentación de Claude Code añade campos opcionales que en SEO importan: allowed-tools, disallowed-tools, disable-model-invocation, paths, model, license y metadata, entre otros. Retén disallowed-tools: es el campo que impide que un skill de diagnóstico toque tu CMS.

El presupuesto de carga progresiva: tres niveles y un solo número que se paga siempre

La carga progresiva es el mecanismo por el que un skill puede ser grande sin ocupar contexto hasta que hace falta. Anthropic la documenta en tres niveles con un coste declarado para cada uno. Esta tabla reproduce los valores de su página de formato de Agent Skills, consultada el 23 de septiembre de 2026.

Nivel Cuándo se carga Coste en tokens Qué contiene
1. Metadatos Siempre, al arrancar «~100 tokens per Skill» name y description del bloque YAML
2. Instrucciones Cuando el skill se dispara «Under 5k tokens» El cuerpo del SKILL.md
3. Recursos Solo si se necesitan «None until accessed» Ficheros de referencia, scripts, datos

La consecuencia operativa está en la primera fila. El nivel 1 se paga por cada skill instalado y en cada conversación, se use o no. El nivel 2 solo cuando la descripción encaja con lo que pides. El nivel 3 no se paga hasta que Claude abre el fichero. Un skill con 400 líneas de instrucciones y 30.000 palabras repartidas en ficheros de referencia cuesta lo mismo que uno vacío mientras no lo invoques, pero diez skills instalados cuestan diez veces el nivel 1 aunque no invoques ninguno.

A eso se suma un límite de forma. La guía de buenas prácticas de Anthropic dice literalmente: «Keep SKILL.md body under 500 lines for optimal performance», y añade que si el contenido supera esa cifra hay que partirlo en ficheros aparte. Esos ficheros se enlazan desde el SKILL.md y se mantienen a un solo nivel de profundidad, para que Claude los lea completos cuando haga falta.

Traducido a una regla de instalación, y es criterio mío, no de Anthropic: si no has invocado un skill en 30 días, sale de ~/.claude/skills/ y vuelve al repositorio.

Dónde se instala un skill: claude.ai, Claude Code y la API

Las tres superficies de Claude instalan skills de forma distinta, y uno instalado en una no aparece en las otras. Las rutas salen de la documentación de Claude Code y del centro de ayuda de Anthropic, consultados el 23 de septiembre de 2026.

Superficie Dónde se instala Formato Alcance
claude.ai Customize > Skills, botón «+», «+ Create skill», «Upload a skill» ZIP con la carpeta del skill como raíz Por usuario. Team y Enterprise pueden aprovisionar skills para toda la organización
Claude Code, personal ~/.claude/skills/<nombre>/SKILL.md Carpeta Todas tus sesiones en esa máquina
Claude Code, proyecto .claude/skills/<nombre>/SKILL.md Carpeta versionable en git Todo el equipo que clone el repositorio
Claude Code, plugin <plugin>/skills/<nombre>/SKILL.md Carpeta Se invoca como /nombre-plugin:nombre-skill
API Subida por la API de Skills Paquete de skill Sin acceso a red y sin instalación de paquetes en ejecución

Para usar skills en claude.ai hace falta la ejecución de código activada: en Free, Pro y Max está en Settings > Capabilities; en Team y Enterprise, en la pestaña de política de Organization settings > Plugins & skills. El centro de ayuda de Anthropic los da por disponibles en los cinco planes.

El alcance por usuario es la restricción que más sorprende en un equipo. Un skill que subes a claude.ai queda en tu cuenta: repartirlo a toda la organización es otro procedimiento, con su propio artículo de ayuda, Provision and manage skills for your organization, y limitado a los planes Team y Enterprise. Si quieres que todo el equipo audite con el mismo criterio, la vía que se sincroniza sola no es claude.ai sino .claude/skills/ dentro del repositorio: ahí el skill viaja con el código y su historial de cambios es el del git.

La restricción de la API conviene saberla antes de diseñar nada: los skills ejecutados en la API de Claude no tienen acceso a red ni pueden instalar paquetes en tiempo de ejecución, solo usar los preinstalados. En Claude Code el acceso a red es el de cualquier programa de tu ordenador. Por eso el script de más abajo usa solo la biblioteca estándar de Python: así el mismo skill funciona en las tres superficies.

Un SKILL.md de auditoría on-page que puedes copiar

El skill que sigue audita una exportación de rastreo y devuelve hallazgos priorizados. Respeta el más estricto de los dos límites que publica Anthropic: su description ocupa 197 caracteres. Cópialo tal cual en ~/.claude/skills/auditoria-onpage-crawl/SKILL.md.

---
name: auditoria-onpage-crawl
description: Audita una exportación de rastreo y devuelve hallazgos on-page priorizados con URL, valor y umbral. Usar cuando se adjunte un CSV de rastreo o se pida revisar titles, canonicals o enlazado interno.
disallowed-tools: Write, Edit, WebFetch
---

# Auditoría on-page a partir de una exportación de rastreo

## Regla cero

Este skill no rastrea sitios. Analiza el fichero que aporta la persona usuaria.
Si no hay fichero adjunto, detente y pídelo indicando las columnas mínimas.
No estimes valores ausentes, no inventes URLs y no completes columnas que falten.

## Entradas

Obligatoria: exportación `internal_all` en CSV (Screaming Frog, Sitebulb,
OnCrawl o equivalente). Columnas mínimas:

    Address, Status Code, Indexability, Title 1, Title 1 Length,
    Meta Description 1, Meta Description 1 Length, H1-1, H1-2,
    Canonical Link Element 1, Word Count, Inlinks, Crawl Depth

Opcional: exportación de Search Console por páginas (página, clics,
impresiones, posición). Se pasa como segundo argumento del script y se une
al rastreo por URL exacta. Sin ella, las reglas que dependen de `clics` no se
evalúan y el informe tiene que decirlo.

Si falta una columna obligatoria, indica cuál y continúa con las comprobaciones
que sí puedas hacer. Nunca sustituyas una columna ausente por una estimación.

## Procedimiento

1. Normaliza los ficheros:

       python3 scripts/normalizar_crawl.py rastreo.csv [search-console.csv] > crawl.json

   El script unifica los nombres de columna de las tres herramientas, une los
   datos de Search Console si los hay y devuelve un JSON con una fila por URL.
   Usa solo la biblioteca estándar. El campo `con_gsc` indica si hubo segundo
   fichero; el campo `columnas_ausentes` lista las obligatorias que faltan.

2. Define el universo. Conserva las URLs con `status` 200 e `indexability`
   igual a `Indexable`. Cuenta cuántas quedan fuera y por qué motivo.
   Todo porcentaje posterior se calcula sobre ese universo, y el informe
   declara el tamaño del universo antes de dar el primer porcentaje.

3. Lee `UMBRALES.md` y aplica esos umbrales. Un hallazgo que no encaje en
   ningún umbral documentado no se reporta como error: va al final del
   informe como observación.

4. Prioriza. P1: la URL no puede indexarse, o pierde tráfico ya medido en
   Search Console. P2: la URL se indexa pero la plantilla está clonada o la
   página está huérfana. P3: todo lo demás.

5. Redacta con la plantilla de `INFORME.md`. Una fila por hallazgo, con la
   URL completa y el valor exacto de la celda que lo provoca.

## Lo que este skill no reporta

- Volumen de búsqueda, dificultad de keyword o CPC. No están en un rastreo,
  y un número inventado con forma de dato es peor que un hueco.
- Densidad de palabras clave. No es una métrica de Google.
- Puntuaciones propias de calidad, autoridad o toxicidad.
- Cualquier cifra que no proceda de una celda del fichero o de un cálculo
  sobre celdas del fichero.

## Comprobación final, obligatoria antes de entregar

- [ ] Cada hallazgo cita su URL completa y el valor exacto de la celda
- [ ] El recuento de URLs del informe cuadra con el del fichero de entrada
- [ ] Todos los umbrales aplicados están en UMBRALES.md
- [ ] Ninguna regla que dependa de `clics` se ha evaluado con `con_gsc` falso
- [ ] Ninguna cifra del informe procede del modelo
- [ ] El informe indica la fecha del rastreo y la herramienta que lo generó

## Ficheros de este skill

- `UMBRALES.md`: los umbrales y de dónde sale cada uno. Léelo en el paso 3.
- `INFORME.md`: plantilla de salida. Léelo en el paso 5.
- `scripts/normalizar_crawl.py`: normalizador de columnas y unión con Search Console.

Tres decisiones de ese fichero merecen explicación, porque son las que lo separan de un prompt largo.

La primera es la línea disallowed-tools, un campo opcional de Claude Code que su documentación define como las herramientas que se retiran del conjunto disponible mientras el skill está activo. Un skill de auditoría no necesita escribir ficheros ni descargar páginas, y retirarle esas dos capacidades convierte una buena intención en una restricción efectiva. En claude.ai y en la API los nombres de herramienta son otros.

La segunda es la «Regla cero». Un skill de SEO falla casi siempre por el mismo sitio: rellena con plausibilidad lo que no tiene en los datos. Parar y pedir el fichero, en lugar de razonar sobre un sitio que no ha visto, es lo que más trabajo ahorra al revisar la salida.

La tercera es que el cuerpo del SKILL.md no contiene ni un solo umbral. Viven en UMBRALES.md, que es nivel 3 y no consume contexto hasta que Claude lo abre en el paso 3. Así el criterio queda versionado en un fichero revisable, no disperso en las instrucciones.

Los tres ficheros del skill de auditoría: SKILL.md, UMBRALES.md e INFORME.mdTabla de los tres ficheros del skill de auditoría on-page de esta lección y de lo que falla sin cada uno. Uno, SKILL.md: lleva el procedimiento y la regla cero, según la cual si no hay fichero adjunto el skill se detiene y lo pide; sin ella el skill razona sobre un sitio que no ha visto y rellena los huecos con plausibilidad. Dos, UMBRALES.md: dice qué cuenta como error, con su prioridad y el origen de cada umbral; con los umbrales fijados en la conversación, la auditoría del mes que viene no es comparable. Tres, INFORME.md: fija la forma de la salida, una fila por hallazgo con la URL y el valor exacto de la celda; sin plantilla la salida cambia de forma cada mes y las comprobaciones limpias se caen del informe.El criterio de la auditoría vive en un fichero, no en laconversaciónLos tres ficheros del skill de auditoría on-page y qué se rompe si falta cada uno.QUÉ FICHEROQUÉ DECIDEQUÉ FALLA SIN ÉL1SKILL.mdEl procedimiento y la regla cero: si no hayfichero adjunto, el skill se detiene y lo pide.El skill razona sobre un sitio que no ha visto yrellena los huecos con plausibilidad.2UMBRALES.mdQué cuenta como error, con su prioridad y elorigen de cada umbral.Umbrales fijados en la conversación: la auditoríadel mes que viene no es comparable.3INFORME.mdLa forma de la salida: una fila por hallazgo,con la URL y el valor exacto de la celda.La salida cambia de forma cada mes y lascomprobaciones limpias se caen del informe.El script determinista usa solo la biblioteca estándar, así el mismo skill sirve en las tres superficies.Nivel 8 del curso de SEO gratuito. El skill de auditoría on-page de esta lección.doctor-seo.net
Los tres ficheros del skill de auditoría on-page de esta lección y qué se rompe sin cada uno. El script normalizador usa solo la biblioteca estándar porque los skills ejecutados en la API de Claude no tienen acceso a red ni pueden instalar paquetes (documentación de plataforma de Anthropic, 23 de septiembre de 2026).

UMBRALES.md: el fichero que decide qué cuenta como error

UMBRALES.md es el fichero de referencia del skill de auditoría de esta lección, y también su diagnóstico ejecutable: una tabla de umbrales aplicable hoy a una exportación de Screaming Frog, con o sin Claude de por medio. Guárdalo junto al SKILL.md, en la misma carpeta.

# Umbrales

Cada umbral lleva su origen y todos se calculan sobre los campos que produce
`normalizar_crawl.py`. Cambia los números en este fichero, nunca en la
conversación: así el criterio queda versionado y la auditoría del mes que viene
es comparable con la de este mes.

| Comprobación | Umbral | Prioridad | De dónde sale |
|---|---|---|---|
| `status` distinto de 200 con `inlinks` > 0 | cualquiera | P1 | Un enlace interno apunta a algo que no responde |
| `indexability` distinto de Indexable con `clics` > 0 | cualquiera | P1 | Tráfico medido que se está perdiendo |
| `title` vacío | cualquiera | P1 | Sin fuente, el buscador reescribe |
| `title` idéntico en 2 o más URLs | >= 2 | P2 | Indicio de plantilla clonada |
| `title_len` | < 15 o > 60 caracteres | P3 | Umbral de la casa, no regla de Google |
| `metadesc` vacía o duplicada | cualquiera | P3 | Se reporta como dato, no como error |
| `h1` vacío, o `h1_2` con valor | cualquiera | P2 | Falta el H1 o hay más de uno |
| `canonical` distinto de `url` con `clics` > 0 | cualquiera | P1 | Se está retirando una URL que rinde |
| `words` < 300 en URLs de la misma `seccion` | >= 10 URLs | P2 | Sección sin contenido diferencial |
| `inlinks` = 0 con `status` 200 e indexable | cualquiera | P2 | Página descubierta y no enlazada |
| `depth` > 4 con `clics` > 0 | cualquiera | P3 | Tráfico real enterrado en la arquitectura |

## Notas

- Las cuatro reglas que usan `clics` necesitan el segundo fichero. Si
  `con_gsc` es falso, no se evalúan y el informe lo dice explícitamente.
- `inlinks` es el recuento total de enlaces entrantes, no el de URLs únicas
  que enlazan: eso es `inlinks_unicos`, y el script los guarda por separado
  porque la exportación de Screaming Frog trae las dos columnas.
- `seccion` es el primer segmento de la ruta, que el script calcula. Es una
  aproximación a «la misma plantilla», no una certeza.
- La regla de página huérfana solo significa algo si el rastreo incluyó el
  sitemap o una lista de URLs; en un rastreo por enlaces, `inlinks` = 0 solo
  le puede pasar a la URL de inicio.
- `metadesc`: el sector no se pone de acuerdo sobre si compensa escribirlas una
  a una, ni sobre cuánto peso darle a la keyword. Este skill las cuenta y las
  lista; no recomienda reescribirlas en masa ni las trata como error grave.
- `title_len`: el corte real es en píxeles y depende del dispositivo. 15 y 60
  son umbrales de trabajo. Si los cambias, anota la fecha aquí mismo.

Fíjate en la nota sobre metadesc. El sector no se pone de acuerdo sobre si compensa escribir las meta descripciones una a una ni sobre cuánto peso darle a la palabra clave, y este curso no zanja esa discusión: el skill las cuenta y las lista como dato, sin tratarlas como error grave. Un umbral que esconde una decisión discutible bajo la etiqueta «error» es la forma más rápida de generar trabajo que no hacía falta.

Falta la pieza determinista. El script normaliza los nombres de columna de las herramientas de rastreo más habituales, une por URL la exportación de Search Console si se la pasas como segundo argumento, y calcula el primer segmento de ruta que usa el umbral de plantilla. La guía de buenas prácticas de Anthropic recomienda exactamente esto, incluido el manejo de errores: «When writing scripts for Skills, handle error conditions rather than deferring to Claude».

#!/usr/bin/env python3
"""Normaliza una exportación de rastreo a un JSON con una fila por URL y,
opcionalmente, le une los datos de Search Console.

    python3 normalizar_crawl.py rastreo.csv [search-console.csv] > crawl.json

Solo biblioteca estándar: funciona también donde no se pueden instalar paquetes."""
import csv, json, os, sys
from urllib.parse import urlsplit

ALIAS = {
    "address": "url", "url": "url",
    "status code": "status", "http status code": "status",
    "indexability": "indexability",
    "title 1": "title", "page title": "title",
    "title 1 length": "title_len", "page title length": "title_len",
    "meta description 1": "metadesc",
    "meta description 1 length": "metadesc_len",
    "h1-1": "h1", "h1": "h1",
    "h1-2": "h1_2",
    "canonical link element 1": "canonical", "canonical url": "canonical",
    "word count": "words", "words": "words",
    "inlinks": "inlinks",
    "unique inlinks": "inlinks_unicos",
    "crawl depth": "depth", "depth": "depth",
}
GSC = {
    "url": "url", "address": "url", "page": "url",
    "página": "url", "pagina": "url", "páginas principales": "url",
    "clicks": "clics", "clics": "clics",
    "impressions": "impresiones", "impresiones": "impresiones",
    "position": "posicion", "posición": "posicion", "posicion": "posicion",
}
ENTEROS = {"status", "title_len", "metadesc_len", "words",
           "inlinks", "inlinks_unicos", "depth", "clics", "impresiones"}
OBLIGATORIAS = {"url", "status", "indexability", "title"}


def entero(valor):
    """Acepta 1234, 1.234 y 1,234. Devuelve None si no hay dígitos."""
    digitos = "".join(c for c in str(valor) if c.isdigit())
    return int(digitos) if digitos else None


def lee(ruta, mapa):
    filas = []
    with open(ruta, newline="", encoding="utf-8-sig") as fh:
        for cruda in csv.DictReader(fh):
            fila = {}
            for columna, valor in cruda.items():
                clave = mapa.get((columna or "").strip().lower())
                if not clave:
                    continue
                fila[clave] = entero(valor) if clave in ENTEROS else valor
            if fila.get("url"):
                filas.append(fila)
    return filas


def seccion(url):
    partes = [p for p in urlsplit(url).path.split("/") if p]
    return "/" + partes[0] + "/" if partes else "/"


def main(argv):
    if not 2 <= len(argv) <= 3:
        sys.exit("Uso: normalizar_crawl.py rastreo.csv [search-console.csv]")
    for ruta in argv[1:]:
        if not os.path.isfile(ruta):
            sys.exit("No existe el fichero: %s" % ruta)
    try:
        filas = lee(argv[1], ALIAS)
        gsc = {f["url"]: f for f in lee(argv[2], GSC)} if len(argv) == 3 else {}
    except (OSError, UnicodeDecodeError, csv.Error) as error:
        sys.exit("No se pudo leer el CSV: %s" % error)
    for fila in filas:
        fila["seccion"] = seccion(fila["url"])
        datos = gsc.get(fila["url"], {})
        fila["clics"] = datos.get("clics")
        fila["impresiones"] = datos.get("impresiones")
    presentes = set(filas[0]) if filas else set()
    return {"filas": filas, "n": len(filas), "con_gsc": bool(gsc),
            "columnas_ausentes": sorted(OBLIGATORIAS - presentes)}


if __name__ == "__main__":
    json.dump(main(sys.argv), sys.stdout, ensure_ascii=False, indent=1)

INFORME.md es la tercera pieza y la que evita que la salida cambie de forma cada mes. El skill la abre en el paso 5, no antes, así que no ocupa contexto mientras tanto.

# Plantilla de informe

Rellena las cinco partes en este orden y no añadas secciones. Lo que no encaje
va en «Observaciones».

## 1. Cabecera

- Fichero de entrada y fecha del rastreo
- Herramienta y versión que lo generó, si consta en la exportación
- URLs en el fichero: N
- Universo auditado, `status` 200 e indexable: N
- Excluidas: N sin 200, N no indexables
- Datos de Search Console: sí / no. Si no, escribe literalmente
  «Sin datos de Search Console no se han evaluado las reglas que dependen de
  clics: indexabilidad con tráfico, canonical con tráfico y profundidad.»

## 2. Hallazgos

Una fila por hallazgo, sin agrupar.

| Prioridad | Comprobación | URL | Valor en el fichero | Umbral aplicado |
|---|---|---|---|---|
| P1 | title vacío | https://ejemplo.es/a/ | (vacío) | title vacío |
| P2 | title duplicado | https://ejemplo.es/b/ | «Zapatos», 3 URLs | >= 2 |

Ordena por prioridad y, dentro de cada una, por `clics` descendentes si hay
datos de Search Console y por `inlinks` descendentes si no los hay.

## 3. Resumen por comprobación

| Comprobación | Hallazgos | % del universo | Evaluada |
|---|---|---|---|

Incluye todas las comprobaciones de `UMBRALES.md`, también las que dan cero
hallazgos y las que no se han podido evaluar. Un informe que omite las
comprobaciones limpias no se puede comparar con el del mes que viene.

## 4. Observaciones

Lo visto en el fichero que no encaja en ningún umbral. Formato libre, sin
prioridad y sin recomendación.

## 5. Lo que este informe no cubre

Lista fija, cópiala tal cual:

- No se ha rastreado el sitio: todo sale del fichero aportado.
- No se ha ejecutado JavaScript ni renderizado ninguna página.
- No hay datos de campo de Core Web Vitals.
- No hay volúmenes de búsqueda ni dificultad de keyword.

Con los cuatro ficheros en su sitio, empaquétalos en un ZIP con la carpeta del skill como raíz, la estructura que exige el centro de ayuda de Anthropic, y súbelo desde Customize > Skills:

auditoria-onpage-crawl/
  SKILL.md
  UMBRALES.md
  INFORME.md
  scripts/
    normalizar_crawl.py

zip -r auditoria-onpage-crawl.zip auditoria-onpage-crawl/

Auditorías SEO con Claude: qué puede auditar de verdad

Claude analiza datos de rastreo; no rastrea sitios. La formulación es de Lawrence Hitches, en Claude for Technical SEO, del 2 de abril de 2026: «Claude analyses crawl data. It doesn’t crawl sites». Esa frase es el límite duro de cualquier skill de auditoría y explica por qué la «Regla cero» va la primera y no como advertencia al final.

De ahí sale un reparto limpio. Un skill audita lo calculable sobre celdas de una exportación: códigos de estado, indexabilidad, duplicados de title y de H1, canonicals que apuntan fuera, páginas huérfanas, profundidad de rastreo. No obtiene nada que no esté en el fichero: no descarga URLs, no ejecuta JavaScript, no mide datos de campo de Core Web Vitals y no conoce volúmenes de búsqueda. Esa parte es SEO técnico clásico y se resuelve con el rastreador.

La demanda de búsqueda ya lo refleja. En el autocompletado de Google recogido el 20 de septiembre de 2026 para este curso, la semilla «claude seo audit» devolvió 10 sugerencias y 6 eran variantes de skill, de GitHub o de herramienta, entre ellas claude seo audit skill github y claude seo analysis skill. El autocompletado da presencia, no volumen, y para estos términos no hay ninguna cifra de volumen publicada con fuente. Aun así, la forma de la pregunta informa: quien quiere una auditoría no busca un ensayo, busca un fichero.

Sobre cuánta gente delega auditorías, el mejor reparto público es State of AI and Automation in SEO, de Keyword.com, del 1 de enero de 2026, con n=97 respuestas útiles: el 38% señala las auditorías técnicas entre las tareas para las que usa IA, y entre quienes dicen que hay tareas automatizables que han decidido no automatizar, el 40% nombra el SEO técnico. Con esa muestra, eso ordena tareas; no mide a la profesión.

Esa negativa tiene casos documentados. ContextBolt publicó el 23 de junio de 2026 una prueba de una semana en la que Claude trató estimaciones de terceros como datos de hecho, repitió palabras clave en exceso con instrucciones laxas y propuso un marcado inexistente para «posicionar en IA». Es una prueba sobre un sitio y su autor no publica tamaño de muestra: describe un modo de fallo, no su frecuencia.

El caso más caro tiene que ver con el permiso de escritura. Search Engine Land publicó el 28 de agosto de 2026 el análisis de Will Scott Use Claude for SEO. Don’t let Claude do SEO.: un agente clonó la portada en dos URLs nuevas, /seo-grader y /content-grader, cambiando solo los title tags, y las dos acumularon cero impresiones y cero clics mientras la portada se quedaba en posición 9 o peor. El patrón se repitió de forma independiente en un segundo sitio. Son dos sitios, no un estudio. Es el fallo que disallowed-tools corta en la cabecera del fichero.

Por qué las listas de prompts dejaron de funcionar cuando llegaron los Skills

Un prompt largo y un skill no compiten en calidad de redacción: compiten en cuándo se cargan y en qué traen consigo. Un prompt de 2.000 palabras cuesta sus 2.000 palabras en cada conversación en la que te acuerdes de pegarlo, y no cuesta nada en las que se te olvide, que son las que producen el trabajo malo. Un skill cuesta unos 100 tokens de metadatos siempre y carga sus instrucciones solo cuando su descripción encaja con lo que pides. Anthropic no publica equivalencia entre palabras en castellano y tokens, así que no convierto esas 2.000 palabras: la asimetría que importa es de cuándo, no de cuánto.

Hay cuatro cosas que un prompt pegado no hace y un skill sí, y las cuatro están documentadas en las páginas de Anthropic citadas aquí. Se invoca solo, porque Claude compara la descripción con el contexto. Trae ficheros de referencia que no ocupan contexto hasta que se abren. Trae scripts deterministas, que dan el mismo resultado dos veces seguidas. Y vive en un fichero: se versiona, se revisa en un pull request y se comparte por el repositorio.

El autocompletado de Google recogido el 20 de septiembre de 2026 muestra las dos intenciones conviviendo. La semilla «claude prompts for seo» devolvió 7 variantes, incluida top 20 claude prompts for seo: el público de las listas sigue ahí. La semilla «claude seo» devolvió 10 sugerencias encabezadas por claude seo skill, y la semilla «claude skills seo» añadió claude skills seo audit, claude skills seo geo y claude seo skill md. Que alguien busque claude seo skill md significa que ya no quiere el texto, quiere el fichero. Mismo aviso de siempre: el autocompletado prueba presencia, no volumen, y para estos términos no hay ninguna cifra de volumen publicada con fuente.

Esto no convierte los prompts en inútiles. Lo que caduca es un formato: el artículo de 47 prompts que pegas a mano. Si el prompt es bueno, su sitio ya no es un post, es el cuerpo de un SKILL.md, con su descripción, sus umbrales aparte y su lista de comprobación final.

La documentación de Anthropic se contradice en el límite de description

Dos páginas de Anthropic publican límites distintos para el mismo campo, y una de ellas escribe el nombre del fichero en minúsculas. Comprobado con fetch en directo el 23 de septiembre de 2026, las dos siguen como están:

Página Nombre del fichero Límite de description Límite de name
Agent Skills, documentación de plataforma SKILL.md 1.024 caracteres 64 caracteres
How to create custom skills, centro de ayuda, actualizado el 22 de julio de 2026 skill.md 200 caracteres 64 caracteres

Lo que falta en las dos páginas es lo mismo: ninguna menciona la cifra de la otra ni dice que su límite sea específico de una superficie. Quien lea solo la documentación de plataforma escribirá descripciones de 900 caracteres sin saber que el centro de ayuda pone el techo en 200. Quien lea solo el centro de ayuda creerá que el fichero se llama skill.md, lo que en macOS y Windows da igual y en Linux no.

La regla práctica mientras eso no se aclare no cuesta nada. Nombra el fichero SKILL.md en mayúsculas, que es la forma que usan la documentación de plataforma y la de Claude Code. Y escribe la descripción por debajo de 200 caracteres, el más estricto de los dos límites publicados. Doscientos caracteres bien elegidos disparan el skill igual que novecientos: lo que lo hace funcionar no es la longitud, es que contenga los términos que teclea quien va a usarlo.

Un apunte de oferta para calibrar de dónde salen los skills de SEO. Según el recuento del 20 de septiembre de 2026, el repositorio oficial anthropics/skills acumulaba 168.900 estrellas y no contenía ningún skill de SEO; el más popular de la comunidad, AgriciDaniel/claude-seo, tenía 16.700 estrellas, 2.400 forks y versión 2.3.1 de septiembre de 2026. Son recuentos de un día, no una serie. Los skills de SEO los publican agencias y particulares, no Anthropic, así que el criterio de auditoría que instales lo ha escrito alguien cuyos umbrales no conoces mientras no abras su fichero de referencia.

Errores comunes

  1. Instalar treinta skills «por si acaso». Cada uno cuesta unos 100 tokens de metadatos en cada conversación, se use o no (documentación de Anthropic, consultada el 23 de septiembre de 2026). El arreglo: deja instalado lo del mes y guarda el resto en un repositorio; treinta skills dormidos son del orden de 3.000 tokens antes de la primera pregunta.
  2. Escribir una descripción genérica. «Ayuda con tareas de SEO» no se dispara nunca, porque Claude compara esa frase con lo que pides. El arreglo: tercera persona, qué hace y cuándo usarlo, con los términos que tecleas de verdad: CSV de rastreo, títulos duplicados, canonicals, páginas huérfanas.
  3. Meterlo todo en el cuerpo del SKILL.md. La guía de buenas prácticas de Anthropic pide mantenerlo por debajo de 500 líneas. El arreglo: saca umbrales y plantillas a ficheros propios, enlazados desde el SKILL.md a un solo nivel de profundidad.
  4. Dar permiso de escritura a un skill de diagnóstico. El caso de Will Scott en Search Engine Land, del 28 de agosto de 2026, documenta dos URLs clonadas con cero impresiones y cero clics. El arreglo: disallowed-tools en la cabecera, y la publicación como paso manual separado.
  5. Dejar que el skill produzca cifras que no están en el fichero. ContextBolt documentó el 23 de junio de 2026 que Claude trataba estimaciones de terceros como datos de hecho. El arreglo: una comprobación final que obligue a citar la celda de origen de cada número.

Resumen

  • Un skill de Claude es una carpeta con un SKILL.md cuyo bloque YAML tiene dos campos obligatorios: name, máximo 64 caracteres en minúsculas, números y guiones; y description, no vacío.
  • La carga progresiva tiene tres niveles con coste declarado por Anthropic: unos 100 tokens de metadatos siempre, menos de 5.000 tokens de instrucciones al dispararse, y cero para los recursos hasta que se abren.
  • El nivel 1 se paga por cada skill instalado y en cada conversación, así que el número de skills instalados es una decisión de coste, no de comodidad.
  • La documentación de Anthropic se contradice sobre el límite de description: 1.024 caracteres en la documentación de plataforma y 200 en el centro de ayuda actualizado el 22 de julio de 2026. Escribe por debajo de 200 y nombra el fichero SKILL.md en mayúsculas.
  • Las tres superficies instalan por caminos distintos y no se sincronizan: ZIP en claude.ai, .claude/skills/ en Claude Code y subida por API sin acceso a red.
  • Claude analiza datos de rastreo y no rastrea sitios (Lawrence Hitches, 2 de abril de 2026), así que un skill de auditoría empieza pidiendo la exportación y nunca la sustituye por una estimación.
  • El permiso de escritura es el fallo caro y está documentado: dos URLs clonadas con cero impresiones y cero clics (Will Scott, Search Engine Land, 28 de agosto de 2026). disallowed-tools lo corta en la cabecera.
  • Un buen prompt no se publica como lista, sino como SKILL.md, con sus umbrales aparte y su comprobación final.

Preguntas frecuentes

¿Un skill que instalo en claude.ai me funciona también en Claude Code?

No. Cada superficie de Claude tiene su propia vía de instalación: en claude.ai se sube un ZIP desde Customize > Skills, en Claude Code se coloca una carpeta en ~/.claude/skills/ o en .claude/skills/ del proyecto, y en la API se sube por la API de Skills. Instalarlo en una no lo pone en las otras. En equipo, la vía con menos fricción es .claude/skills/ dentro del repositorio.

¿Cuántos caracteres puede tener la descripción de un skill?

Depende de qué página de Anthropic leas, y esa es precisamente la razón para ser conservador. La documentación de plataforma sobre Agent Skills indica un máximo de 1.024 caracteres; el artículo del centro de ayuda «How to create custom skills», actualizado el 22 de julio de 2026, indica 200. Ninguna de las dos menciona la cifra de la otra. Escribe por debajo de 200 caracteres y funcionará en las dos lecturas. Lo que hace que una descripción dispare el skill no es su longitud, sino que contenga los términos concretos que teclea quien va a usarlo.

¿Puede un skill de Claude rastrear mi web?

No por sí mismo. Un skill es un fichero de instrucciones más sus recursos; no incorpora un rastreador. Lawrence Hitches lo resumió el 2 de abril de 2026: Claude analiza datos de rastreo, no rastrea sitios. En la API los skills ni siquiera tienen acceso a red, según la documentación de plataforma de Anthropic. La secuencia realista es rastrear con tu herramienta, exportar, y entregarle la exportación al skill. Si quieres que Claude dispare el rastreo, lo que necesitas es un servidor MCP conectado a tu rastreador, que es otra lección del nivel de SEO con IA.

¿Merece la pena escribir un skill propio existiendo repositorios con cientos?

Depende de si puedes auditar sus umbrales. Un skill de SEO ajeno lleva dentro decisiones discutibles presentadas como errores: qué longitud de title es un problema, qué profundidad de rastreo es excesiva. Si esos números están en un fichero de referencia que puedes leer y cambiar, instálalo. Si están escondidos en las instrucciones, escribe el tuyo: te llevará una tarde y sabrás qué está juzgando.

Fuentes

Seguir el curso