Never Alone Online
Catalog/SEO & Content/SEO Article Lint
tool

SEO Article Lint

Deterministic 19-check quality gate for a blog draft: paste markdown, get pass/fail with a fix per failure.

Send a full article draft with its frontmatter and get 19 checks back in milliseconds: title and description lengths, slug format, heading hierarchy, word count, paragraph length, internal and external link counts, https citations, image count and alt text, BlogPosting JSON-LD that matches the frontmatter, leftover placeholders and keyword placement. Every failed check carries a one-line fix, so an agent can repair the draft and call again until it passes. Structural lint only: it does not judge quality or truth. Pairs with the seo-blog-writer skill.

Calls

2

Success rate

100%

Avg latency

110 ms

Updated

10/9/2026

Input schema

{
  "type": "object",
  "required": [
    "markdown"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "maxLength": 253,
      "description": "Site host, e.g. example.com; classifies own-site absolute links as internal"
    },
    "h1_mode": {
      "enum": [
        "none",
        "one"
      ],
      "type": "string",
      "default": "none",
      "description": "none: the frontmatter title is the H1; one: the body must contain exactly one H1"
    },
    "markdown": {
      "type": "string",
      "minLength": 1,
      "description": "Full draft with YAML frontmatter; at most 200KB"
    },
    "min_words": {
      "type": "integer",
      "default": 1000,
      "maximum": 100000,
      "minimum": 0
    },
    "primary_keyword": {
      "type": "string",
      "maxLength": 200,
      "description": "Fallback only when the frontmatter has no keyword field"
    }
  }
}

Call it from your agent

curl
curl -X POST https://neveraloneonline.com/api/v1/run \
  -H "Authorization: Bearer $NAO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent":"seo-article-lint","input":{"domain":"example.com","markdown":"---\ntitle: \"How to Choose a Standing Desk in 2026: A Buyer's Guide\"\ndescription: \"Confused by standing desk options? This guide compares frame types, height ranges and real prices so you can pick the right desk for your home office.\"\nslug: how-to-choose-standing-desk\ndate: 2026-08-11\nkeyword: how to choose a standing desk\ntags: [standing-desk, home-office]\nimage: /images/standing-desk-guide/cover.webp\n---\n\n## How to choose a standing desk\n\nStart with your elbow height.","min_words":1000}}'
Python
import os, requests

r = requests.post(
    "https://neveraloneonline.com/api/v1/run",
    headers={"Authorization": f"Bearer {os.environ['NAO_API_KEY']}"},
    json={"agent": "seo-article-lint", "input": {"domain":"example.com","markdown":"---\ntitle: \"How to Choose a Standing Desk in 2026: A Buyer's Guide\"\ndescription: \"Confused by standing desk options? This guide compares frame types, height ranges and real prices so you can pick the right desk for your home office.\"\nslug: how-to-choose-standing-desk\ndate: 2026-08-11\nkeyword: how to choose a standing desk\ntags: [standing-desk, home-office]\nimage: /images/standing-desk-guide/cover.webp\n---\n\n## How to choose a standing desk\n\nStart with your elbow height.","min_words":1000}},
)
run = r.json()
print(run["status"], run["billing"]["billedUsd"])
print(run["output"])
As a tool definition
# Load this listing as a tool definition (OpenAI / Anthropic shape)
GET https://neveraloneonline.com/api/v1/tools.json?q=seo-article-lint

Get an API key and credit on the Developer page. Full reference in the docs.