Skip to content

seo: add llms.txt, fix llms-full.txt pricing, restore SSR JSON-LD#16

Open
san-npm wants to merge 1 commit into
mainfrom
seo/llms-and-schema
Open

seo: add llms.txt, fix llms-full.txt pricing, restore SSR JSON-LD#16
san-npm wants to merge 1 commit into
mainfrom
seo/llms-and-schema

Conversation

@san-npm
Copy link
Copy Markdown
Member

@san-npm san-npm commented May 19, 2026

Summary

Three small, surgical SEO/GEO/AEO fixes uncovered by a full audit of aleph.cloud against the 2026-05-19 Google Search Console (532 queries) and Bing Webmaster (82 queries) exports.

1. public/llms.txt (new)

The file currently 404s and falls back to the home HTML, polluting every AI tool that fetches it. Adds a short index file with:

  • One-line product description
  • Entity disambiguation block (Aleph Cloud vs Aleph Alpha / Aleph Zero / TwentySix Cloud / aleph.im) — addresses ~1500 wasted impressions/year on those queries in GSC
  • Pointers to llms-full.txt + primary pages

2. public/llms-full.txt (pricing fix + disambiguation)

Two occurrences of stale $2.21/month VPS pricing replaced with the current credit-based rate $0.0143/hour (~$10.44/month) — matching the Builder.io page metadata. Also adds a top-level entity disambiguation block so LLMs grounding on this file don't conflate brands.

3. src/pages/_pageMetadataHead.tsx (global SSR JSON-LD)

Adds Organization + WebSite JSON-LD to every page server-side. Previously schema only existed via Builder.io Custom Code blocks, which render client-side only — Bing in particular underweights JS-rendered schema. The existing per-page schemaMarkup mechanism (sourced from Builder.io data.metadata.schemaMarkup) is preserved and now layers on top of the global baseline.

A small SchemaScript helper centralises the dangerouslySetInnerHTML call site.

Why it matters

Audit highlights tied to these changes:

  • aleph.im official website/blog/discord/... cluster: 245+94+86+62+... impressions, ~0 clicks (entity drift). The disambiguation blocks address LLM-grounded answers; rich Organization/sameAs schema addresses Knowledge Panel + sitelinks.
  • High-volume AEO queries (which aleph cloud storage product gives the best combo of security and price? 66 imp @ pos 1.44; i want an aleph-powered dapp to host my files, which provider is most reliable? 57 imp @ pos 2.32) — these rely on llms.txt + per-page FAQPage schema being correct.
  • Bing Webmaster guidelines (Oct 2025 refresh) explicitly call out canonical/schema/IndexNow as load-bearing for AI Search visibility.

