Skip to main content
Drupal is a registered trademark of Dries Buytaert
Release: Trash 3.0.33 Minor update available for module trash (3.0.33). EOL Warning: Drupal 11.0 has reached end of life and no longer receives security updates. Usage Milestone: Focal Point Module focal_point crossed 1,000 active installs. Release: UI Patterns (SDC in Drupal UI) 2.0.20 Minor update available for module ui_patterns (2.0.20). Release: Trash 3.1.0-rc1 First release candidate for module trash (3.1.0-rc1). Release: Country 2.2.0 Minor update available for module country (2.2.0). Release: Splidebox 2.0.13 Minor update available for module splidebox (2.0.13). Usage Milestone: Ultimate Cron Module ultimate_cron crossed 1,000 active installs. Usage Milestone: Easy Breadcrumb Module easy_breadcrumb crossed 1,000 active installs. Usage Milestone: Config Filter Module config_filter crossed 1,000 active installs.

GEO Starter JSON-LD

3 sites Security covered Drupal 11 · not 10
View on drupal.org

This module generates schema.org structured data for published content pages, emitting only facts that are actually displayed on the page. It is specifically designed to work with the GEO Starter recipe's content model and supports Service, Evidence Source, and FAQ pages. The generated data is intended to make content more discoverable and understandable by machines, with a strong emphasis on accuracy and only emitting data when it can be reliably represented.

A governed content model only helps machines if they can read it. GEO Starter JSON-LD builds that reading surface: one schema.org graph per page, emitted only on the full canonical view of a published node, and only for what the page actually renders.

The structured data never claims more than the visible page shows: if a fact is not rendered, it is not emitted. Invalid or inflated structured data is worse than none, so when in doubt the module emits nothing.

This is the companion module for the GEO Starter recipe. It reads GEO Starter's content model. It is not a general-purpose JSON-LD tool.

What It Emits

  • Service pages emit a Service object plus the page's WebPage, carrying the service summary, primary action, topic, audience, review date, and cited sources.
  • Answer pages emit a Question with its accepted answer: the page's title is the question, and the direct-answer field is the answer, with cited sources.
  • Article pages emit an Article with headline, summary, author, dates, and cited sources; review information is carried on the page's WebPage metadata.
  • Evidence Source pages emit a CreativeWork with the external source link and publisher. This is what makes a citation on another page resolve to a real, inspectable source.
  • FAQ sections emit a FAQPage, but only when the section has at least two visible, non-empty question-and-answer pairs. Thin or empty FAQs emit nothing.
  • Step-list sections emit a HowTo only when at least two complete steps are visibly rendered. No HowTo rich-result eligibility is claimed.
  • Card-grid sections emit linked ItemList entries only when the visible formatter shows linked labels.
  • Contact panels can add a provider ContactPoint, PostalAddress, and structured hoursAvailable values to Service output.
  • Citations between pages resolve by stable @id. If a cited source is unpublished, its citation is dropped, not left dangling.

Emission Rules

Structured data is only as good as its honesty, so the module enforces these rules:

  • It emits only on a published node's own full page. Teasers, search results, and editor previews emit nothing.
  • It emits only fields the page actually renders and the requester can view. Nested Paragraph output follows the configured rendered-entity view mode; reference-derived labels and URLs fail closed when the visible formatter does not render those values.
  • It strips markup, encodes safely, and emits nothing at all on any error.
  • It carries full cache metadata, including every cited source, so the structured data refreshes when the node or a source it cites changes.

Relationship To GEO Starter

  • It is required by the GEO Starter recipe and installed automatically with it.
  • It reads GEO Starter's fields and Paragraph types. On a site without that content model, it has nothing to emit.
  • It ships as its own Composer package because a Drupal recipe cannot carry a module on disk. The recipe requires it; you do not install it separately.

Scope And Honest Limits

  • Implemented and fresh-install validated: Service, Answer, Article, Evidence Source, gated FAQPage, HowTo, and ItemList, plus provider contact, address, and opening-hours data.
  • Unit, Kernel, Functional, and FunctionalJavascript coverage ships with the module. tools/jsonld-probe.php provides a separate installed-site fidelity check; tools/schema-domain-check.py checks schema.org property placement.
  • The project repository records historical schema.org and Rich Results checks. Those checks do not prove current rich-result eligibility; each release is gated separately by its exact-tag CI and released-artifact checks.
  • The optional geo_starter_jsonld_llms submodule publishes an anonymous, language-specific /llms.txt index. llms.txt is a community proposal, not a search standard; this module does not treat it as a ranking or citation mechanism.
  • No guaranteed AI citations, rankings, rich results, or answer-engine placement. The module makes content inspectable. It does not promise outcomes.

Requirements

  • The GEO Starter recipe, or a site that uses its content model.
  • Drupal 11 and Paragraphs. No dependency patches.
  • The supported recipe installation path uses Drupal CMS.

Documentation And Support

  • README.md for design and settings.
  • Use the Drupal.org issue queue for support.

Depends on

Dependencies of the latest stable release

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
9
Tracked since
May 2026
Latest release
1 month ago
Releases (12 mo)
9 ▲ from 0
Maintenance
Active

Release Timeline

Releases

Version Type Core Release date
1.2.0 Stable 11 Jul 21, 2026
1.1.1 Stable 11 Jul 19, 2026
1.1.0 Stable 11 Jun 11, 2026
1.0.0 Stable 11 Jun 8, 2026
1.0.0-rc1 Pre-release 11 Jun 8, 2026
1.0.0-beta1 Pre-release 11 Jun 7, 2026
1.0.0-alpha3 Pre-release 11 Jun 2, 2026
1.0.0-alpha2 Pre-release 11 Jun 2, 2026
1.0.0-alpha1 Pre-release 11 May 31, 2026