Check SEO score
check_seo_scoreScores any content you pass inline (markdown or plain text) with the same on-page SEO checks as BlogSEO articles: keyword in title, introduction, meta description and subheadings, keyword density, sub-keyword coverage, length, meta and title length, subheading distribution, internal and external links, inline images, FAQ section, paragraph and sentence length. Returns the 0-100 score with its letter grade, every check grouped by keyphrase/structure, the semantic coverage of secondary_keywords and the top fixes ordered by impact. The content does not need to be in BlogSEO: use it on drafts, pages from other tools or competitor copy. Without target_keyword the keyword checks are skipped; without site_url the link checks are not applicable. Pasted content has no URL, so no slug is scored: the keyword-in-slug check always reads as a reminder to put the keyword in the URL when you publish. Free and instant; use get_article for articles stored in BlogSEO. Pass website_id when the account has several websites (see get_account).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Body of the content as markdown or plain text, 200 to 60,000 characters. | |
| headline | Yes | Title (H1) of the content. | |
| site_url | No | URL of the site the content lives on; its host tells internal and external links apart. | |
| website_id | No | Website id from get_account. Optional when the account has a single website. | |
| target_keyword | No | Primary keyword the content should rank for. | |
| meta_description | No | Meta description, when there is one. | |
| secondary_keywords | No | Secondary keywords the content should also cover (max 20). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| band | Yes | ||
| label | Yes | Letter grade, S+ to D. | |
| score | Yes | On-page SEO score, 0-100. | |
| checks | Yes | ||
| top_fixes | Yes | Failing checks, most impactful first. | |
| website_id | Yes | Website the result belongs to. | |
| word_count | Yes | ||
| has_keyphrase | Yes | false when no target keyword was given: keyword checks are skipped. | |
| semantic_keywords | Yes |