Page Report
Use this skill whenever an Agentic SEO workflow generates a report page for the Web Companion. It is a shared contract, not a standalone SEO module.
When To Use
Use page-report from report-producing skills and runtime code when creating or reviewing report.md for Technical SEO, Internal Links, SEO Analysis, Keyword Research, SERP Extract, Backlink Analysis, Topic Cluster, E-E-A-T, or Competitive Analysis.
Do not use this skill for public content drafts, approval handoffs, inline chat answers, raw provider captures, or authorial Brain updates that are not report pages.
Critical Points
- The canonical report path is
project/analyses/<module>/<run-slug>/report.md.
- The report is the editable human presentation layer. Raw evidence, normalized YAML/JSON, logs, and operational artifacts stay in
sources/, audits/, keywords/, clusters/, eeat/, or workbench/.
- Frontmatter must include
title, slug, report_type, generated_at, status, source_artifact, and summary; include score only when the module has a real score.
- Do not write
# <title> in the Markdown body. The Companion renders the title from frontmatter.
- Use the project language from
project/.agentic-seo/project.json.language unless a command has an explicit language override. Complete copy is required for pt-BR and en.
- New visual fences must be YAML with
version: 1: agentic-kpis, agentic-chart, and agentic-table. JSON fences are legacy read compatibility only.
- Tables must use stable lower-snake ASCII
key values. User-facing label values may be translated or edited without changing keys.
- Calculation tables must mark columns with
role: weight, role: points, and role: loss so score recalculation survives label edits.
- Each report-producing module has
skills/<module>/contract.yaml and templates/analyses/<module>/report-skeleton.md; keep required H2 sections and table keys from the skeleton.
- Before declaring a manual report done, run
npm run validate:reports -- --module=<module> --slug=<run-slug> or use scripts/lib/report-writer.mjs, which refuses invalid reports before writing.
- Never paste raw provider JSON, object arrays,
[object Object], internal IDs, or snake_case evidence into the visual body. Convert evidence into natural language and readable tables.
- Format numbers per the project language. The canonical source is
shared/locale.mjs (getProjectLanguage, formatNumber, formatPercent, canonicalKeyword). Skills either ship locale-formatted strings in agentic-table/agentic-kpis cells, or leave numbers raw for the Companion (useI18n().formatNumber / formatPercent) to format on render. Percent-bearing columns use the _pct key suffix on the 0..100 scale.
- Always return
report_md and browser_prompt: { recommended: true, message: "Posso abrir o Web Companion para você ver a análise?", open_with: "project-browser" }.
- Register the generated report in
project/brain/log.md as type: decision unless a more specific log type is required.
Framework
1. Build The Source Artifact
Write the module's authoritative machine-readable artifact first. It may be YAML or JSON, but it must remain outside project/analyses/ and be referenced by frontmatter source_artifact.
2. Render The Human Page
Start with an executive reading. Then add module-specific sections, visual blocks, and human-readable appendices. Keep technical depth, but translate it into prose, friendly labels, and compact evidence.
3. Validate The Contract
Before returning the result, verify: canonical path, frontmatter, no H1 body title, no HTML default, YAML visual fences, no raw JSON/object dumps, readable evidence, source separation, and log entry.
4. Review The Result
For QA, generate one report per module with fixtures/offline data. A report is satisfactory only when it scores at least 4/5 for clarity, evidence separation, visual usefulness, actionability, and localization, with no category below 3/5.
Output Format
The report Markdown must have this shape:
---
title: "Human report title"
slug: "stable-run-slug"
report_type: "technical-seo"
generated_at: "2026-05-23T00:00:00.000Z"
status: "ready"
source_artifact: "audits/example/report.yaml"
summary: "One-sentence executive summary."
score: "92"
---
Executive summary prose without a duplicate H1.
```agentic-kpis
version: 1
items:
- label: Score
value: 92/100
```
Use only supported report_type values: technical-seo, internal-links, seo-analysis, keyword-research, serp-extract, backlink-analysis, topic-cluster, eeat, and competitive-analysis.
Done Criteria
report.md exists under the canonical module path and is returned as report_md.
source_artifact points to the normalized technical source.
- The Companion can list, open, edit, save, and roundtrip the page.
- Visual fences parse as YAML
version: 1.
- No visible JSON/object dumps or duplicated title appear in the report body.
- The report is registered in
brain/log.md.
1---2name: page-report3description: Shared report-page contract for Agentic SEO modules that render editable, human-first Markdown reports in the Web Companion.4---56# Page Report78Use this skill whenever an Agentic SEO workflow generates a report page for the Web Companion. It is a shared contract, not a standalone SEO module.910## When To Use1112Use `page-report` from report-producing skills and runtime code when creating or reviewing `report.md` for Technical SEO, Internal Links, SEO Analysis, Keyword Research, SERP Extract, Backlink Analysis, Topic Cluster, E-E-A-T, or Competitive Analysis.1314Do not use this skill for public content drafts, approval handoffs, inline chat answers, raw provider captures, or authorial Brain updates that are not report pages.1516## Critical Points1718- The canonical report path is `project/analyses/<module>/<run-slug>/report.md`.19- The report is the editable human presentation layer. Raw evidence, normalized YAML/JSON, logs, and operational artifacts stay in `sources/`, `audits/`, `keywords/`, `clusters/`, `eeat/`, or `workbench/`.20- Frontmatter must include `title`, `slug`, `report_type`, `generated_at`, `status`, `source_artifact`, and `summary`; include `score` only when the module has a real score.21- Do not write `# <title>` in the Markdown body. The Companion renders the title from frontmatter.22- Use the project language from `project/.agentic-seo/project.json.language` unless a command has an explicit language override. Complete copy is required for `pt-BR` and `en`.23- New visual fences must be YAML with `version: 1`: `agentic-kpis`, `agentic-chart`, and `agentic-table`. JSON fences are legacy read compatibility only.24- Tables must use stable lower-snake ASCII `key` values. User-facing `label` values may be translated or edited without changing keys.25- Calculation tables must mark columns with `role: weight`, `role: points`, and `role: loss` so score recalculation survives label edits.26- Each report-producing module has `skills/<module>/contract.yaml` and `templates/analyses/<module>/report-skeleton.md`; keep required H2 sections and table keys from the skeleton.27- Before declaring a manual report done, run `npm run validate:reports -- --module=<module> --slug=<run-slug>` or use `scripts/lib/report-writer.mjs`, which refuses invalid reports before writing.28- Never paste raw provider JSON, object arrays, `[object Object]`, internal IDs, or snake_case evidence into the visual body. Convert evidence into natural language and readable tables.29- Format numbers per the project language. The canonical source is `shared/locale.mjs` (`getProjectLanguage`, `formatNumber`, `formatPercent`, `canonicalKeyword`). Skills either ship locale-formatted strings in `agentic-table`/`agentic-kpis` cells, or leave numbers raw for the Companion (`useI18n().formatNumber` / `formatPercent`) to format on render. Percent-bearing columns use the `_pct` key suffix on the 0..100 scale.30- Always return `report_md` and `browser_prompt: { recommended: true, message: "Posso abrir o Web Companion para você ver a análise?", open_with: "project-browser" }`.31- Register the generated report in `project/brain/log.md` as `type: decision` unless a more specific log type is required.3233## Framework3435### 1. Build The Source Artifact3637Write the module's authoritative machine-readable artifact first. It may be YAML or JSON, but it must remain outside `project/analyses/` and be referenced by frontmatter `source_artifact`.3839### 2. Render The Human Page4041Start with an executive reading. Then add module-specific sections, visual blocks, and human-readable appendices. Keep technical depth, but translate it into prose, friendly labels, and compact evidence.4243### 3. Validate The Contract4445Before returning the result, verify: canonical path, frontmatter, no H1 body title, no HTML default, YAML visual fences, no raw JSON/object dumps, readable evidence, source separation, and log entry.4647### 4. Review The Result4849For QA, generate one report per module with fixtures/offline data. A report is satisfactory only when it scores at least 4/5 for clarity, evidence separation, visual usefulness, actionability, and localization, with no category below 3/5.5051## Output Format5253The report Markdown must have this shape:5455````markdown56---57title: "Human report title"58slug: "stable-run-slug"59report_type: "technical-seo"60generated_at: "2026-05-23T00:00:00.000Z"61status: "ready"62source_artifact: "audits/example/report.yaml"63summary: "One-sentence executive summary."64score: "92"65---6667Executive summary prose without a duplicate H1.6869```agentic-kpis70version: 171items:72 - label: Score73 value: 92/10074```75````7677Use only supported `report_type` values: `technical-seo`, `internal-links`, `seo-analysis`, `keyword-research`, `serp-extract`, `backlink-analysis`, `topic-cluster`, `eeat`, and `competitive-analysis`.7879## Done Criteria8081- `report.md` exists under the canonical module path and is returned as `report_md`.82- `source_artifact` points to the normalized technical source.83- The Companion can list, open, edit, save, and roundtrip the page.84- Visual fences parse as YAML `version: 1`.85- No visible JSON/object dumps or duplicated title appear in the report body.86- The report is registered in `brain/log.md`.