The first thing you should do when you sign a new SEO client is audit their site. Not a quick glance — a structured, documented audit that establishes a baseline, identifies quick wins, and shows the client exactly where they stand.
Most agencies do this manually. Open a spreadsheet, check title tags one by one, test page speed, look for broken links. It takes 2-4 hours per site and the output is inconsistent between team members.
Here's a better approach: automate the audit, document the results, and start the engagement with data — not opinions.
What Does the 28-Point Checklist Cover?
These are the checks that matter for every new client site, organized by category.
Meta & Content
| # | Check | Why It Matters |
|---|---|---|
| 1 | Title tag exists | No title = invisible in search results |
| 2 | Title length (50-60 chars) | Too long gets truncated, too short wastes space |
| 3 | Meta description exists | Controls the snippet in search results |
| 4 | Meta description length (120-160 chars) | Same truncation issue as title |
| 5 | H1 tag present | Primary heading signals page topic to Google |
| 6 | Single H1 per page | Multiple H1s dilute topic signal |
| 7 | Heading hierarchy (H1→H2→H3) | Skipping levels confuses crawlers |
| 8 | Content length (300+ words) | Thin content rarely ranks |
| 9 | Image alt text coverage | Accessibility + image search visibility |
| 10 | Readability score | Content too complex = high bounce rate |
Technical SEO
| # | Check | Why It Matters |
|---|---|---|
| 11 | HTTPS enabled | Ranking signal since 2014, trust signal for users |
| 12 | SSL certificate valid | Expired cert = browser warning = bounced visitors |
| 13 | Response time (<500ms) | Slow servers hurt Core Web Vitals |
| 14 | Canonical URL set | Prevents duplicate content penalties |
| 15 | Mobile viewport meta tag | Required for mobile-first indexing |
| 16 | robots.txt present | Controls what gets crawled |
| 17 | XML sitemap present | Helps Google discover all pages |
| 18 | Structured data (JSON-LD) | Enables rich snippets in search results |
Social & Open Graph
| # | Check | Why It Matters |
|---|---|---|
| 19 | OG title set | Controls how links appear on Facebook/LinkedIn |
| 20 | OG description set | The preview text when shared |
| 21 | OG image set | Posts with images get 2-3x more engagement |
| 22 | Twitter Card tags | Same as OG but for Twitter/X |
| 23 | Favicon present | Browser tabs, bookmarks, professionalism |
Performance
| # | Check | Why It Matters |
|---|---|---|
| 24 | Page size (<3MB) | Large pages = slow loads = high bounce |
| 25 | DOM complexity | Overly complex DOM slows rendering |
| 26 | Compression enabled (gzip/brotli) | 60-80% reduction in transfer size |
Accessibility
| # | Check | Why It Matters |
|---|---|---|
| 27 | Language attribute on HTML | Screen readers need to know the language |
| 28 | ARIA landmarks | Helps assistive technology navigate the page |
How Do You Run a Client Audit via API?
Instead of checking these 28 points manually, run one API call:
curl -H "X-API-Key: YOUR_KEY" \
"https://seoscoreapi.com/audit?url=https://newclient.com"
You get back every check with a pass/warning/fail status, an overall score, and prioritized fix recommendations. What used to take 2 hours takes 3 seconds.
Python: Onboard Multiple Pages
New clients usually care about more than their homepage. Audit their key pages in one script:
from seoscoreapi import audit, report_url
client_pages = [
"https://newclient.com",
"https://newclient.com/services",
"https://newclient.com/about",
"https://newclient.com/contact",
"https://newclient.com/blog",
]
print("NEW CLIENT ONBOARDING AUDIT")
print("=" * 50)
total_issues = 0
for url in client_pages:
result = audit(url, api_key="YOUR_KEY")
issues = len(result.get("priorities", []))
total_issues += issues
print(f"\n{url}")
print(f" Score: {result['score']}/100 ({result['grade']})")
print(f" Issues: {issues}")
for p in result["priorities"][:3]:
print(f" [{p['severity']}] {p['issue']}")
domain = "newclient.com"
print(f"\nTotal issues across {len(client_pages)} pages: {total_issues}")
print(f"Shareable report: {report_url(domain)}")
What Do You Show the Client?
Take the output from the audit and present three things in your kickoff meeting:
- The score — a single number they can understand (e.g., "You're at 62/100, we're going to get you to 85+")
- The quick wins — high-severity issues that are easy to fix (missing meta descriptions, no alt text, missing OG tags)
- The report link — hand them
https://seoscoreapi.com/report/newclient.comso they can see the details themselves
This positions you as data-driven from day one. No vague promises — concrete numbers and a plan.
Setting Up Ongoing Monitoring
Once the baseline audit is done, set up monitoring so you catch regressions between check-ins:
from seoscoreapi import add_monitor
add_monitor("https://newclient.com", api_key="YOUR_KEY", frequency="daily")
You'll get an email alert if their score drops by 5+ points. This is how you catch it when their dev team pushes a template change that breaks meta tags — before the client notices the traffic drop.
The Onboarding Workflow
Here's the complete flow for every new client:
- Sign contract
- Run automated audit — 5 key pages, 3 seconds each
- Review results — identify quick wins and long-term priorities
- Share report link with client
- Set up monitoring — daily checks on their homepage
- Fix quick wins — usually done in the first week
- Re-audit — show the score improvement
- Monthly reporting — automated, sent via email or shared dashboard
Steps 2-5 take under 10 minutes with the API. That's the difference between onboarding a client in an afternoon vs. a week.
Get Started
- Sign up for a free API key — 5 audits/day to try the workflow
- Run your first onboarding audit
- Send the report to a client and see their reaction
- Upgrade to Basic ($15/mo) for ongoing client work
Frequently Asked Questions
What does the 28-point SEO audit checklist cover?
The checklist spans five categories: Meta & Content (title tags, meta descriptions, headings, readability), Technical SEO (HTTPS, canonical tags, sitemap, structured data), Social & Open Graph (OG tags, Twitter Cards), Performance (page size, compression, DOM complexity), and Accessibility (language attribute, ARIA landmarks).
How do you run a client SEO audit via the API?
Send a single GET request to https://seoscoreapi.com/audit?url=https://clientsite.com with your API key in the X-API-Key header. The response returns a score from 0-100, a letter grade, pass/fail results for all 28 checks, and a prioritized list of issues to fix — in about 3 seconds.
How do you generate a shareable client report?
Use the report_url(domain) helper from the Python SDK or navigate directly to https://seoscoreapi.com/report/yourdomain.com. The report page shows the score, grade, category breakdowns, and prioritized fixes in an interactive format. It updates automatically every time you re-audit the domain.
What does the /report endpoint return?
The /report/{domain} endpoint returns a fully rendered, publicly accessible HTML report page for the given domain. It includes the overall SEO score, letter grade, per-category breakdowns across all 28 checks, and a prioritized fix list. No authentication is required to view it — just send clients the link.
How do you white-label audit results for clients?
Use the raw JSON from the /audit endpoint and feed it into your own HTML template, PDF generator, or Google Sheet. The API returns structured data — score, grade, individual check results, and priorities — that you can render with your agency's branding. The shareable report link and SVG badge are also available for no-build delivery.