Skip to main content

🔍 XEOLint

A fast, deterministic GEO and SEO linter & autofixer for Next.js

Philosophy • Installation • Usage • Rules


What is XEOLint?

XEOLint is an ESLint-like tool built specifically for Generative Engine Optimization (GEO) and SEO.

As search evolves toward LLM-driven engines (like ChatGPT Search, Perplexity, and AI Overviews), structural clarity and machine-readability are more important than ever. XEOLint statically analyzes your Next.js project (supporting both the app/ and pages/ routers) to ensure your content is perfectly structured for both traditional crawlers and modern AI agents.

⚡ The V1 Philosophy

  • "ESLint for Discoverability": Useful, deterministic, and narrowly focused.
  • Audit-First: Finds the missing metadata, broken hierarchies, and crawlability issues.
  • Safe Autofixing: Modifies your code only when the fix is deterministic and extremely low-risk (e.g., generating missing robots.txt or sitemap.xml).
  • Deep Next.js Support: Natively understands export const metadata, "use client" directives, and <Head> tags.

🚀 Installation

XEOLint is distributed as a Python CLI tool.

pip install xeolint

(Note: XEOLint requires Python 3.9+)


🛠️ Usage

Navigate to the root of your Next.js project and run:

Audit (default — block format)

xeolint audit .

Output:

ERROR  missing_title
  File: src/pages/Terms.tsx
  Message: No <title> found inside <Head> on this page route.
  Fix: Inject a <title> element inside the Next.js <Head> component.

WARNING  missing_canonical
  File: src/pages/Terms.tsx
  Message: No canonical URL defined for this page.
  Fix: Add <link rel='canonical' href='...'> in <Head>.

✅ Passed: missing_robots_txt, missing_sitemap, missing_h1, ...

Summary: 5 errors · 9 warnings · 6 info · 12 passed

Audit (table format)

xeolint audit . --table

Fix

The fix command automatically generates missing files or metadata blocks when it is 100% safe to do so.

xeolint fix .

📐 The 20 Rules

🟢 Safe Auto-Fixes

These rules are automatically fixed when you run xeolint fix.

Rule What it checks
missing_robots_txt robots.txt or app/robots.ts exists
missing_sitemap sitemap.xml or app/sitemap.ts exists

🔴 Errors (audit only)

Rule What it checks
missing_title <title> or metadata.title is defined
missing_h1 Page has an <h1> tag

🟡 Warnings (audit only)

Rule What it checks
missing_meta_description description is defined in metadata
missing_canonical Canonical URL is defined
missing_open_graph openGraph object in metadata
missing_twitter_card twitter object in metadata
page_noindex_risk Accidental noindex directives
client_only_critical_content Heavy text hidden behind "use client"
multiple_h1 More than one <h1> on a page
weak_heading_hierarchy Heading levels are skipped (e.g. h1 → h3)
missing_semantic_landmarks Missing <main>, <nav>, <footer>
missing_alt_text Images missing meaningful alt text
missing_json_ld No JSON-LD structured data found
client_only_content_risk Multi-signal detection of heavy client-side rendering risk

🔵 Info (audit only)

Rule What it checks
unclear_page_purpose H1/hero text is too vague for GEO
weak_entity_clarity Brand/product name missing from key areas
missing_faq_or_structured_qa No FAQ section or FAQ schema
orphan_risk_internal_linking Pages with no internal links pointing to them
generic_anchor_text "Click here" / "Learn more" style links

🤝 Contributing

Local Development

  1. Clone the repository.
  2. Initialize the environment:
    python -m venv .venv
    source .venv/bin/activate
    pip install -e .
    pip install pytest
    
  3. Run the test suite:
    pytest
    

Built to help your code be understood by machines.

Metadata

Release files for xeolint 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xeolint 0.1.0
File Size Uploaded Provenance Actions
xeolint-0.1.0.tar.gz 16.5 kB Without provenance Details for xeolint-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for xeolint 0.1.0
File Interpreter ABI Platform Actions
xeolint-0.1.0-py3-none-any.whl Python 3 none any Details for xeolint-0.1.0-py3-none-any.whl

Total release size: 49.2 kB

Release files / xeolint-0.1.0.tar.gz

Download URL xeolint-0.1.0.tar.gz
Size 16.5 kB
Tags Source
SHA-256 checksum
How to use checksums
f326765cf957e937190cc79661327400effdb1a22fbfa45b30d913e9e7696c9e
BLAKE2b-256 checksum
How to use checksums
1b56d1807b780a67f679c074c4dc46a2cd6d5763df20dd5b36d5e40cedfe7120
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.5

Release files / xeolint-0.1.0-py3-none-any.whl

Download URL xeolint-0.1.0-py3-none-any.whl
Size 32.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ec8e104757f7e89ef62b8d38bafac07f726c004c0083b46359d60ca2b16e5a98
BLAKE2b-256 checksum
How to use checksums
cdde74d2c8054c9071f62f7f1b899267da32ccc1acdee43348830ace009d462c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.5

Security for xeolint 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page