CiteScope Desktop (Windows, macOS, Linux)
The desktop application runs crawls directly from your machine without cloud URL limits. Every crawl is saved locally in an embedded SQLite WAL database so you can compare crawls over time, query them from the CLI, or inspect them in Cursor and Claude Code.
Installation & Local Database Location
| Platform | Package | First-Launch Notes |
|---|---|---|
| Windows 10 / 11 (x64) | CiteScope-Windows-amd64.zip | Extract and run CiteScope-Windows-amd64.exe. Uses native Windows WebView2. |
| macOS (Apple Silicon & Intel) | CiteScope-macOS-universal.zip | Unzip and move to Applications. If macOS Gatekeeper prompts on first launch, run xattr -cr /Applications/CiteScope.app. |
| Linux (x64) | CiteScope-Linux-amd64 | Run chmod +x CiteScope-Linux-amd64 && ./CiteScope-Linux-amd64. |
~/.gocrawl/gocrawl.db (or %USERPROFILE%\.gocrawl\gocrawl.db on Windows).
Configuring Crawl Scope & JavaScript Rendering
- Polite Rate Limiting: By default, CiteScope crawls at
10–15 requests/secper host with automaticrobots.txtcompliance andRetry-Afterbackoff so production servers and CDNs are not overloaded. - Raw Server HTML Mode (Default): Parses the exact initial HTTP response that non-JavaScript crawlers (such as
GPTBot,ClaudeBot, andPerplexityBot) receive. - Smart Hybrid JS Rendering (Headless Chromium): Renders client-side React, Next.js, Vue, or Angular pages in headless Chromium and diffs the hydrated DOM against raw HTML to flag client-only links, missing SSR text, and canonical tag mutations.
- Staging Basic Auth: Supply optional HTTP Basic Auth credentials to audit password-protected staging environments before launch.
Exports & Deliverables
- 3-File AI Grounding Pack: Generates
/llms.txt(concise Markdown directory),/llms-full.txt(complete page digest), andproduct-overview.html(plain HTML with JSON-LD schema) ranked by internal PageRank. - Clean XML Sitemap: Exports a spec-compliant
sitemap.xmlcontaining only200 OK, self-canonical, indexable pages. - 301 Migration Redirect Mapper: Matches an old crawl against a staging/redesign crawl using path similarity, content hash, and 64-bit
SimHashto generate ready-to-deploynginx.conf,vercel.json, or Cloudflare_redirectsrules.
Automated Audits with citescope ci
The same binary runs headless in your terminal or CI/CD pipeline. It crawls a target URL, prints a structured Markdown scorecard to standard output, and optionally exits with code 1 if critical SEO or AI search regressions are found.
Basic CLI Usage
./CiteScope-Linux-amd64 ci https://staging.example.com --max-urls 1000 --rps 15 --workers 10 --fail-on-critical
CLI Subcommands & Flags
| Flag / Command | Default | Description |
|---|---|---|
ci <url> |
Required | Crawls the target URL, runs PageRank and all audit rules, and outputs a Markdown report to stdout. |
--max-urls |
1000 |
Maximum number of internal URLs to crawl before stopping. |
--rps |
15.0 |
Maximum requests per second per host. |
--workers |
10 |
Number of concurrent crawler worker goroutines. |
--fail-on-critical |
false |
Returns exit code 1 if one or more critical issues (4xx/5xx broken links, noindex on canonical pages, redirect loops) are detected. |
mcp |
— | Starts the local JSON-RPC 2.0 Model Context Protocol server over stdin/stdout. |
serve-grader --port 8090 |
8090 |
Runs a standalone self-hosted HTTP grader and lead-capture widget server. |
GitHub Actions Workflow Example
Add .github/workflows/citescope-audit.yml to your repository to audit staging deployments on every pull request:
name: Technical SEO & AI Search Gate
on:
pull_request:
branches: [main]
jobs:
citescope-audit:
runs-on: ubuntu-latest
steps:
- name: Download CiteScope CLI
run: |
curl -fsSL https://citescope.app/downloads/CiteScope-Linux-amd64 -o citescope
chmod +x citescope
- name: Run Crawl & Fail on Critical Regressions
run: |
./citescope ci https://staging.example.com --max-urls 500 --rps 15 --fail-on-critical > audit-report.md
cat audit-report.md >> $GITHUB_STEP_SUMMARY
Connecting Cursor, Claude Code & Windsurf
CiteScope includes a native Model Context Protocol (MCP) server exposing 15 tools. Your AI coding assistant can start crawls, inspect page metadata, check AI bot firewall parity, generate /llms.txt files, and verify fixes directly from your editor.
Option A: Local Stdio MCP Server (citescope mcp)
Add the following block to .cursor/mcp.json in your project root or ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"citescope": {
"command": "/usr/local/bin/citescope",
"args": ["mcp"]
}
}
}
Option B: Zero-Install Cloud HTTP Endpoint (/api/mcp)
You can also query the hosted JSON-RPC 2.0 MCP endpoint at https://citescope.app/api/mcp (or inspect the tool manifest at https://citescope.app/api/mcp/tools):
curl -X POST https://citescope.app/api/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_llm_bot_parity","arguments":{"url":"https://vercel.com"}}}'
All 15 Available MCP Tools
| Tool Name | Required Arguments | What It Returns |
|---|---|---|
start_crawl |
seed_url (optional: max_urls, concurrency) |
Runs a crawl, computes PageRank and audit rules, and returns crawl_id + summary KPIs. |
list_crawls |
None (optional: limit) |
Lists saved crawl sessions in SQLite with crawl_id, seed URL, total URLs, and timestamp. |
get_site_scorecard |
crawl_id |
Returns the 6-dimension health scorecard (0–100, Grade A+ to F), top deductions, and ranked quick wins. |
get_site_graph_summary |
crawl_id |
Returns status code distribution, indexable count, PageRank summary, and orphan page count. |
query_crawl_issues |
crawl_id (optional: severity, category, min_impact) |
Queries detected audit issues sorted by ImpactScore. |
get_url_audit_details |
crawl_id, url |
Returns full extracted metadata, status, canonical, inlink/outlink counts, PageRank, and issues for one URL. |
check_llm_bot_parity |
url |
Probes the URL as Googlebot, GPTBot, OAI-SearchBot, ClaudeBot, and PerplexityBot to detect WAF or robots.txt blocks. |
audit_llms_txt |
base_url |
Fetches and validates /llms.txt structure and checks cited links for 200 OK reachability. |
generate_ai_grounding_pack |
crawl_id |
Generates /llms.txt, /llms-full.txt, and semantic entity HTML from the crawl's top indexable pages. |
run_ai_visibility_probe |
crawl_id (optional: brand_name, competitor) |
Evaluates AI citation readiness and entity grounding across 5 buyer-intent prompts. |
get_keyword_alignment |
crawl_id, url |
Computes 1-, 2-, and 3-word N-gram frequency and checks alignment with Title, H1, H2, and Meta Description. |
audit_js_hydration |
url |
Compares raw server HTML against headless Chromium DOM to detect client-only links or canonical changes. |
get_llm_fix_pack |
crawl_id |
Generates a developer remediation pack with grep hints and route patterns for autonomous code fixes. |
compare_crawls |
baseline_crawl_id, current_crawl_id |
Diffs two crawls to spot status regressions, indexability drops, title/H1 edits, and PageRank shifts. |
verify_fixes_loop / map_migration_redirects |
baseline_crawl_id, current_crawl_id |
Verifies resolved vs. open issues after code changes, or maps 301 redirects between old and new URLs. |
Example Prompts in Cursor or Claude Code
- "Use CiteScope to crawl
https://staging.example.com(up to 100 URLs), list all pages missingog:imageor meta descriptions, and update the corresponding route metadata files in this repo." - "Run
check_llm_bot_parityandaudit_llms_txton our production domain, then generate a clean/public/llms.txtfile usinggenerate_ai_grounding_pack."
36 Extracted Per-Page Telemetry Fields
Every crawled page is parsed in a single streaming pass and stored in crawl_nodes (available in the Page Analytics Dashboard and 36-column CSV export):
| Category | Field Names | Description |
|---|---|---|
| Identity & HTTP | url, normalized_url, url_hash, status_code, content_type, response_time_ms, size_bytes, depth |
Full URL, 64-bit xxHash key, HTTP status code, MIME type, TTFB latency in ms, raw HTML byte size, and BFS click depth from seed. |
| SERP & Headings | title, title_count, title_pixel_width, meta_description, meta_desc_count, desc_pixel_width, h1, h1_count, h2, h2_count, h3, h3_count, heading_order_skipped |
Extracted tags, duplicate tag counts, Google SERP Arial pixel widths (580px title / 960px description limits), and whether heading levels jump non-sequentially (e.g., H1 to H3). |
| OpenGraph & Social | og_title, og_description, og_image, twitter_card |
Social preview card metadata used by Slack, LinkedIn, X, Discord, and iMessage. |
| Content & Readability | visible_word_count, readability_score, text_to_html_ratio, content_hash, simhash |
Main-content word count (excluding nav/footer boilerplate), Flesch Reading Ease score (0–100), visible text bytes divided by raw HTML bytes, SHA-256 exact hash, and 64-bit SimHash for near-duplicate detection. |
| Media & Links | image_count, image_alt_missing, image_alt_too_long, generic_anchors, inlinks_count, outlinks_count, link_score |
Total <img> tags, images missing alt text, alt attributes over 100 chars, generic anchor links ("click here", "read more"), internal link counts, and iterative PageRank score (0–100). |
| Indexability & Schema | is_indexable, indexability_reason, canonical, canonical_count, robots_directives, html_lang, has_viewport, has_meta_refresh, schema_types |
Indexability verdict, canonical URL and tag count, combined meta robots + X-Robots-Tag directives, <html lang>, mobile viewport tag, meta refresh, and flattened JSON-LD @type entities. |
Core Audit Rules & How to Fix Them
| Rule ID | Severity | Trigger Condition & Remediation |
|---|---|---|
STATUS_4XX / STATUS_5XX |
Critical | Page returns HTTP 400–599. Update internal links pointing to the dead URL or restore the route. |
REDIRECT_CHAIN / REDIRECT_LOOP |
Warning / Critical | URL requires 2+ redirect hops or loops infinitely. Point internal links and initial 301 rules directly to the final 200 OK destination. |
BROKEN_INTERNAL_LINK |
Critical | An internal <a href> points to a 4xx/5xx URL. Fix the anchor href in your template or navigation. |
CANONICAL_MISSING / CANONICAL_MULTIPLE |
Warning / Critical | Indexable 200 OK page lacks a <link rel="canonical"> tag or defines conflicting canonical tags. |
TITLE_MISSING / TITLE_PIXEL_OVERFLOW |
Critical / Warning | Missing <title> tag or title exceeds 580px in 20px Arial (truncated in Google SERPs). |
DESCRIPTION_MISSING / DESCRIPTION_MULTIPLE |
Warning | Page lacks a <meta name="description"> tag or includes multiple conflicting description tags. |
H1_MISSING / H1_MULTIPLE / H1_TOO_LONG |
Warning | Page has no visible <h1>, multiple <h1> tags, or an <h1> over 70 characters. |
HEADING_ORDER_SKIPPED |
Info / Warning | Document outline jumps heading levels (for example, <h1> directly to <h3> without an <h2>). |
LOW_TEXT_HTML_RATIO / LOW_READABILITY |
Info / Warning | Visible text is under 10% of raw HTML byte size, or Flesch Reading Ease is below 50 on a content page. |
IMAGE_ALT_MISSING |
Warning | One or more <img> tags lack an alt attribute. |
EXACT_DUPLICATE_CONTENT / NEAR_DUPLICATE_CONTENT |
Warning | Two or more indexable URLs share identical primary content (SHA-256) or near-identical content (SimHash Hamming distance ≤ 3). Consolidate with a 301 redirect or canonical tag. |
LLMS_TXT_NOT_FOUND / LLMS_TXT_INVALID_FORMAT |
Warning | Root /llms.txt returns 404 or lacks a valid Markdown H1 title and link sections. |