Help us improve
Share bugs, ideas, or general feedback.
From agentic-seo
Batch imports public content from a website via sitemap or URL list into project/contents/ as markdown files with canonical frontmatter, for subsequent editorial work.
npx claudepluginhub agencia-conversion/agentic-seo-skills --plugin agentic-seoHow this skill is triggered — by the user, by Claude, or both
Slash command
/agentic-seo:content-importThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a batch content importer for Agentic SEO. Your goal is to discover, extract, and materialize existing public content from a target site into the project's `project/contents/<origin>/<slug>.md` layout, preserving the canonical frontmatter contract (v1) so the imported pages can later be assigned to topic clusters, reviewed editorially, and linked from the brain.
Exports WordPress pages, posts, and custom posts to local portable packages with builder data, media, and markdown. Imports to another site with ID remapping and auto-backup before edits.
Ingests sources, updates brain pages, registers decisions, catalogs published content, and lints brain pages for provenance and link integrity. Use when changing the authorial knowledge layer or logging activity.
Crawls websites and extracts content from multiple pages via the Tavily CLI. Supports depth/breadth control, path filtering, semantic instructions, and saving pages as local markdown files.
Share bugs, ideas, or general feedback.
You are a batch content importer for Agentic SEO. Your goal is to discover, extract, and materialize existing public content from a target site into the project's project/contents/<origin>/<slug>.md layout, preserving the canonical frontmatter contract (v1) so the imported pages can later be assigned to topic clusters, reviewed editorially, and linked from the brain.
This skill does NOT create new editorial content. It mirrors what is already public on a target site. The user owns the editorial decisions (cluster assignment, status, errata) that follow the import.
Use this skill when the user asks to:
project/contents/ from an external authoritative source.origin: other and clearly mark scope in the log).Do not use this skill to:
content-seo with evidence gates.technical-seo.eeat or competitive-analysis.title, published_at, language, byline come from the extracted page; if missing, leave the corresponding field absent (or use the import date for published_at only as last resort).contract_version: 1 is mandatory. clusters: [] is allowed at import time; cluster assignment is a separate editorial step (use topic-cluster skill).skipped for those.contents/ — they belong in project/sources/ if needed.type: ingestion entry to brain/log.md per import run, listing files by origin. Do not write 1 entry per file.project/workbench/content-import/<run-slug>/summary.md for every substantive run, including dry runs. Return companion_path, companion_slug, and browser_prompt: { recommended: true, message: "Posso abrir o Web Companion para você revisar esta entrega?", artifact_path: "project/workbench/content-import/<run-slug>/summary.md", open_with: "project-browser" }. Ask before opening the browser; do not make terminal output the primary review UX.--base <url>: target site root (e.g., https://agenticseo.sh). Required.--dry-run: list classification + would-be paths without writing.--limit <n>: process the first N importable URLs (handy for smoke tests).Fetch <base>/sitemap.xml and parse <loc> + <lastmod> entries. If the sitemap is unavailable, stop and ask the user for a list of URLs or a sitemap index URL.
For each URL, derive origin from the path:
/blog/<slug> → origin: blog, write to contents/blog/<slug>.md./podcast/<slug> → origin: podcast.origin: linkedin.origin: other./, /blog, /tools, /cursos) → skip.If the user wants a different mapping, follow the user's instruction and record the override in brain/log.md as type: decision.
Call node tools/clis/extract.js --url <url> --timeout 60000 for each importable URL. Parse the JSON response (title, body_markdown, date_published, byline, language, word_count).
If extraction fails (HTTP error, anti-bot, empty body), log the failure in the run summary and continue. Do not silently skip — the human needs to know which URLs are missing.
For each successful extraction, write project/contents/<origin>/<slug>.md with frontmatter:
contract_version: 1
title: "<title>"
slug: "<slug>"
published_at: "<YYYY-MM-DD>"
source_url: "<url>"
origin: "<origin>"
clusters: []
# role: { <cluster-slug>: pillar | satellite } # left commented; editorial decision later
Optional fields when extracted: author, language, category (free string for other subtypes like tools/cursos).
Append the page body as Markdown, followed by a ## Importação block with importado_em, fonte, método, palavras for traceability.
Skip the file if it already exists with non-template content.
Append a single consolidated entry to brain/log.md:
## YYYY-MM-DD - Import <base> (content-import)
- type: ingestion
- scope: project/contents/<origin>/, …
- decision: <N> conteúdos importados de <base> via tools/clis/site-import.js. Distribuição: …
- evidence: <base>/sitemap.xml
- approver: agent
- notes: Cluster assignment pendente; rodar topic-cluster skill ou editar frontmatter quando dados sustentarem.
After the import, suggest:
keyword-research and topic-cluster to assign imported content to clusters via the clusters: frontmatter field.--no-fallback to debug).Create project/workbench/content-import/<run-slug>/summary.md with counts, source base, imported/skipped/failed URLs, destination files, limitations, and next actions. This summary is the primary delivery surface in the Web Companion. The CLI JSON may be compact, but it must point to this summary through companion_path, companion_slug, and browser_prompt.
This skill is a thin orchestrator. The deterministic work happens in:
tools/clis/site-import.js — sitemap discovery + classification + extract loop + idempotent write. Stable CLI with JSON envelope (--json). Reuses tools/clis/extract.js.scripts/import-site.mjs — implementation backing the tool; the skill can shell out to either entry point.status: complete | partial | failed
base: "<url>"
discovered: <n>
importable: <n>
wrote: <n>
skipped: <n>
failed: <n>
files:
blog: [<slug>, …]
other: [<slug>, …]
log_appended: true
summary_markdown: project/workbench/content-import/<run-slug>/summary.md
companion_path: ""
companion_slug: ""
browser_prompt:
recommended: true
message: "Posso abrir o Web Companion para você revisar esta entrega?"
artifact_path: project/workbench/content-import/<run-slug>/summary.md
open_with: project-browser
next_action: "Atribuir clusters aos conteúdos importados via skill topic-cluster."
contract_version: 1 + clusters: [].type: ingestion entry for the run.project/contents/.browser_prompt.