06 SEO metadata · Multi-language SDK

easeo

A deterministic SEO metadata generator: one Rust core with Python, Node.js, and Rust APIs.

Takes an entity, route, and site config, and returns canonical URL, title, description, robots, Open Graph, Twitter Cards, and JSON-LD.

Rust corePythonNode.jsJSON-LDMIT

Tests

310

Entity types

11

Integrations

10

Docs pages

64

01

Problem

SEO libraries tend to mix metadata generation with scoring, keyword analysis, and content rewriting. The output varies run to run, which makes it hard to snapshot-test, hash, cache, or diff. Platforms that render in more than one language end up with subtly different payloads per stack.

02

Key decisions

One core, three bindings

All logic lives in easeo-core. Python and Node.js wrap the same engine, and the cross-language conformance suite asserts byte-for-byte identical output.

Pure determinism

No timestamps, randomness, environment reads, or hidden I/O. The same inputs always produce the same payload, so output can be hashed and committed.

SEO contracts for CI

build_seo_contract emits machine-readable SEO intent that can be committed and validated as code, catching metadata regressions in review.

Scoped extension registries

HookRegistry and SchemaRegistry add post-processing and custom JSON-LD without touching the core, scoped to a config rather than global.

03

Tradeoffs

  • Not a framework: adapters marshal inputs, they do not own application lifecycle
  • Not a scoring, keyword-analysis, crawling, or content-rewriting tool
  • Renders a head snippet, not a full document; alpha release status