TL;DR
To be cited correctly by AI and search engines, a GEO content site must pass five structural checks: JSON-LD structured data, hreflang language declarations, sitemap.xml, the llms.txt text index and robots.txt crawler access. This article gives the curl+grep command, pass criteria and real results from knowflowhub.com for each.
When to Use
The goal of GEO (Generative Engine Optimization) is to get content cited by AI retrieval tools. Machine-readable structure determines whether AI can find content, identify language versions and parse article metadata. This checklist applies to pre-launch checks of new sites, regression checks after redesigns, and troubleshooting when 'AI cannot find my article'. All steps use curl and grep, with no tools to install.
Steps
Step 1: JSON-LD structured data
Command:
curl -s https://your-domain/ | grep -o 'application/ld+json' | wc -lPass criteria: the count is >= 1 and a <script type="application/ld+json"> block exists; validate the block with python3 -c "import json; json.load(open('/tmp/ld.json'))". Result on knowflowhub.com: 1 JSON-LD block on the homepage.
Step 2: hreflang declarations
Command:
curl -s https://your-domain/ | grep -o 'hreflang="[^"]*"' | sort -uPass criteria: every published language has an hreflang value, plus x-default. Result on knowflowhub.com: zh-CN, en-US, ja-JP, x-default.
Step 3: sitemap.xml inventory
Command:
curl -s https://your-domain/sitemap.xml | grep -oE '/content/[a-z]+/[0-9-]+/[a-z0-9-]+' | sort -u | wc -lPass criteria: the URL count matches published articles; de-duplicate multilingual URLs by slug. Result on knowflowhub.com: the sitemap is 195 KB of XML, 82 items after slug de-duplication.
Step 4: llms.txt index
Command:
curl -s https://your-domain/llms.txt | head -30Pass criteria: file exists (HTTP 200), starts with a site description, and lists Markdown links to the .md version of each article with a one-line summary. Result on knowflowhub.com: llms.txt returns the site intro and the content index.
Step 5: robots.txt access
Command:
curl -s https://your-domain/robots.txtPass criteria: AI crawlers (GPTBot, ChatGPT-User, OAI-SearchBot, Googlebot, Google-Extended, Bingbot, PerplexityBot, etc.) all get Allow: / and are not blocked by Disallow. Result on knowflowhub.com: GPTBot, ChatGPT-User, OAI-SearchBot, Googlebot and Google-Extended are all allowed.
Notes
- JSON-LD and hreflang must be in the raw HTML, not rendered only by JavaScript, or crawlers cannot read them; always check the HTML fetched by curl.
- Do not double-count multilingual URLs of the same slug in the sitemap; if content is organized by date directory, each article must be indexed under all three language routes.
- llms.txt is a community proposal (llmstxt.org), not a search-engine requirement, but it is already adopted by several AI retrieval tools; refresh it whenever content changes.
- Passing the structural checks does not guarantee indexing; discovery depends on crawl timing and external references. A valid structure is a prerequisite, not a sufficient condition.
Sources
- schema.org: Getting Started with JSON-LD
- Google Search Central: Introduction to structured data
- llms.txt proposal: llmstxt.org
