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.
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.mdde 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.
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
- 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.
- 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.
- 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.mda un solo nivel de profundidad. - 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-toolsen la cabecera, y la publicación como paso manual separado. - 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.mdcuyo bloque YAML tiene dos campos obligatorios:name, máximo 64 caracteres en minúsculas, números y guiones; ydescription, 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 ficheroSKILL.mden 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-toolslo 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
- Anthropic, Agent Skills, formato y carga progresiva. Consultado el 23 de septiembre de 2026.
- Anthropic, Best practices for writing SKILL.md. Consultado el 23 de septiembre de 2026.
- Anthropic, Extend Claude with skills, documentación de Claude Code. Consultado el 23 de septiembre de 2026.
- Anthropic, centro de ayuda, How to create custom skills. Actualizado el 22 de julio de 2026; consultado el 23 de septiembre de 2026.
- Anthropic, centro de ayuda, Use skills in Claude y Provision and manage skills for your organization. Consultados el 23 de septiembre de 2026.
- Anthropic, How to create Skills: key steps, limitations and examples. 19 de noviembre de 2025; consultado el 23 de septiembre de 2026.
- Lawrence Hitches, Claude for Technical SEO: Audits, Crawl Fixes & Schema. 2 de abril de 2026. Artículo de práctica profesional, sin tamaño de muestra.
- Will Scott, Use Claude for SEO. Don’t let Claude do SEO., Search Engine Land. 28 de agosto de 2026. Dos sitios documentados, no un estudio con muestra. Sin enlace: la URL no se pudo abrir para verificarla en esta revisión.
- ContextBolt, Claude SEO Experiment: A Week of Running My Real SEO. 23 de junio de 2026. Prueba de una semana sobre un sitio; no publica tamaño de muestra.
- Keyword.com, State of AI and Automation in SEO. 1 de enero de 2026, n=97 respuestas útiles y autoseleccionadas.
- Autocompletado de Google, recogido el 20 de septiembre de 2026 para este curso vía
suggestqueries.google.com. Da presencia de consulta, no volumen; no existe cifra de volumen publicada con fuente para estos términos. - Recuentos de GitHub del 20 de septiembre de 2026:
anthropics/skills, 168.900 estrellas, sin skill de SEO;AgriciDaniel/claude-seo, 16.700 estrellas, 2.400 forks, versión 2.3.1 de septiembre de 2026. Recuentos de un día, no una serie. - Hawk Academy (StudioHawk), colección de skills de SEO gratuitos, 2026. La página anuncia 51; su repositorio asociado
lhitches/claude-seo-skillssigue listando 29, así que 51 es la cifra de Hawk Academy.
Seguir el curso
- Lección anterior: Qué puede y qué no puede hacer Claude en SEO
- Nivel: SEO con IA: la IA como herramienta de trabajo
- Índice del curso: Curso de SEO gratis, de los fundamentos al black hat
- Relacionado: Analítica y medición, para decidir qué hallazgos de la auditoría merecen tocarse primero.