Repository navigation
Improve SEO and AI/LLM discoverability - #802
Merged
Merged
Conversation
- Per-page canonical URLs, meta descriptions, robots, Open Graph and Twitter tags via a shared seoHead partial (no more homepage-only social metadata or duplicate og:title tags) - JSON-LD structured data: Organization, WebSite, WebPage/FAQPage, SoftwareSourceCode and BreadcrumbList - Generated /sitemap.xml (pages + compiled demos, git-based lastmod) and Sitemap entry in robots.txt - Generated /llms.txt (llmstxt.org) and /llms-full.txt replace the stale hand-written llms.txt - Unique titles/descriptions for content pages; noindex for empty pages - Alt text for images and a visually hidden h1 fallback on every page - Restore the social share image missing since the Eleventy migration Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
🟡 Changes recommended
The export strips image tags before extracting link labels, causing image-only partner links and logo alt text to disappear from /llms-full.txt.
1 open issue
What changed in this PR
Improves search-engine and AI discoverability for the Babylon.js website through shared SEO metadata and generated crawler resources.
Changes:
- Centralizes per-page metadata, canonical URLs, social tags, and structured data.
- Generates a sitemap and LLM-friendly summaries from site content and the demo manifest.
- Updates page descriptions and adds fallback headings and image alt attributes.
| File | Description |
|---|---|
static/robots.txt |
Advertises the sitemap and permits crawling. |
static/llms.txt |
Removes the outdated handwritten summary. |
src/sitemap.njk |
Lists indexable pages and compiled demos. |
src/llms.njk |
Generates the LLM-friendly resource index. |
src/content/viewer/config.json |
Adds viewer metadata. |
src/content/tools/config.json |
Replaces the placeholder title. |
src/content/testimonials/config.json |
Adds a testimonials description. |
src/content/specifications/config.json |
Adds an engine specifications description. |
src/content/reactnative/config.json |
Adds React Native metadata. |
src/content/pressRelease/config.json |
Updates Havok announcement metadata. |
src/content/partners/config.json |
Adds a partners description. |
src/content/native/config.json |
Adds Babylon Native metadata. |
src/content/metaverse/config.json |
Adds a metaverse description. |
src/content/learn/config.json |
Replaces placeholder learning-page metadata. |
src/content/industries/config.json |
Replaces the placeholder title. |
src/content/games/config.json |
Adds game-engine metadata. |
src/content/featureDemos/config.json |
Adds a feature demos description. |
src/content/ecommerce/config.json |
Adds e-commerce metadata. |
src/content/digitalTwinIot/config.json |
Adds digital twin and IoT metadata. |
src/content/creation/config.json |
Adds creation and authoring metadata. |
src/content/config.json |
Updates homepage metadata. |
src/content/community/config.json |
Adds a community demos description. |
src/assets/styles/styles.css |
Styles visually hidden fallback headings. |
src/_includes/seoHead.njk |
Renders shared metadata and structured data. |
src/_includes/litePartners.njk |
Adopts the shared SEO partial. |
src/_includes/blocks/viewerCarouselBlock.njk |
Adds carousel image alt attributes. |
src/_includes/blocks/topBlock.njk |
Labels the logo and marks decorative images. |
src/_includes/blocks/miniTopBlock.njk |
Adds logo alt text. |
src/_includes/blocks/linkListBlock.njk |
Marks link decorations with empty alt text. |
src/_includes/blocks/imagesBlock.njk |
Marks decorative frames with empty alt text. |
src/_includes/blocks/galleryBlock.njk |
Marks gallery frames with empty alt text. |
src/_includes/blocks/downTriangle.njk |
Marks the decorative background image. |
src/_includes/base.njk |
Integrates SEO metadata, fallback headings, and image labels. |
src/_data/seo.js |
Defines shared SEO defaults. |
src/_data/pages.js |
Derives page metadata, indexing rules, and structured data. |
src/_data/demos.js |
Exposes compiled demos for the sitemap. |
scripts/seo/llmsFull.js |
Converts rendered pages into the full-text export. |
eleventy.config.js |
Registers escaping filters and the export hook. |
Review effort: Balanced
- Keep image alt text so image-only links (partner logos) are exported - Strip comments and script-like blocks until stable - Skip data: and vbscript: links alongside javascript: - Compare the sameAs filter on hostname instead of a URL substring Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Makes www.babylonjs.com easier for search engines and AI/LLM crawlers to discover and understand.
Changes
seoHead.njkpartial (used by both layouts) renders the title, unique meta description, canonical URL, robots, Open Graph and Twitter tags for each page. Previously every page shared the homepage's social metadata, and per-pagemetaTagsproduced duplicateog:titletags and tags with empty attributes./sitemap.xml, which previously returned 404: generated from the indexable pages plus all 86 compiled demos, withlastmodtaken from git history.robots.txtnow references it./llms.txtand/llms-full.txt: generated in the llmstxt.org format. They replace the stale hand-writtenllms.txt, which still described the old Gulp/Handlebars build. They include guidance to prefer the@babylonjs/*ES module packages over UMD./tools/and/industries/pages are nownoindexand excluded from the sitemap.<h1>(a visually hidden fallback where the page has none); previously only 2 of 20 did.altattribute; the homepage previously had 33 without one.humans.txtlink is now absolute.assets/logo-babylonjs-social-twitter.png, the social share image that was missing from the source after the Eleventy migration.Validation
npm run buildpasses.og:title, a description, valid JSON-LD, and no images withoutalt.sitemap.xmlpassesxmllintand contains 104 URLs.Follow-ups needed outside this repo
Azure Front Door: 301Done:babylonjs.com→www.babylonjs.comApexToWwwrule set on thewebsiteroute (profilebabylonjscdn).https://www.babylonjs.com/sitemap.xmlin both so the new sitemap is picked up.UA-41767310-1), which needs a GA4 measurement ID.static/features/page.