# Seo Images > Auditoría SEO de imágenes de una URL o dominio: inventario vía Firecrawl, más alt-text, formatos modernos, responsive, lazy-loading, LCP, CLS, nombres de archivo y ImageObject JSON-LD. Fuente: https://skillsagentes.com/skills/seranking/seo-skills/seo-images Markdown: https://skillsagentes.com/skills/seranking/seo-skills/seo-images.md Repositorio: https://github.com/seranking/seo-skills Autor: seranking Licencia: MIT Actualizado: hace 2 meses Coste de contexto: 236 tok instalada, 6k tok al activarse, 11.2k tok con todos los archivos del bundle Bundle: 5 archivos, 44 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add seranking/seo-skills --skill seo-images --agent claude-code # Cursor npx -y skills add seranking/seo-skills --skill seo-images --agent cursor # Codex npx -y skills add seranking/seo-skills --skill seo-images --agent codex # Gemini CLI npx -y skills add seranking/seo-skills --skill seo-images --agent gemini # Windsurf npx -y skills add seranking/seo-skills --skill seo-images --agent windsurf # Cline npx -y skills add seranking/seo-skills --skill seo-images --agent cline ``` ## Qué hace - Extrae el inventario completo de imágenes de una URL o dominio vía Firecrawl (src, srcset, alt, loading, fetchpriority, etc.) - Audita alt-text, cobertura de formatos modernos (WebP/AVIF), srcset/sizes responsive, lazy-loading, señales LCP y dimensiones para CLS - Detecta y valida marcado ImageObject JSON-LD, y genera bloques nuevos para la imagen hero cuando falta - Cruza opcionalmente con PageSpeed Insights para estimaciones reales de bytes ahorrados por imagen - Produce una lista de remediación priorizada, snippets listos para pegar y un CSV con todas las columnas de auditoría ## Cuándo usarla - El usuario pide 'image SEO', 'auditoría de imágenes', 'alt-text audit', 'cobertura WebP', 'AVIF' o 'responsive images' - El usuario pregunta por lazy loading, CLS en imágenes, image schema, ImageObject o rich results de imágenes - El usuario quiere optimizar imágenes de una página o muestra de dominio ## Cuándo no - El sitio requiere auditar >10 páginas a nivel de todo el sitio (usar seo-technical-audit primero) - Se necesita optimización a nivel de archivo binario (cwebp, exiftool, ImageMagick, ffmpeg) - Se necesitan auditar imágenes de fondo CSS (background-image), fuera de alcance ## Qué la activa - "Haz una auditoría de imágenes SEO de esta URL" - "Revisa el alt-text y la cobertura WebP/AVIF de mi página" - "¿Mis imágenes están causando problemas de LCP o CLS?" - "Genera el schema ImageObject para la imagen hero de esta página" - "Audita las imágenes de todo mi dominio con una muestra de páginas" ## Antes de instalar - Requiere mcp__firecrawl-mcp__firecrawl_scrape (WebFetch no sirve porque elimina atributos de imagen); PSI y el cruce con SE Ranking son opcionales. ## Archivos - SKILL.md — 24 KB - references/image-checks.md — 14 KB - references/lazy-loaders.md — 4 KB - templates/image-object.json — 1 KB - templates/picture-element.html — 1 KB ## SKILL.md Reproducido tal cual desde seranking/seo-skills bajo MIT. Esta sección es el documento original y está en inglés. # Image SEO Audit A focused, page-level (or domain-sample) audit of every `` and `` on the target. Surfaces alt-text issues, format gaps (WebP/AVIF coverage), responsive-image gaps (`srcset` / `sizes`), LCP and CLS risk, and missing `ImageObject` markup. Output is a prioritised remediation list plus paste-ready `` and JSON-LD snippets. > **Adapted from [`AgriciDaniel/claude-seo`](https://github.com/AgriciDaniel/claude-seo)'s `seo-images` skill** (MIT). Rubric, lazy-loader taxonomy, and severity ladder track the upstream implementation; data sources are wired to this catalogue's SE Ranking / Firecrawl / Google APIs stack. ## Prerequisites - **Required for inventory:** `mcp__firecrawl-mcp__firecrawl_scrape` (raw HTML access). `WebFetch` returns markdown only — every `` attribute (`srcset`, `sizes`, `loading`, `fetchpriority`, `width`, `height`, `data-src*` lazy variants) is stripped before the skill ever sees it. Without Firecrawl the audit cannot run. Install via `bash extensions/firecrawl/install.sh`. - **Optional (PSI byte-saving estimates):** `google-api.json` configured (Tier 0 — API key only). When present, step 9 runs and adds real Lighthouse `wastedBytes` per image to the remediation list. - **Optional (SE Ranking audit cross-reference):** SE Ranking MCP server connected and a recent audit for the domain. When present, step 10 elevates image-related audit issues onto the same remediation list. - User provides: a target URL (single-page audit) or a domain (sampled audit). For domains, the skill confirms how many pages to sample before spending Firecrawl credits. ## Process 1. **Validate target & preflight.** Normalise the URL (strip trailing slash, decode IDN). Resolve mode: - **URL mode** (default for inputs that look like a single page): the target is one URL. Cost: 1 Firecrawl credit + optional PSI calls. - **Domain mode** (input is a bare domain or the user explicitly asks for a domain-wide audit): map first, then scrape a sample. - **Preflight checks** (mirror `skills/seo-firecrawl/references/preflight.md` where it applies): - Confirm Firecrawl is connected. If not, abort with the install command and stop. - If Google APIs are wired up (`~/.config/seo-skills/google-api.json` present), record the detected tier; step 9 will use it. If not, mark step 9 as skipped. - If SE Ranking MCP is connected and a recent audit exists for the domain, record the audit ID; step 10 will use it. If not, mark step 10 as skipped. 2. **Gather image inventory** `mcp__firecrawl-mcp__firecrawl_scrape` (URL mode) or `firecrawl_map` + `firecrawl_scrape` (domain mode) - **URL mode:** scrape the target with `formats: ["html", "markdown"]` and `onlyMainContent: false` (we want nav/footer images too — hero logo, footer trust badges, decorative imagery all matter for the audit). For SPAs, pass `waitFor: 2000` so lazy-injected images appear in the rendered DOM. Parse every `` and every `` from the returned `html`. Capture per image: - `src`, `srcset`, `sizes`, `alt`, `loading`, `fetchpriority`, `decoding`, `width`, `height`, `role`, `aria-hidden` - Lazy-loader attributes: `data-src`, `data-srcset`, `data-lazy-src`, `data-original`, `data-perfmatters-src`, `data-perfmatters-srcset`, `data-ewww-src`, `data-eio` - Class signals: `lazyload`, `lazyloaded`, `lazy`, `perfmatters-lazy`, `lazyload-eio` - Parent `` `` entries: `type`, `srcset`, `media` - Resolved absolute URL (for cross-origin / CDN detection) - **Domain mode:** run `firecrawl_map` (default `limit: 500`, hard cap; cost: ~0.5 credit per discovered URL — surface the estimate before running). From the URL list, select a sample of up to 10 pages: homepage, plus the top traffic landing pages (from `DATA_getDomainKeywords`'s page aggregation if SE Ranking is connected, otherwise the deepest-nested URLs found in the sitemap — these are usually the content pages, not category indexes). Confirm the sample list and credit cost before scraping. Then scrape each (1 credit per page). Inventory is the union of every image on the sampled pages. - **CSS background-images:** flag as a known blind spot. We don't audit `background-image: url(...)` in stylesheets — those are not crawlable as content images by Google and don't get image-search visibility. Surface "{n} likely background-images detected (computed style references) — out of scope for this audit; review separately if hero/feature images are CSS-based" in the synthesis. 3. **Alt-text audit** - Load `references/image-checks.md` § Alt text. For each image: - **Presence:** missing `alt` (not `alt=""` — the empty-string form is valid for purely decorative images). Severity High. - **Decorative-but-not-marked:** `alt=""` is fine only if the image is genuinely decorative. Flag images with `alt=""` that also have a non-decorative `src` (e.g. product photo path, hero image path) as "verify decorative intent" (Medium). - **Generic text:** `alt` value matches a generic pattern — bare filename (`image.jpg`, `IMG_1234.png`), single generic noun (`photo`, `picture`, `image`, `banner`), CTA copy (`click here`, `read more`, `learn more`). Severity High. - **Length:** `alt` outside the 10–125 character window. Below 10 → Medium (probably not descriptive). Above 125 → Low (likely too verbose; screen readers truncate around there). - **Keyword stuffing:** the same keyword token appears 3+ times in the alt, or the alt is >50% keyword tokens. Severity Medium. - **Identical alt across multiple images on the page:** flag as a templating bug (Medium) — every product photo on a PDP should not share the same alt. 4. **Format coverage (WebP / AVIF)** - For each image, classify its served format from `src` extension (`.webp`, `.avif`, `.jpg`/`.jpeg`, `.png`, `.gif`, `.svg`) and `` `` `type` attributes (`image/avif`, `image/webp`). - Compute three coverage metrics for the page (or domain sample): - **% images served as WebP or AVIF directly** (via the chosen `` or chosen `` ``). - **% images wrapped in `` with at least one modern-format ``** (progressive enhancement — fallback chain). - **% images stuck on legacy formats** (JPEG / PNG / GIF) with no modern alternative. - Per-image flags: - Legacy format with no `` modern alternative → `image_legacy_format` (Medium). - Animated GIF over 500 KB → recommend video (`