SEO and discovery Apply Core's search, metadata, structured-data, and discovery contracts. v0.2.5 core current site-builderscore-developersintegratorsai-agents
v0.2.5 core current Public

SEO and discovery

Apply Core's search, metadata, structured-data, and discovery contracts.

Owner
Foundry Core
Source
core/docs/SEO.md
Ref
v0.1.21
Policy
release-bound
Component pins for v0.2.5
ComponentRoleVersion
coreruntimev0.1.21
theme-shieldthemev0.1.15
starterreferencev0.1.3
docsreferencev0.1.4
distributiontoolingv0.3.3
restricted-component-1consumer-referencev0.1.10
restricted-component-2consumer-referencev1.1.21

Foundry now emits shared SEO from partial "foundry/seo/render.html" ..

Downstream themes should call that partial from baseof.html, not from a site overrideable head-end.html file. This keeps canonical tags, alternates, metadata, and schema from drifting between core, theme, and project repos.

What core renders

  • Canonical URL
  • Meta description
  • Robots and googlebot tags when robots, noindex, or private are set
  • Open Graph and Twitter metadata
  • hreflang alternate links for multilingual pages
  • JSON-LD for:
    • WebSite
    • WebPage or CollectionPage
    • MedicalWebPage for medical treatment/article pages when the site declares a medical local business
    • BreadcrumbList
    • BlogPosting
    • Service
    • Person
    • FAQPage
    • optional Organization / LocalBusiness

Theme responsibility

Theme head-end.html files should only add theme or brand assets such as:

  • dark-mode anti-flash scripts
  • theme CSS bundles
  • favicons
  • theme color
  • project-specific preconnects

Shared SEO should not be reimplemented there.

Site config fields

Supported site params:

params:
  description: "Site-wide fallback description"
  og_image: "/images/og-default.jpg"
  social:
    instagram: "https://instagram.com/example"
    facebook: "https://facebook.com/example"
  contact:
    phone: "(555) 555-5555"
    email: "info@example.com"
    hours: "By appointment only"
  seo:
    author: "Site Author"
    reviewed_by_default: "author-key"
    twitter_handle: "@example"
    og_image_default: "/images/og-default.jpg"
    organization:
      name: "Example Company"
      logo: "/images/logo.png"
      same_as:
        - "https://linkedin.com/company/example"
    local_business:
      types:
        - "LocalBusiness"
      name: "Example Company"
      price_range: "$$"
      address:
        street_address: "123 Main St"
        city: "Anywhere"
        region: "CA"
        postal_code: "90210"
        country: "US"

Supported page params:

canonical: "https://example.com/custom-url/"
robots: "noindex,nofollow"
noindex: true
author: "author-key"
author_name: "Author Name"
author_role: "Medical Reviewer"
reviewed_by: "reviewer-key"
reviewed_at: 2026-03-04
seo:
  person:
    key: "author-key"
  service:
    type: "Service"
    service_type: "Primary service label"

Robots

Set enableRobotsTXT: true in each downstream site config. Shield and restricted proof consumer theme repos expose layouts/robots.txt wrappers that call the shared Foundry robots partial.

Projects with their own custom base layout and no theme layouts/robots.txt wrapper should add a local layouts/robots.txt file that calls:

{{ partial "foundry/seo/robots.txt" . }}

Static Pagefind search

Search Foundry documentation

Type at least two characters
Search the full documentation system

Results stay inside this build profile and can be filtered by version, component, audience, and lifecycle.