• SiteConfig.presentation is a new optional versioned section; version 1 accepts only the ads provider adsense with publisherId and three named slot placements (homeAfterFeed, archiveInline, articleEnd), or the equivalent provider none.
  • When AdSense is disabled, rendered pages contain no advertising DOM or scripts; when enabled, each page with a configured slot emits the fixed Google provider script once, and /ads.txt is generated from the validated publisher record.
  • Every composed site now provides a language-scoped source directory route in addition to the existing reader-facing routes.
  • The shared document layout now emits schema.org types, canonical and language-alternate links, and Open Graph/Twitter image metadata with Publume logo fallback; search pages are noindex,follow and excluded from sitemaps.
  • Typography tokens are now language-aware: interface text is 14/22px, reading text is 17/28px for Latin and 17/30px for CJK, and Editorial display uses separate fluid ranges for Latin and CJK; a declared content language is required.
  • Core now verifies that the presentation config passes through to the generated site config and that advertising placements (homeAfterFeed, archiveInline, articleEnd) and the /ads.txt publisher record appear in built output.

Publishers who do not configure AdSense get no advertising DOM or scripts in rendered pages. With AdSense enabled, pages that define a slot load the Google provider script once and the site gets /ads.txt from the validated publisher record. Search pages now carry noindex,follow and are excluded from sitemaps. Because typography tokens depend on language, sites must declare a content language.