Created
August 21, 2026 12:42
-
-
Save quantumproxies/ca4bf3c5afbaa94bd13a1f44416908ac to your computer and use it in GitHub Desktop.
Is your page indexable without JavaScript? One curl answers it — QuanticData SEO Audit API https://quanticdata.io/blog/how-to-perform-an-seo-audit/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env bash | |
| # Fetch a URL twice — as a no-JS bot and fully rendered — and show the difference. | |
| # That diff is invisible in a browser: your eyes always see the rendered view. | |
| # | |
| # export QD_API_KEY=qd_live_... | |
| # ./qd-seo-audit.sh https://example.com | |
| # | |
| # Needs curl and jq. $0.0012 a URL. https://quanticdata.io/seo-audit/ | |
| # Guide: https://quanticdata.io/blog/how-to-perform-an-seo-audit/ | |
| set -euo pipefail | |
| : "${QD_API_KEY:?export QD_API_KEY — https://app.quanticdata.io/register}" | |
| URL="${1:?usage: ./qd-seo-audit.sh <url>}" | |
| curl -sS https://api.quanticdata.io/v1/seo-audit \ | |
| -H "Authorization: Bearer $QD_API_KEY" \ | |
| -H "Content-Type: application/json" \ | |
| -d "$(jq -n --arg url "$URL" '{url: $url}')" \ | |
| | jq -r ' | |
| if .type == "error" then "error: " + .message | |
| else .payload as $a | | |
| "\($a.url) -> \($a.finalUrl)\n", | |
| " no-JS bot rendered", | |
| "title \($a.noJs.title // "-") | \($a.render.title // "-")", | |
| "h1 \($a.noJs.h1 // "-") | \($a.render.h1 // "-")", | |
| "words \($a.noJs.wordCount) | \($a.render.wordCount)", | |
| "canonical \($a.noJs.canonical // "MISSING")", | |
| "robots \($a.meta.robots // "(none)")", | |
| "json-ld \($a.meta.jsonldTypes | join(", "))", | |
| "", | |
| "findings:", | |
| ( $a.diff | to_entries[] | select(.value == true) | | |
| " " + ( | |
| if .key == "contentOnlyInJs" then "CRITICAL the page is essentially blank without JavaScript" | |
| elif .key == "canonicalMissingNoJs" then "HIGH canonical only appears after JS runs" | |
| elif .key == "h1OnlyInRender" then "MEDIUM no H1 in the served HTML" | |
| elif .key == "titleChanged" then "MEDIUM title is rewritten client-side" | |
| else "LOW " + .key end ) ), | |
| ( if ($a.diff | to_entries | map(select(.value == true)) | length) == 0 | |
| then " none — the served HTML already carries the page" else empty end ) | |
| end' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment