Current State

  • Authors.svelte: every author <li> is itemtype="https://schema.org/Organization"; the Author type even has an org flag that is not used to switch between Person and Organization
  • In listings the itemprop="author" items sit inside <ul> with no enclosing Article scope
  • CallToAction.svelte: itemtype="https://schema.org/Offer" with a hidden seller Organization whose URL is https://sveleton.com/ — a domain the project does not own
  • Meta.svelte emits twitter:site as @Sveleton (derived from PROJECT_NAME) and a keywords meta tag no search engine reads

Tasks

  • Use Person unless author.org is true
  • Only emit itemprop="author" inside an Article scope
  • Drop the Offer markup from the CTA (or make it opt-in with real seller data)
  • Make twitter:site a separate optional PROJECT_TWITTER constant; remove keywords
  • Validate a feature page with the Schema Markup Validator

Structured data that is true

Person is a person, an offer is an offer

A static site template built with SvelteKit.

Sveleton, 2025