seo-audit-pdf
Skill18 starsChanged 10 days agoMITView on GitHub
Turn a finished SEO + GEO audit into a client-ready PDF report with a fixed, polished layout. Input: the findings of an audit (usually from seo-geo-audit and the skills it hands off to). Output: one A4 PDF where no block is ever split across two pages, with a verdict, measured strengths, top priorities, every finding by category, an ordered action plan with no dates or delays, what was not verified, and the method. Use when an audit must be sent as a PDF, attached to an email, forwarded to a developer, or when the user asks for an audit report, a PDF audit, or a client deliverable.
In this repository27 other files it gives its agents.
- AGENTS.mdAGENTS.md
- geo-trackingSkill
- geo-visibilitySkill
- seo-ai-site-buildersSkill
- seo-backlinksSkill
- seo-competitor-analysisSkill
- seo-content-blogSkill
- seo-content-collection-pageSkill
- seo-content-comparison-hubSkill
- seo-content-comparison-pageSkill
- seo-content-data-studySkill
- seo-content-homepageSkill
- seo-content-product-pageSkill
- seo-content-service-pageSkill
- seo-geo-auditSkill
- seo-internal-linkingSkill
- seo-keyword-researchSkill
- seo-localSkill
- seo-page-sectionsSkill
- seo-schema-markupSkill
- seo-sitemapSkill
- seo-technicalSkill
- seo-traffic-dropSkill
- social-amplificationSkill
- youtube-descriptionSkill
- youtube-thumbnailSkill
- youtube-titleSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 3 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 32
If the audit has not been run yet, run seo-geo-audit first.
- Distinctive: line 47
If the PDF replaces an earlier version, overwrite the same file name, and re-attach it wherever the old one was attached (the email draft …
- Distinctive: line 61
Keep it readable: the priorities section must be understandable alone by someone who reads nothing else.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
SEO + GEO audit report (PDF)
The audit skills find the problems. This skill packages them into the document the client actually reads, forwards to a developer, and judges the agency on. A correct audit in an ugly or confusing PDF loses the sale: the layout is part of the deliverable.
Hard rules (a report that breaks one is not sent)
- No dates, no delays, no schedule. Never write when an action will be done or how long it takes: no "week 1", "month 2", "in 3 weeks", "by Q1", no "When" or "Timeline" column, no Gantt, no effort-in-days. Fixes can be shipped very fast today (AI-assisted development, template-level changes), so any delay printed in the report is false and caps the client's ambition. Order replaces dates: the action plan is numbered by impact, and that order is the only sequencing. The only date allowed is the date the audit was run.
- Nothing is ever cut across two pages. Every unit of meaning (a finding, a priority, a KPI row, an action, a section heading with its first block) is atomic: if it does not fit in the space left on the page, it moves whole to the next page. White space at the bottom of a page is fine; a finding split in two is not. The template enforces this with
break-inside: avoidon every block andbreak-after: avoidon every heading; never put findings in a long<table>(rows split badly), use the card components. - Every claim is measured. Each number comes from the audit data (scripts, browser check, PageSpeed, Search Console, owner data). What was not measured goes in "Not verified", never in the findings.
- Writing rules: language of the site; no em dash (U+2014) or en dash (U+2013), commas, colons or parentheses instead; compact numbers and amounts (3000€, 98/100, 45%); numbered lists written
1.2.; every technical term explained in plain words the first time it appears (the PDF is forwarded to people who are not SEO experts); no acronym left unexplained. - The owner's own recommendations are included. If the user added recommendations to the email or notes that accompany the audit, they appear in the PDF too, in the right finding and in the action plan, so the email and the PDF never contradict each other.
Inputs
| Input | Source |
| Findings with status (OK, To fix, Priority) and measured facts | seo-geo-audit, Phase 2 and 3 |
| Scores and speed | seo_audit.py, PageSpeed (or the Sorank PageSpeed tool) |
| Site-level counts (orphans, broken links, duplicates) | site_crawl.py |
| What a crawler without JavaScript sees | render_check.py --ua-compare |
| Accompanying email or notes | the user (read them before writing, rule 5) |
If the audit has not been run yet, run seo-geo-audit first. This skill does not collect data.
Workflow
- Copy
assets/report-template.htmlto the working folder (for exampleaudit-<domain>/report.html). - Fill it, keeping the component classes. The structure and what goes in each section are below. Delete the example blocks you do not use; never add inline styles that override the break rules.
- Render and check:
python3 scripts/render_pdf.py audit-<domain>/report.html "audit-<domain>/Audit SEO GEO <domain>.pdf" --pngThe script prints the PDF with headless Chrome (A4, page numbers in the footer, backgrounds kept), then lints the text: it fails on any dash character, any schedule or delay word (week, month, day, timeline, deadline and their French equivalents), any "When" column, and spaced thousands such as "3 000 €". A legitimate hit inside a measured fact (a case study that says "20000 followers in 2 months") is allowed with --allow "2 months". With --png it writes one image per page next to the PDF.
- Open every page image and check it by eye: no block cut at the bottom of a page, no heading alone at the bottom of a page, no empty page, no text overflowing a card. Fix and render again until clean. Then delete the page images.
- If the PDF replaces an earlier version, overwrite the same file name, and re-attach it wherever the old one was attached (the email draft keeps the old attachment otherwise).
Report structure
| # | Section | Component | Content |
| 1 | Cover band | .cover | Domain, one-line definition of SEO and GEO, audit date, scope (pages analysed, pages checked in a browser, competitors) |
| 2 | Verdict | .verdict (.ok, .warn or .bad) | One of three: ready to grow, a few corrections first then accelerate, rebuild before investing. One or two sentences why |
| 3 | What is already good | .kpis (4 tiles) + .checklist | Measured strengths first: credibility, and the reader keeps reading. End with an honest reference point ("better than 90% of the sites we audit") |
| 4 | The priorities | .prio cards, 3 to 6 | For each: finding (measured), why it matters, action, expected effect, tags for scope (number of pages) and who does it (developer, writer, owner). No effort in time |
| 5 | Detail by category | .cat sections of .finding cards | One card per point, with a status pill: ok OK, fix To fix, prio Priority, watch To watch, minor Minor. Categories in the order of the seo-geo-audit checklist, skipping those that do not apply |
| 6 | Action plan, in order | .plan list | Numbered by impact. Each action: what to do, the pages it touches, who does it. No date, no duration, no effort column |
| 7 | Not verified, and method | .two-col | What was out of reach and what access would unlock it; how the data was collected |
Keep it readable: the priorities section must be understandable alone by someone who reads nothing else. Group template-level problems ("one fix repairs 142 pages") and say so, because it turns a scary number into good news.
Design system (already in the template)
- A4, 16 mm margins, footer with the domain and
page / totalon every page. - One accent color, status colors for pills only (green OK, amber to fix, red priority, blue to watch, grey minor), dark ink on white, soft grey tiles.
- Inter for text (Google Fonts, falls back to the system font offline), tabular figures for numbers.
- Each
h2section starts with a short lead sentence; the first block after a heading is glued to it. .page-breakforces a new page before a major section when the previous one ends low on the page; use it sparingly, after checking the page images.
Common mistakes
- Writing a "When" or "Week" column out of habit. The order of the plan is the schedule.
- Putting 20 findings in one
<table>: rows split across pages and the header repeats badly. Use.findingcards. - Leaving an old PDF attached to the email draft after re-rendering.
- Copying the email text into the PDF verbatim: the email is the summary, the PDF is the detail that a developer can execute.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

