# Seo Firecrawl > Scraping ad-hoc, mapeo de sitios y crawling completo vía Firecrawl MCP: devuelve HTML crudo, metadatos, DOM renderizado por JS y screenshots que WebFetch no puede obtener. Fuente: https://skillsagentes.com/skills/seranking/seo-skills/seo-firecrawl Markdown: https://skillsagentes.com/skills/seranking/seo-skills/seo-firecrawl.md Repositorio: https://github.com/seranking/seo-skills Autor: seranking Licencia: MIT Actualizado: hace 2 meses Coste de contexto: 171 tok instalada, 2.4k tok al activarse, 3.9k tok con todos los archivos del bundle Bundle: 2 archivos, 15 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-firecrawl --agent claude-code # Cursor npx -y skills add seranking/seo-skills --skill seo-firecrawl --agent cursor # Codex npx -y skills add seranking/seo-skills --skill seo-firecrawl --agent codex # Gemini CLI npx -y skills add seranking/seo-skills --skill seo-firecrawl --agent gemini # Windsurf npx -y skills add seranking/seo-skills --skill seo-firecrawl --agent windsurf # Cline npx -y skills add seranking/seo-skills --skill seo-firecrawl --agent cline ``` ## Qué hace - Ofrece scrape, map, crawl y search de un sitio vía Firecrawl MCP - Devuelve HTML crudo, metadatos og:*/twitter:*/JSON-LD/canonical/robots, DOM renderizado por JS y screenshots - Estima el coste en créditos antes de ejecutar y pide confirmación explícita en crawl o map >50 URLs - Estructura la salida en RAW.md, META.md, URLS.md, INDEX.md o MATCHES.md según el modo - Genera FIRECRAWL.md con resumen, hallazgos clave y siguiente skill recomendada ## Cuándo usarla - El usuario pide 'scrape this page', 'crawl this site', 'map this site' o 'find all pages on' - Se necesita HTML crudo, metadatos del
, JSON-LD o el DOM tras ejecutar JS que WebFetch no da - Se necesita la lista de todas las URLs de un dominio o buscar dentro de un dominio conocido - Otra skill de nivel superior (seo-page, seo-schema, seo-content-audit) lo invoca como sub-paso ## Cuándo no - No se recomienda usar firecrawl_extract ni firecrawl_deep_research, están fuera de alcance - No es su objetivo vencer Cloudflare u otros anti-bot: si el sitio bloquea el scraper, se debe reportar el error sin intentar esquivarlo ## Qué la activa - "Haz scrape de esta página y dame las etiquetas OG" - "Mapea todas las URLs de este dominio" - "Crawlea este sitio y audita los metadatos de cada página" - "Busca esta palabra dentro de este dominio con Firecrawl" - "Renderiza esta página JS-heavy y dame el DOM post-JS" ## Antes de instalar - Requiere el servidor MCP firecrawl-mcp instalado (bash extensions/firecrawl/install.sh) y una cuenta en firecrawl.dev (nivel gratis 500 créditos/mes). - makes network requests ## Archivos - SKILL.md — 9 KB - references/preflight.md — 6 KB ## SKILL.md Reproducido tal cual desde seranking/seo-skills bajo MIT. Esta sección es el documento original y está en inglés. > Example output: [examples/seo-firecrawl-stripe-com-20260514/scrape/FIRECRAWL.md](../../examples/seo-firecrawl-stripe-com-20260514/scrape/FIRECRAWL.md) # Firecrawl Orchestrator A direct interface to Firecrawl MCP for tasks that fall outside the data-driven SE Ranking skills. Use when: - You need raw HTML, `` metadata, JSON-LD, or post-JS DOM that WebFetch's markdown conversion strips. - You need a list of all URLs on a domain without pulling each one. - You need to crawl a site and audit each page's metadata. - You need to search within a known domain. - A higher-level skill (`seo-page`, `seo-schema`, `seo-content-audit`, etc.) called you as a sub-step. ## Prerequisites - **Required:** the `firecrawl-mcp` MCP server. If `mcp__firecrawl-mcp__firecrawl_scrape` is unavailable, abort with the install command — `bash extensions/firecrawl/install.sh` from this plugin repo, plus the firecrawl.dev signup URL (free tier 500 credits/month). Don't attempt fallbacks; this skill exists for the cases WebFetch can't cover. - User provides: a target URL or domain, plus optionally a mode (`scrape` / `map` / `crawl` / `search`). If mode unspecified, infer from input shape (single URL → `scrape`, single domain → `map`). ## Process 1. **Preflight.** Confirm `firecrawl-mcp` is connected. If not, surface the install command and stop. 2. **Mode selection.** Resolve user intent into one of: - `scrape` — single URL, full data (default if user supplies one URL). - `map` — single domain, list of URLs only (cheap reconnaissance). - `crawl` — single domain, fetch each discovered page (expensive; require explicit confirm). - `search` — query within a domain. 3. **Cost estimation + confirmation.** - `scrape` (1 credit), `map` (~0.5 credit per discovered URL — estimate using a `map` first if scope unclear), `crawl` (1 credit per page crawled), `search` (1 credit per result returned). - For `crawl` and for `map` of >50 expected URLs, surface the estimate and require explicit go-ahead before calling. - Always read remaining credits implicitly via Firecrawl's response metadata (`creditsUsed` / `creditsRemaining` in `metadata`). 4. **Execute.** Call the matching `mcp__firecrawl-mcp__firecrawl_*` tool. - `scrape`: pass `formats: ["markdown", "html"]` by default (markdown for prose, html for `` + JSON-LD). Add `formats: ["screenshot"]` only if the deliverable visibly uses one. SPAs: pass `waitFor: 2000` (or a CSS selector) so the JS-rendered DOM is captured. Default `onlyMainContent: true` to drop nav/footer noise — override only on explicit request. - `map`: default `limit: 500` (hard cap). Pass `excludePaths: ["/admin/*", "/api/*", "/wp-admin/*", "/feed/*"]` as a sane default. - `crawl`: default `limit: 50` (default cap), hard cap `limit: 200`. Always pass `excludePaths` to prune. Poll `firecrawl_check_crawl_status` if the job returns asynchronously. - `search`: default `limit: 20`. 5. **Parse + structure output.** Don't dump the raw API response. Per-mode: - `scrape` → `RAW.md` (markdown body), `META.md` (og / twitter / canonical / robots / headers + parsed JSON-LD `@type` list with hashes), `links.csv`, optional `screenshot.png`. - `map` → `URLS.md` with pattern-grouped list (e.g., `/blog/* — 128 (37%)`, `/products/* — 84 (24%)`), plus `urls.csv`. - `crawl` → folder per page under `pages/{slugified-url}/` with `RAW.md` + `META.md`, plus a top-level `INDEX.md` summarising every page (URL, status, key signals). - `search` → `MATCHES.md` with hit excerpts + URLs ranked by relevance. 6. **Synthesise** `FIRECRAWL.md` at the root: target, mode, credits used, key findings (5 bullets max), open loops, recommended next skill. ## Output format Folder `seo-firecrawl-{slug}-{YYYYMMDD}/`: ### Mode = scrape ``` seo-firecrawl-{slug}-{YYYYMMDD}/ ├── RAW.md (markdown body) ├── META.md (og / twitter / canonical / robots / headers + parsed JSON-LD) ├── links.csv (every on the page) ├── screenshot.png (optional; only if requested) └── FIRECRAWL.md (synthesis + handoff payload) ``` ### Mode = map ``` seo-firecrawl-{slug}-{YYYYMMDD}/ ├── URLS.md (pattern-grouped URL list) ├── urls.csv (every URL with discovery depth, if available) └── FIRECRAWL.md ``` ### Mode = crawl ``` seo-firecrawl-{slug}-{YYYYMMDD}/ ├── INDEX.md (every page + status code + key signals) ├── pages/ │ ├── {slug-1}/RAW.md │ ├── {slug-1}/META.md │ ├── {slug-2}/RAW.md │ └── ... └── FIRECRAWL.md ``` ### Mode = search ``` seo-firecrawl-{slug}-{YYYYMMDD}/ ├── MATCHES.md (hit excerpts + URLs ranked by relevance) └── FIRECRAWL.md ``` `FIRECRAWL.md` follows this shape: ```markdown # Firecrawl: {target} > Run dated {YYYY-MM-DD} · Mode: {scrape | map | crawl | search} · Credits used: {n} ## Summary {One-paragraph what-came-back. Example: "Scraped https://example.com/article. og:title and og:image present, JSON-LD Article schema with author + datePublished. 12 outbound links. Page is server-rendered (no JS-render divergence). Robots: index,follow."} ## Key findings 1. {Finding anchored in concrete data} 2. ... 5. ... ## Open loops - {What this run did NOT answer} - ... ## Recommended next step {One of: `seo-page` (when a single URL was scraped and now wants performance analysis) | `seo-schema` (when JSON-LD audit needs follow-up generation) | `seo-technical-audit` (when crawl revealed broken pages) | `seo-content-audit` (when crawl produced a corpus to audit) | `seo-drift baseline` (when the user wants to track this URL over time) | "this completes the user's ask".} ## Handoff payload - **Produced by:** seo-firecrawl - **Target:** {url or domain} - **Mode:** {scrape | map | crawl | search} - **Credits used:** {n} - **Key findings:** {5 bullets — e.g., "twitter:card present (summary_large_image)", "JSON-LD types: Article + Organization + BreadcrumbList", "robots: index,follow", "canonical self-referencing", "404s: 0 of 50 pages crawled"} - **Open loops:** {what this didn't answer} - **Recommended next skill:** {seo-page | seo-schema | seo-technical-audit | seo-content-audit | …} — {one-line why} ``` ## Tips - **Free tier 500 cr/month.** `map` is 0.5 cr/URL; `scrape` is 1 cr each; `crawl` 1 cr/page. Surface cost up front; warn when a single run will eat >100 credits. - **Default `onlyMainContent: true`** for `scrape` to drop nav/footer noise. Override only if the user explicitly asks for full-page DOM. - **Use `waitFor`** (CSS selector or ms) for SPAs that lazy-load content. 2000ms is a sensible default; selectors are more reliable than time waits. - **`firecrawl_map` before `firecrawl_crawl`** when crawl scope is unclear — discover first, decide what to crawl, then crawl. Saves credits. - **`includePaths` / `excludePaths`** dramatically cut crawl cost. Always pass `excludePaths: ["/admin/*", "/api/*", "/wp-admin/*", "/feed/*"]` as a default. - **Don't request `formats: ["screenshot"]`** unless the deliverable visibly uses it. It doubles per-page cost. - **Don't use `firecrawl_extract` or `firecrawl_deep_research`.** Both overlap with our own LLM analysis; `firecrawl_extract` has opaque pricing on the free tier; both are explicitly out of scope for `seo-skills`. - **Cloudflare / anti-bot:** some sites (especially e-commerce, banking) block Firecrawl's scraper. Surface the error cleanly; defeating WAFs is not a goal of this skill. - **Sub-step usage.** When invoked from another skill (`seo-page`, `seo-schema`, etc.), drop the `FIRECRAWL.md` synthesis — the caller wants the raw `META.md` / `RAW.md`. Skip mode-2's `URLS.md` summary too if the caller wants the raw `urls.csv`. - **This is the entry point** when you need raw HTML and don't have a more specific skill in mind. If you do — `seo-page` for keyword/traffic verdicts on one URL, `seo-schema` for JSON-LD work, `seo-technical-audit` for crawl-wide issues — use those instead. They orchestrate Firecrawl plus SE Ranking data automatically. ## Works well with - **Predecessors:** none (entry point) or invoked as a sub-step from another skill. - **Successors:** - `seo-page` — when a single URL was scraped and now wants keyword/traffic verdicts. - `seo-schema` — when JSON-LD audit produced gaps that need generation. - `seo-technical-audit` — when a crawl revealed broken pages or noindex issues at scale. - `seo-content-audit` — when a crawl produced a corpus to E-E-A-T-audit. - `seo-drift baseline` — when the user wants to track this URL or domain over time. ## Dónde encaja - Categoría: [SEO y GEO](https://skillsagentes.com/categorias/seo-geo.md) — Keywords, auditorías on-page, datos estructurados y visibilidad en respuestas de IA. - Creador: [seranking](https://skillsagentes.com/creators/seranking.md) — 32 skills en el directorio - [Todas las skills](https://skillsagentes.com/skills.md) - [Ranking de instalaciones](https://skillsagentes.com/ranking.md) ## Otras skills del mismo repositorio - [Client Onboarding Proposal](https://skillsagentes.com/skills/seranking/seo-skills/client-onboarding-proposal.md): Construye una propuesta de onboarding de cliente basada en datos, combinando un audit SEO + búsqueda IA de SE Ranking con un análisis en Planable del rendimiento social actual del cliente. - [Local Gmb Visibility](https://skillsagentes.com/skills/seranking/seo-skills/local-gmb-visibility.md): Combina el seguimiento de rankings por ciudad de SE Ranking con contenido social local en Planable, incluyendo publicaciones de Google Business Profile. - [Ai Search Gaps To Social Campaign](https://skillsagentes.com/skills/seranking/seo-skills/ai-search-gaps-to-social-campaign.md): Encuentra los prompts y temas de búsqueda con IA donde una marca es invisible o pierde frente a competidores en SE Ranking, y convierte esos vacíos en una campaña social en Planable con seguimiento antes/después. - [Site Audit To Social Distribution](https://skillsagentes.com/skills/seranking/seo-skills/site-audit-to-social-distribution.md): Detecta páginas débiles y brechas de contenido en SE Ranking, y coordina la corrección en Planable: redacta el copy reescrito para revisión y aprobación, y programa la distribución social. - [Seo Ai Social Report](https://skillsagentes.com/skills/seranking/seo-skills/seo-ai-social-report.md): Genera un único reporte de rendimiento que une rankings SEO, visibilidad en búsquedas IA (SE Ranking) y engagement social (Planable): resumen en el chat más un informe HTML interactivo autónomo. --- Skills Agentes · [Índice de páginas en markdown](https://skillsagentes.com/sitemap.md) · [Inicio](https://skillsagentes.com/index.md)