SEO and GEO
Default EDS is lean. Crawlers need more.
EDS publishes semantic content HTML. Everything else is added by scripts.js and blocks in the browser, so the raw HTML a crawler receives is bare.
Why it matters
Two audiences, one gap.
SEO
Googlebot can render JavaScript, but rendering is queued and budgeted, and other engines render less. Anything that only exists after JS runs is indexed later, or only partly.
GEO
AI assistants retrieve and quote passages from pages. Many of their crawlers do not execute JavaScript. Content missing from raw HTML cannot be retrieved, cited or summarised.
The matrix
Gap by gap, what loom does.
Gap in default EDS | Why it matters for SEO | Why it matters for GEO | loom support | Status |
|---|---|---|---|---|
Navigation and footer are fetched client-side, so raw header and footer are empty | Internal links and site structure are not seen on first crawl, which weakens crawl paths and link signals | The model gets no site context: sections, contact, legal, brand links | Nav and footer are rendered into the first response | Delivered |
Blocks (accordions, tabs, product blocks) arrive as authored divs and are decorated in the browser | Visible content may be indexed late or incompletely | Passages inside a block may never reach the retrieval index | A block’s own | Delivered, per block |
Fragments are loaded client-side | Shared content is missing from the indexed page | Shared answers and facts are absent from the page the model reads | Inline fragments are resolved at the edge | Delivered |
No structured data unless a site adds it with JS | Rich-result eligibility (FAQ, Product) depends on it | Explicit entities and question/answer pairs are the least ambiguous input for answer engines | One clean JSON-LD | Delivered |
| Wrong or missing language signals hurt language targeting and hreflang correctness | Language and locale detection when retrieving and answering | Correct | Delivered |
Canonical is generated by EDS, but nothing checks it | Wrong canonicals cause duplicate-content and consolidation problems | Duplicate URLs split the citations a page could earn | A canonical check that warns and never rewrites | Delivered (check only) |
No semantic elements from the pipeline (section, article, nav, table, details, figure) | Clearer structure helps parsers separate main content from boilerplate | Passage chunking is cleaner when sections, tables and Q&A are semantic elements | A block that emits these elements gets them in the raw HTML. loom does not add landmarks by itself | Possible per block or via a page hook, not shipped as a default |
Per-page head enrichment (hreflang, more structured-data types, noindex rules) | Correct alternates and indexing control | Consistent signals across language variants | The page-hook mechanism can do this, but no hook is provided out of the box | Possible via site hook, not shipped |
Side by side
Raw EDS versus loom-powered.
The same content, as the first HTTP response a crawler receives. Raw EDS is the *.aem.live origin. loom-powered is this site on loom.wefixyourproject.com.
Dimension | Raw EDS ( | loom-powered | SEO and GEO impact |
|---|---|---|---|
Document language ( | Missing: | Set at the edge: | Language targeting for search engines, screen readers and AI locale classification |
Header and navigation | Empty | Rendered at the edge: How it works, SEO and GEO, Edge vs publish, Proof, FAQ | Crawlability: crawlers that do not run JavaScript cannot discover internal links such as |
Footer and site architecture | Empty | Rendered at the edge with link groups and the entity attribution (Valtech) | Sitewide link distribution, and clearer entity ownership for language models |
Structured data (JSON-LD) | Not in the server response. Only present if a script adds it after load | Generated at the edge from the visible content into one clean | Rich-result eligibility, and deterministic machine-readable facts without JavaScript rendering |
Interactive blocks (accordion, tabs) | Nested | Blocks with an | Semantic elements help models tell prose from UI and read question and answer pairs. Blocks without an edge hook stay as authored |
Time to first byte | About 0.09 s on a cache miss. Instant on a CDN hit | About 0.28 to 0.38 s on a cache miss. Same as plain EDS on a CDN hit | A small latency cost on uncached HTML. No change for cached pages or static assets |
Honest limits
What loom does not fix.
Content that does not exist
loom makes existing content visible. It does not improve it, and it cannot add what was never authored.
Weak headings or copy
Structure and wording still decide how a page is read, indexed and quoted.
Blocks that import aem.js
They cannot run at the edge. loom leaves them as authored.
Honest status: the SEO and GEO effect described here is the expected mechanism. We have no before and after numbers yet.
Be the answer, not just a page.
Content unchanged. Authors unchanged. Crawlers and AI assistants finally read all of it.