Skip to content
Guides
On this page
  1. What the graph contains
  2. Type per layout
  3. Configuration
  4. Per-page entities
  5. Checking
Page actions

Structured data

When url: is set in _config.yml, every page gets one <script type="application/ld+json"> block holding a schema.org @graph. Search engines and AI tools read it to learn what the page is. Without url: nothing is printed, because schema.org URLs must be absolute.

What the graph contains

Node @id Contents
WebSite <url>/#website site name, URL, language, publisher; a SearchAction when schema.search_url is set
Organization or Person <url>/#publisher schema.publisher (name, URL, logo, same_as)
page type (WebPage and subtypes) <page>#webpage name, URL, description, inLanguage, image, breadcrumb
main entity <page>#main the article, job, event or other thing the page is about
BreadcrumbList <page>#breadcrumb the same trail as the visible breadcrumb

Dates are ISO 8601 with the site time zone; text is escaped so the block is safe under a strict CSP.

Type per layout

Layout Type
post BlogPosting (NewsArticle with layout: news-article or kind: news)
doc TechArticle
archive, blog, news CollectionPage
author, profile, resume ProfilePage
contact ContactPage
search SearchResultsPage
faq FAQPage
others WebPage

Authors come from author/authors in front matter, looked up in _data/authors.yml.

Configuration

modootoday:
  schema:
    publisher:
      type: Organization        # or Person
      name: Example Inc.
      url: https://example.com/
      logo: /assets/logo.png
      same_as: [https://github.com/example]
    search_url: /search/?q={search_term_string}   # optional SearchAction
    layouts:
      landing: SoftwareApplication               # override the type for a layout

Turn it off with modootoday.schema: false (or schema: {enabled: false}), or for one page with schema: false in front matter. seo: false also removes it.

With seo: false and jekyll-seo-tag, the plugin writes its own JSON-LD between the <!-- Begin Jekyll SEO tag and <!-- End Jekyll SEO tag --> comments. modootoday-check checks that block only for valid JSON and reports a warning, not errors: the kit does not write it, and its WebPage has headline but no name. schema.org marks no property as required, and Google lists no required properties for WebPage; the required-property list is the kit’s own rule for the markup it writes. To have the page checked in full, move to the kit’s tags (Migrate).

Per-page entities

Set schema.type and any schema.org properties in front matter; type: keys become @type. The theme fills name, description, url and image from the page.

schema:
  type: JobPosting
  datePosted: 2026-10-01
  hiringOrganization: {type: Organization, name: Example Inc.}
  jobLocation: {type: Place, address: {type: PostalAddress, addressCountry: KR}}

Other supported types include SoftwareApplication with offers: {type: Offer, price: 0, priceCurrency: USD}, Event, Course, PodcastEpisode, DefinedTermSet, ItemList and FAQPage (mainEntity: list of Question). Top-level URLs starting with / are made absolute; URLs inside nested values must already be absolute.

Checking

modootoday-check validates every block in the built site offline: one block per page, valid JSON, known schema.org types and properties, required properties (Google’s list), unique @ids, absolute URLs, ISO 8601 dates, and agreement with og:url, og:title, og:image and <html lang>. Add --schema-recommended to also list missing recommended properties.

Edit this page