Install
openclaw skills install seo-geo-qaCheck blog posts and articles before publishing. Finds broken links, weak sources, missing SEO elements, and citation problems. Use when: reviewing a draft, auditing content quality, checking if links still work, verifying sources are credible, running pre-publish QA, or doing post-publish page checks. Also triggers on: 'check this article', 'verify my links', 'review before publishing', 'content audit', 'source quality check', 'are my links working', 'SEO review', 'pre-publish checklist'. Generates markdown+JSON reports with PASS/FAIL verdict. Python stdlib only, no dependencies.
openclaw skills install seo-geo-qaUse this skill to audit content reliability before or after publishing.
curl available in PATH (for HTTP HEAD checks)r.jina.ai — used as a fallback for SERP search and competitor page fetching (bypasses Cloudflare / anti-bot). Pass --no-jina to disable if needed.Run the unified runner for normal draft review:
python3 skills/seo-geo-qa/scripts/seo_qa_runner.py path/to/article.md --keyword "best email apps"
If you know the site's main domain, pass it so internal vs external links are counted correctly:
python3 skills/seo-geo-qa/scripts/seo_qa_runner.py path/to/article.md --keyword "best email apps" --site-domain example.com
If you want project defaults, pass a lightweight JSON config:
python3 skills/seo-geo-qa/scripts/seo_qa_runner.py path/to/article.md --keyword "best email apps" --config path/to/seo-geo-qa.json
seo_qa_runner.py on the draft.post_publish_check.py on the live URL.Use these only when debugging a specific failure mode.
python3 skills/seo-geo-qa/scripts/verify_links.py path/to/article.md
python3 skills/seo-geo-qa/scripts/verify_links.py path/to/article.md --json
# Auto-search (uses DuckDuckGo + Jina Reader fallback for anti-bot bypass)
python3 skills/seo-geo-qa/scripts/serp_gap_analyzer.py "best email apps" path/to/article.md
# Supply competitor URLs directly (skips search, still uses Jina to fetch pages)
python3 skills/seo-geo-qa/scripts/serp_gap_analyzer.py "best email apps" path/to/article.md --urls https://competitor1.com https://competitor2.com
# Disable Jina (direct HTTP only, faster but may fail on Cloudflare-protected sites)
python3 skills/seo-geo-qa/scripts/serp_gap_analyzer.py "best email apps" path/to/article.md --no-jina
How the SERP search works:
r.jina.ai) which renders the page with a real browser and decodes DDG's redirect linkspython3 skills/seo-geo-qa/scripts/post_publish_check.py https://example.com/blog/post
python3 skills/seo-geo-qa/scripts/post_publish_check.py https://example.com/blog/post --json
The runner writes timestamped markdown + JSON reports by default.
Default behavior:
qa-reports/<article-slug>/ next to the articleOverride with --report-dir or config.
Read references/configuration.md when you need project-level defaults.
Read references/source-tiers.md when you need to decide whether a citation is acceptable.
Read references/verdict-rules.md when you need to tune PASS / FAIL / REVISE behavior.
Read references/example-report.md for a real QA report with annotations on how to interpret each section.
This skill is not a writing assistant. It is a reliability layer.
Use scripts for deterministic checks. Use AI judgment for tone, search intent, framing, and final editorial decisions.