Out of scope (audit follow-ups, not in this PR)

  • Trigger a release to publish the 9 Builder.io pages already created in April 2026 but never deployed: /confidential-computing/, /decentralized-storage/, /decentralized-hosting/, /blockchain-indexing/, /cloud-comparison/, /aleph-vs-aws/, /aleph-vs-azure/, /aleph-vs-google-cloud/, /aleph-vs-scaleway/. All return 404→home today. getStaticPaths in [[...page]].tsx already fetches them — they just need a fresh build.
  • Per-page data.metadata.schemaMarkup (FAQPage) populated in Builder.io for home, /vps/, /web-hosting/, /computing/, /confidential-computing/.
  • Commit a brand-approved square logo (PNG/JPG, ≥112x112) to public/aleph/logo.png and re-add logo to ORGANIZATION_SCHEMA.
  • data-nosnippet on footer / legal copy (per Bing's Oct 2025 guidance).
  • IndexNow webhook in the release workflow to push new URLs to Bing/Yandex/Naver instantly on deploy.
  • A /aleph-im-is-now-aleph-cloud/ rebrand explainer page in Builder.io.

Full audit: ~/Desktop/aleph-cloud-seo-geo-aeo-audit-2026-05-19.md.

Test plan

  • CI Build Check workflow passes
  • Spot-check IPFS preview build: view-source: on a few pages shows two new <script type="application/ld+json"> blocks before any per-page schema
  • Paste rendered HTML into Google's Rich Results Test — no errors on Organization/WebSite
  • curl https://aleph.cloud/llms.txt returns text/plain (after merge + release)
  • curl https://aleph.cloud/llms-full.txt | grep '\$0.0143' returns the new pricing line (after merge + release)

⚠️ Do NOT merge without review — the audit recommends triggering a release immediately after merge to publish the 9 dormant Builder.io pages in the same deploy.

llms.txt (new): short index file for LLM crawlers and AI search engines,
with entity disambiguation (Aleph Cloud vs Aleph Alpha vs Aleph Zero) and
pointers to llms-full.txt + key pages. Previously /llms.txt 404'd and fell
back to the home page, polluting AI responses.

llms-full.txt: replace stale "$2.21/month" VPS pricing with the current
credit-based rate ($0.0143/hour, ~$10.44/month for the entry tier) in both
the Core Services and Pricing Advantages sections. Add an Entity
disambiguation section so LLMs grounding on this file don't conflate
Aleph Cloud with Aleph Alpha (German LLM company) or Aleph Zero (L1 chain).

_pageMetadataHead.tsx: render Organization + WebSite JSON-LD on every page
server-side. Previously schema.org markup only existed via Builder.io
Custom Code blocks, which render client-side only — Bing in particular
underweights JS-rendered schema. The existing per-page schemaMarkup
mechanism (sourced from Builder.io page metadata) is preserved and now
layers on top of the global baseline. A small SchemaScript helper
centralizes the dangerouslySetInnerHTML call site.

Validated against the 532-query GSC export and 82-query Bing Webmaster
export from 2026-05-19, which surface heavy entity-confusion impressions
(aleph.im, aleph alpha, aleph zero) and AEO-style questions where
Organization + WebSite + Sitelinks-search schema are load-bearing.
Copy link
Copy Markdown

@foxpatch-aleph foxpatch-aleph left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three focused SEO/GEO/AEO fixes: new llms.txt file for AI crawlers, corrected pricing in llms-full.txt ($2.21/month → $0.0143/hour), and server-side Organization+WebSite JSON-LD via a SchemaScript helper. The JSON-LD layering is correct — multiple valid script blocks, per-page schema preserved on top. No security concerns (dangerouslySetInnerHTML used safely with trusted/JSON-stringified data). Code quality is good with clean abstractions. Pricing corrections are consistent across both occurrences.

@san-npm
Copy link
Copy Markdown
Member Author

san-npm commented May 19, 2026

Follow-up after opening this PR — I went ahead and did one of the items I'd listed as "out of scope" because it pairs directly with the SSR change here:

Migrated FAQPage JSON-LD from Custom Code → data.metadata.schemaMarkup (Builder.io)

Each of the three pages below already had a FAQPage JSON-LD embedded inside a Custom Code block. In this static-export setup those Custom Code scripts only render client-side, so crawlers never saw the schema. I lifted the same JSON-LD into the page's metadata.schemaMarkup field — which the existing getMetaField(["schemaMarkup"]) path in _pageMetadataHead.tsx already supports, and which this PR's new SchemaScript helper renders SSR.

Page Builder.io ID Q&A Result
/vps/ 66caf52dbb734b76a16cfe2a90ca14ba 6 ✅ verified
/web-hosting/ 96a7f32ca8fd406d9c1a7920cbcf3316 6 ✅ verified
/confidential-computing/ 7c41dcf5ea5c4108abe5e9c0aa3b1dd0 5 ✅ verified

PATCH used the full-data pattern ({name, data, published} with the full blocks array included) so no blocks were dropped. After PATCH, each page was re-fetched and data.metadata.schemaMarkup["@type"] === "FAQPage" confirmed.

Why no home FAQPage

The home page has no visible FAQ block (only two question-shaped H2s, neither part of an accordion). Per Google's policy, FAQPage schema on a page without visible Q&A risks a manual action — so I deliberately skipped it. If/when a real FAQ accordion is added to home, the same migration pattern applies.

Visible content untouched

The visible FAQ HTML/CSS in each page's Custom Code block was not modified — only the duplicate <script type="application/ld+json"> is now redundant once this PR ships. Cleaning it up is a follow-up; leaving it is harmless (two identical FAQPage scripts on one page = Google picks one).

Net behavior after this PR + a release deploy

  • Global Organization + WebSite JSON-LD: every page, SSR
  • Per-page FAQPage JSON-LD: /vps/, /web-hosting/, /confidential-computing/, SSR
  • /llms.txt: resolves with text/plain instead of falling back to home HTML
  • /llms-full.txt: pricing matches reality
  • Bonus: the 9 Builder.io pages built in April but never released (/confidential-computing/, /decentralized-storage/, /decentralized-hosting/, /blockchain-indexing/, /cloud-comparison/, /aleph-vs-aws|azure|google-cloud|scaleway/) publish in the same deploy because getStaticPaths in [[...page]].tsx will pick them up

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants