The Problem with Manual SEO Audits
SEO audits are tedious. You export a crawl, open a spreadsheet, mark each page against a checklist, and manually prioritize fixes. For a 10-page site, that's a couple of hours. For a 78-page blog, that's a full work week. And by the time you finish, three new posts have gone live with the same old issues.
This was exactly our pain point. We were publishing 3+ posts per week across multiple projects, and every post needed: meta title optimization, OG tag validation, heading hierarchy check, keyword density analysis, and internal linking review. Manual review didn't scale.
Enter the AIKit Auto-Blog SEO Plugin
The AIKit Auto-Blog SEO plugin analyzes every post at publish time and scores it across seven dimensions. No human reviewer needed — the plugin runs as a Cloudflare Worker hook fired by EmDash's content lifecycle.
How Scoring Works
The plugin uses a multi-stage scoring pipeline:
```
[Post Published] → [Extract Content] → [Score Dimensions]
→ [Generate Recommendations] → [Save to _emdash_seo] → [Done]
```
Each dimension is scored 0-100:
| Dimension | Weight | What It Checks |
|-----------|--------|----------------|
| Title SEO | 20% | Meta title length (50-60 chars), keyword presence, brand inclusion |
| Description | 15% | Meta description length (150-160 chars), call-to-action, keyword match |
| Heading Structure | 15% | Single H1, logical H2/H3 hierarchy, keyword in headings |
| Content Depth | 15% | Word count vs topic, readability score, paragraph length |
| Keyword Usage | 15% | Primary keyword in first 100 words, headings, alt text |
| Internal Links | 10% | Links to related content, link diversity, anchor text quality |
| Technical SEO | 10% | OG tags, canonical URL, schema markup, image alt attributes |
AEO Citability Score
Beyond traditional SEO, the plugin scores for AEO (Answer Engine Optimization). This measures how likely your content is to be cited by AI chatbots and LLM-based search engines:
- **Direct answer format** — Does the post answer a specific question in the first paragraph?
- **Structured data** — Are FAQ schema or HowTo schema present?
- **Citation readiness** — Can an AI extract a clean quote with context?
- **Entity density** — How many named entities (tools, frameworks, authors) per 100 words?
Automated Recommendations
The plugin doesn't just score — it provides actionable recommendations:
```json
{
"recommendations": [
{
"dimension": "title_seo",
"score": 65,
"issue": "Title is 45 characters — aim for 50-60",
"suggestion": "Add 'Serverless' to the beginning of the title"
},
{
"dimension": "internal_links",
"score": 30,
"issue": "Zero internal links found",
"suggestion": "Link to 'D1 Multi-Tenant Architecture' post from the introduction"
}
],
"overall_score": 72
}
```
The recommendations are stored in the `_emdash_seo` table alongside the post's SEO metadata. An admin dashboard widget displays the score and top recommendations for each post.
LLM-Powered Scoring
The scoring engine itself is hybrid:
- **Rule-based checks** (title length, heading hierarchy, word count) run locally in the Worker — zero additional cost
- **LLM-assisted checks** (readability, keyword relevance, AEO citability) use OpenRouter with a small model (GPT-4o-mini) — ~$0.002 per post
For 78 published posts, total LLM scoring cost: ~$0.16. The rule-based checks catch 70% of issues for free.
Integration with EmDash Content Lifecycle
The plugin hooks into EmDash's `afterSave` lifecycle event:
```typescript
// Plugin hook
hooks: {
afterSave: async ({ entry, collection }) => {
if (collection === 'posts') {
const score = await runSeoScore(entry.data);
await saveSeoMetadata(entry.data.id, score);
await updateDashboardWidget(score);
}
}
}
```
This means every post — whether published via admin UI or automated pipeline — gets scored automatically.
Results After 78 Posts
After running the scoring engine across all published content:
| Metric | Before Plugin | After Plugin | Improvement |
|--------|---------------|--------------|-------------|
| Avg SEO Score | 58/100 | 84/100 | +26 points |
| Posts with proper meta | 34% | 97% | +63% |
| Internal linking coverage | 22% | 89% | +67% |
| AEO citability score | 41/100 | 76/100 | +35 points |
| Time spent on SEO review | 4 hrs/week | ~5 mins/week | 98% reduction |
The biggest win wasn't the score improvement — it was the time savings. Automated scoring freed up the content team to focus on writing and strategy instead of manual checklist reviews.
Building Your Own Scoring Plugin
The AIKit plugin is available as part of the EmDash Auto Blog/SEO plugin suite. But you can build your own scoring hooks using the same pattern:
1. Register an `afterSave` hook in your plugin config
2. Run your scoring logic (rule-based + optional LLM)
3. Save results to `_emdash_seo` or your own storage
4. Build a dashboard widget to display scores
The EmDash plugin system makes it straightforward — the hard part is designing good scoring criteria.
The Bottom Line
Automated SEO scoring turns content publishing from a manual-review bottleneck into a self-improving pipeline. AIKit's plugin handles the checklist so you can focus on what matters: writing content that actually helps your audience.