Content SEO Optimizer
Performs detailed on-page SEO analysis of existing content -- either a live URL or raw text -- against a target keyword. Evaluates title tag, meta description, heading structure, keyword density, internal links, image alt tags, schema markup, and content length. Scores current optimization level, provides specific actionable fixes, and outputs a before/after optimization checklist.
Prerequisites
- WebSearch tool available for SERP analysis and competitive content benchmarking
- Browser automation tool available for crawling and extracting page elements
- Target URL or content text to analyze
- Target keyword or keyword phrase
- Optional:
agency.config.json for client context
Phase 0: Read Config
- Read
agency.config.json from the project root (if available).
- Extract
services[] for understanding the content's business context.
- Extract
icp.segments[] to tailor optimization for the right audience.
- Check
tools.websearch and tools.browser availability.
- Accept parameters:
url -- (optional) live page URL to analyze
content -- (optional) raw text/HTML content to analyze (use if URL not provided)
target_keyword -- (required) primary keyword to optimize for
secondary_keywords -- (optional) array of secondary keywords to check for
content_type -- (optional) blog_post | landing_page | product_page | service_page | homepage. Default: auto-detect
market -- (optional) US | UK | IN | AU | global. Default: derive from config
Phase 1: Content Extraction
If URL Provided
- Visit the URL via browser automation
- Extract the full page HTML
- Parse out:
<title> tag content
<meta name="description"> content
- All heading tags (H1 through H6) in order
- Body text content (stripped of HTML)
- All
<img> tags with src and alt attributes
- All internal links (href values pointing to same domain)
- All external links
- Any JSON-LD or microdata structured data
- Word count of body content
- URL slug
If Raw Content Provided
- Parse the text/HTML directly
- Extract same elements as above where available
- Note any missing elements (no title tag, no meta description, etc.)
Phase 2: Title Tag Analysis
Current State Assessment
- Is a title tag present?
- Title text content and character length
- Does the title contain the target keyword?
- Keyword position within the title (front-loaded is better)
- Is the brand name included?
- Is the title compelling for click-through?
Optimization Recommendations
- Optimal length: 50-60 characters
- Target keyword should appear in the first 60 characters
- Front-load the primary keyword when possible
- Include a value proposition or emotional hook
- Include brand name at the end (separated by
| or -)
- Generate 3 optimized title tag options
SERP Competitor Check
- WebSearch the target keyword
- Extract title tags from the top 5 ranking pages
- Identify patterns: what are top rankers doing differently?
- Note any truncation risks
Phase 3: Meta Description Analysis
Current State Assessment
- Is a meta description present?
- Description text and character length
- Does it contain the target keyword?
- Does it include a call-to-action?
- Is it compelling enough to drive clicks over competitors?
Optimization Recommendations
- Optimal length: 150-160 characters
- Include the target keyword naturally (Google bolds matching terms)
- Include a clear CTA or value proposition
- Differentiate from competitor descriptions
- Generate 2 optimized meta description options
Phase 4: Heading Structure Analysis
Current State Assessment
- Count of H1 tags (should be exactly 1)
- H1 content and keyword presence
- Full heading hierarchy: H1 > H2 > H3 > H4 > H5 > H6
- Are heading levels skipped? (H1 > H3 without H2 is bad)
- Do headings contain keywords naturally?
- Do headings reflect the content structure logically?
Optimization Recommendations
- Single H1 containing the primary keyword
- H2s for major sections, each targeting a related keyword or subtopic
- H3s for subsections within H2 blocks
- No skipped levels
- Generate suggested heading structure with keywords woven in
Phase 5: Keyword Density and Placement
Current State Assessment
- Primary keyword count and density (occurrences / total words x 100)
- Secondary keyword counts and densities
- Keyword placement map:
- In title tag?
- In meta description?
- In H1?
- In first 100 words of body?
- In at least one H2?
- In image alt tags?
- In URL slug?
- In last 100 words / conclusion?
Optimization Recommendations
- Target density: 1-3% for primary keyword (avoid over-optimization)
- Primary keyword must appear in: title, H1, first paragraph, at least one H2, conclusion
- Secondary keywords should appear 2-5 times each in body content
- Use semantic variations and LSI terms naturally
- Identify keyword stuffing risks and recommend reductions where needed
Phase 6: Internal Link Analysis
Current State Assessment
- Count of internal links on the page
- Internal link anchor text analysis
- Are links pointing to relevant related pages?
- Are there orphan page risks (no internal links pointing to this page)?
- Link depth from homepage
Optimization Recommendations
- Target: 3-5 internal links per 1000 words
- Use descriptive anchor text containing keywords (not "click here")
- Link to topically related pages (sibling content, pillar pages)
- Add links from high-traffic pages pointing to this page
- Suggest specific internal links to add, with anchor text
Phase 7: Image Optimization Analysis
Current State Assessment
- Total image count on the page
- Images missing alt text (count and list)
- Alt text quality: descriptive and keyword-relevant vs generic
- File name analysis: descriptive vs IMG_0001.jpg
- Image format: WebP/AVIF vs JPEG/PNG
- Lazy loading present?
Optimization Recommendations
- Every image needs descriptive alt text
- Include target keyword in at least one image alt tag (naturally)
- Rename files to descriptive slugs matching content
- Convert to WebP/AVIF where possible
- Add lazy loading for below-fold images
- Generate suggested alt text for each image missing it
Phase 8: Schema Markup Analysis
Current State Assessment
- Is any structured data present? (JSON-LD, Microdata, RDFa)
- What schema types are implemented?
- Are there validation errors in existing schema?
- What schema types are missing but relevant?
Optimization Recommendations
- Recommend applicable schema types based on content_type:
- Blog post: Article, BreadcrumbList, FAQ (if FAQ section exists)
- Product page: Product, Review, BreadcrumbList, FAQ
- Service page: Service, Organization, BreadcrumbList, FAQ
- Landing page: Organization, BreadcrumbList, FAQ
- Homepage: Organization, WebSite, SearchAction
- Flag opportunity for
schema-generator capability to create the markup
Phase 9: Content Quality Assessment
Current State Assessment
- Word count (thin content threshold: < 300 words for key pages)
- Readability: sentence length, paragraph length, reading level
- Content freshness: any dates or references that are outdated?
- Unique value: does this content offer something competitors don't?
- Content completeness: are there obvious subtopics missing?
Competitive Content Benchmarking
- WebSearch the target keyword
- Analyze top 3 ranking pages:
- Word count comparison
- Subtopics covered that this content misses
- Content formats used (lists, tables, images, videos)
- FAQ sections present
- Identify content gaps vs top rankers
Optimization Recommendations
- Minimum word count recommendations by content type
- Subtopics to add based on competitor analysis
- Content format improvements (add a table, add an FAQ section, add a summary)
- Freshness updates needed
Phase 10: Scoring and Output
Before/After Scoring
Score each element from 0-10:
| Element |
Weight |
Current Score |
Optimized Score (projected) |
| Title Tag |
15% |
? |
? |
| Meta Description |
10% |
? |
? |
| Heading Structure |
15% |
? |
? |
| Keyword Density |
15% |
? |
? |
| Internal Links |
10% |
? |
? |
| Image Optimization |
10% |
? |
? |
| Schema Markup |
10% |
? |
? |
| Content Quality |
15% |
? |
? |
| Overall |
100% |
? |
? |
Output JSON
{
"url": "https://example.com/blog/target-post",
"target_keyword": "shopify store optimization",
"analyzed_at": "2024-01-15T14:30:00Z",
"content_type": "blog_post",
"current_score": "4.8/10",
"projected_score": "8.5/10",
"score_breakdown": {
"title_tag": { "current": 3, "projected": 9, "weight": "15%" },
"meta_description": { "current": 2, "projected": 8, "weight": "10%" },
"heading_structure": { "current": 5, "projected": 9, "weight": "15%" },
"keyword_density": { "current": 6, "projected": 8, "weight": "15%" },
"internal_links": { "current": 4, "projected": 8, "weight": "10%" },
"image_optimization": { "current": 3, "projected": 8, "weight": "10%" },
"schema_markup": { "current": 0, "projected": 9, "weight": "10%" },
"content_quality": { "current": 7, "projected": 9, "weight": "15%" }
},
"optimizations": [
{
"element": "Title Tag",
"priority": "High",
"current": "Our Blog Post Title",
"recommended": "Shopify Store Optimization: 12 Proven Tactics for 2024 | Brand",
"alternatives": ["Alt title 1", "Alt title 2"],
"impact": "High -- title directly affects CTR and rankings"
}
],
"keyword_placement_checklist": {
"title_tag": { "present": false, "action": "Add target keyword to title" },
"meta_description": { "present": false, "action": "Add target keyword to meta description" },
"h1": { "present": true, "action": "No change needed" },
"first_100_words": { "present": false, "action": "Add keyword to opening paragraph" },
"h2_headings": { "present": true, "action": "No change needed" },
"image_alt": { "present": false, "action": "Add keyword to hero image alt text" },
"url_slug": { "present": true, "action": "No change needed" },
"conclusion": { "present": false, "action": "Add keyword to closing paragraph" }
},
"content_gaps": [
"Competitors cover 'Shopify speed optimization' -- add a section on this",
"Top rankers include a comparison table -- add one",
"FAQ section present on 3/5 top rankers -- add FAQ with PAA questions"
],
"internal_link_suggestions": [
{ "anchor_text": "Shopify CRO audit", "target_url": "/services/cro-audit", "context": "Add in section about conversion optimization" }
],
"schema_recommendation": "Add Article + FAQ + BreadcrumbList schema. Use schema-generator skill to create."
}
Example Usage
Trigger phrases:
- "Optimize [url] for [keyword]"
- "SEO check on [url] for [keyword]"
- "How well is [url] optimized for [keyword]?"
- "On-page SEO analysis for [url]"
- "Content SEO score for [url] targeting [keyword]"
User: Optimize plasho.com/services/shopify for "shopify development agency"
Assistant: [crawls the page, analyzes all on-page elements against the keyword, returns scored checklist with specific fixes]
User: How well is my blog post optimized for "ecommerce CRO tips"?
Assistant: [analyzes title, meta, headings, keyword density, links, images, schema, content quality, returns before/after scorecard]
1---2name: content-seo-optimizer3description: On-page SEO optimization for existing content with before/after scoring4---56# Content SEO Optimizer78Performs detailed on-page SEO analysis of existing content -- either a live URL or raw text -- against a target keyword. Evaluates title tag, meta description, heading structure, keyword density, internal links, image alt tags, schema markup, and content length. Scores current optimization level, provides specific actionable fixes, and outputs a before/after optimization checklist.910## Prerequisites1112- WebSearch tool available for SERP analysis and competitive content benchmarking13- Browser automation tool available for crawling and extracting page elements14- Target URL or content text to analyze15- Target keyword or keyword phrase16- Optional: `agency.config.json` for client context1718## Phase 0: Read Config19201. Read `agency.config.json` from the project root (if available).212. Extract `services[]` for understanding the content's business context.223. Extract `icp.segments[]` to tailor optimization for the right audience.234. Check `tools.websearch` and `tools.browser` availability.245. Accept parameters:25 - `url` -- (optional) live page URL to analyze26 - `content` -- (optional) raw text/HTML content to analyze (use if URL not provided)27 - `target_keyword` -- (required) primary keyword to optimize for28 - `secondary_keywords` -- (optional) array of secondary keywords to check for29 - `content_type` -- (optional) `blog_post` | `landing_page` | `product_page` | `service_page` | `homepage`. Default: auto-detect30 - `market` -- (optional) `US` | `UK` | `IN` | `AU` | `global`. Default: derive from config3132## Phase 1: Content Extraction3334### If URL Provided35- Visit the URL via browser automation36- Extract the full page HTML37- Parse out:38 - `<title>` tag content39 - `<meta name="description">` content40 - All heading tags (H1 through H6) in order41 - Body text content (stripped of HTML)42 - All `<img>` tags with src and alt attributes43 - All internal links (href values pointing to same domain)44 - All external links45 - Any JSON-LD or microdata structured data46 - Word count of body content47 - URL slug4849### If Raw Content Provided50- Parse the text/HTML directly51- Extract same elements as above where available52- Note any missing elements (no title tag, no meta description, etc.)5354## Phase 2: Title Tag Analysis5556### Current State Assessment57- Is a title tag present?58- Title text content and character length59- Does the title contain the target keyword?60- Keyword position within the title (front-loaded is better)61- Is the brand name included?62- Is the title compelling for click-through?6364### Optimization Recommendations65- Optimal length: 50-60 characters66- Target keyword should appear in the first 60 characters67- Front-load the primary keyword when possible68- Include a value proposition or emotional hook69- Include brand name at the end (separated by ` | ` or ` - `)70- Generate 3 optimized title tag options7172### SERP Competitor Check73- WebSearch the target keyword74- Extract title tags from the top 5 ranking pages75- Identify patterns: what are top rankers doing differently?76- Note any truncation risks7778## Phase 3: Meta Description Analysis7980### Current State Assessment81- Is a meta description present?82- Description text and character length83- Does it contain the target keyword?84- Does it include a call-to-action?85- Is it compelling enough to drive clicks over competitors?8687### Optimization Recommendations88- Optimal length: 150-160 characters89- Include the target keyword naturally (Google bolds matching terms)90- Include a clear CTA or value proposition91- Differentiate from competitor descriptions92- Generate 2 optimized meta description options9394## Phase 4: Heading Structure Analysis9596### Current State Assessment97- Count of H1 tags (should be exactly 1)98- H1 content and keyword presence99- Full heading hierarchy: H1 > H2 > H3 > H4 > H5 > H6100- Are heading levels skipped? (H1 > H3 without H2 is bad)101- Do headings contain keywords naturally?102- Do headings reflect the content structure logically?103104### Optimization Recommendations105- Single H1 containing the primary keyword106- H2s for major sections, each targeting a related keyword or subtopic107- H3s for subsections within H2 blocks108- No skipped levels109- Generate suggested heading structure with keywords woven in110111## Phase 5: Keyword Density and Placement112113### Current State Assessment114- Primary keyword count and density (occurrences / total words x 100)115- Secondary keyword counts and densities116- Keyword placement map:117 - In title tag?118 - In meta description?119 - In H1?120 - In first 100 words of body?121 - In at least one H2?122 - In image alt tags?123 - In URL slug?124 - In last 100 words / conclusion?125126### Optimization Recommendations127- Target density: 1-3% for primary keyword (avoid over-optimization)128- Primary keyword must appear in: title, H1, first paragraph, at least one H2, conclusion129- Secondary keywords should appear 2-5 times each in body content130- Use semantic variations and LSI terms naturally131- Identify keyword stuffing risks and recommend reductions where needed132133## Phase 6: Internal Link Analysis134135### Current State Assessment136- Count of internal links on the page137- Internal link anchor text analysis138- Are links pointing to relevant related pages?139- Are there orphan page risks (no internal links pointing to this page)?140- Link depth from homepage141142### Optimization Recommendations143- Target: 3-5 internal links per 1000 words144- Use descriptive anchor text containing keywords (not "click here")145- Link to topically related pages (sibling content, pillar pages)146- Add links from high-traffic pages pointing to this page147- Suggest specific internal links to add, with anchor text148149## Phase 7: Image Optimization Analysis150151### Current State Assessment152- Total image count on the page153- Images missing alt text (count and list)154- Alt text quality: descriptive and keyword-relevant vs generic155- File name analysis: descriptive vs IMG_0001.jpg156- Image format: WebP/AVIF vs JPEG/PNG157- Lazy loading present?158159### Optimization Recommendations160- Every image needs descriptive alt text161- Include target keyword in at least one image alt tag (naturally)162- Rename files to descriptive slugs matching content163- Convert to WebP/AVIF where possible164- Add lazy loading for below-fold images165- Generate suggested alt text for each image missing it166167## Phase 8: Schema Markup Analysis168169### Current State Assessment170- Is any structured data present? (JSON-LD, Microdata, RDFa)171- What schema types are implemented?172- Are there validation errors in existing schema?173- What schema types are missing but relevant?174175### Optimization Recommendations176- Recommend applicable schema types based on content_type:177 - Blog post: Article, BreadcrumbList, FAQ (if FAQ section exists)178 - Product page: Product, Review, BreadcrumbList, FAQ179 - Service page: Service, Organization, BreadcrumbList, FAQ180 - Landing page: Organization, BreadcrumbList, FAQ181 - Homepage: Organization, WebSite, SearchAction182- Flag opportunity for `schema-generator` capability to create the markup183184## Phase 9: Content Quality Assessment185186### Current State Assessment187- Word count (thin content threshold: < 300 words for key pages)188- Readability: sentence length, paragraph length, reading level189- Content freshness: any dates or references that are outdated?190- Unique value: does this content offer something competitors don't?191- Content completeness: are there obvious subtopics missing?192193### Competitive Content Benchmarking194- WebSearch the target keyword195- Analyze top 3 ranking pages:196 - Word count comparison197 - Subtopics covered that this content misses198 - Content formats used (lists, tables, images, videos)199 - FAQ sections present200- Identify content gaps vs top rankers201202### Optimization Recommendations203- Minimum word count recommendations by content type204- Subtopics to add based on competitor analysis205- Content format improvements (add a table, add an FAQ section, add a summary)206- Freshness updates needed207208## Phase 10: Scoring and Output209210### Before/After Scoring211212Score each element from 0-10:213214| Element | Weight | Current Score | Optimized Score (projected) |215|---------|--------|---------------|----------------------------|216| Title Tag | 15% | ? | ? |217| Meta Description | 10% | ? | ? |218| Heading Structure | 15% | ? | ? |219| Keyword Density | 15% | ? | ? |220| Internal Links | 10% | ? | ? |221| Image Optimization | 10% | ? | ? |222| Schema Markup | 10% | ? | ? |223| Content Quality | 15% | ? | ? |224| **Overall** | **100%** | **?** | **?** |225226### Output JSON227228```json229{230 "url": "https://example.com/blog/target-post",231 "target_keyword": "shopify store optimization",232 "analyzed_at": "2024-01-15T14:30:00Z",233 "content_type": "blog_post",234 "current_score": "4.8/10",235 "projected_score": "8.5/10",236 "score_breakdown": {237 "title_tag": { "current": 3, "projected": 9, "weight": "15%" },238 "meta_description": { "current": 2, "projected": 8, "weight": "10%" },239 "heading_structure": { "current": 5, "projected": 9, "weight": "15%" },240 "keyword_density": { "current": 6, "projected": 8, "weight": "15%" },241 "internal_links": { "current": 4, "projected": 8, "weight": "10%" },242 "image_optimization": { "current": 3, "projected": 8, "weight": "10%" },243 "schema_markup": { "current": 0, "projected": 9, "weight": "10%" },244 "content_quality": { "current": 7, "projected": 9, "weight": "15%" }245 },246 "optimizations": [247 {248 "element": "Title Tag",249 "priority": "High",250 "current": "Our Blog Post Title",251 "recommended": "Shopify Store Optimization: 12 Proven Tactics for 2024 | Brand",252 "alternatives": ["Alt title 1", "Alt title 2"],253 "impact": "High -- title directly affects CTR and rankings"254 }255 ],256 "keyword_placement_checklist": {257 "title_tag": { "present": false, "action": "Add target keyword to title" },258 "meta_description": { "present": false, "action": "Add target keyword to meta description" },259 "h1": { "present": true, "action": "No change needed" },260 "first_100_words": { "present": false, "action": "Add keyword to opening paragraph" },261 "h2_headings": { "present": true, "action": "No change needed" },262 "image_alt": { "present": false, "action": "Add keyword to hero image alt text" },263 "url_slug": { "present": true, "action": "No change needed" },264 "conclusion": { "present": false, "action": "Add keyword to closing paragraph" }265 },266 "content_gaps": [267 "Competitors cover 'Shopify speed optimization' -- add a section on this",268 "Top rankers include a comparison table -- add one",269 "FAQ section present on 3/5 top rankers -- add FAQ with PAA questions"270 ],271 "internal_link_suggestions": [272 { "anchor_text": "Shopify CRO audit", "target_url": "/services/cro-audit", "context": "Add in section about conversion optimization" }273 ],274 "schema_recommendation": "Add Article + FAQ + BreadcrumbList schema. Use schema-generator skill to create."275}276```277278## Example Usage279280Trigger phrases:281- "Optimize [url] for [keyword]"282- "SEO check on [url] for [keyword]"283- "How well is [url] optimized for [keyword]?"284- "On-page SEO analysis for [url]"285- "Content SEO score for [url] targeting [keyword]"286287```288User: Optimize plasho.com/services/shopify for "shopify development agency"289Assistant: [crawls the page, analyzes all on-page elements against the keyword, returns scored checklist with specific fixes]290```291292```293User: How well is my blog post optimized for "ecommerce CRO tips"?294Assistant: [analyzes title, meta, headings, keyword density, links, images, schema, content quality, returns before/after scorecard]295```