Schema.org types
The ~50-variant schemaType catalogue for posts, the 5 pageType variants for pages, and how each maps to jsonLd.
A Clog post carries a schemaType field that selects which Schema.org variant the post is — BlogPosting, Recipe, HowTo, Event, Product, Review, and ~45 more. Pages carry a smaller pageType enum. The chosen type drives:
- The fields the dashboard wizard shows in the Post details section (for posts).
- The shape of the
structuredDatapayload Clog validates and stores. - The
structuredBlocksprojection Clog derives on read (recipe card / how-to steps / etc. as the 13-block vocabulary). - The
@typeand graph of the assembledjsonLdpayload on every read response.
This page is the lookup table — pick a row when you need to know the exact @type, what fields the wizard surfaces, and what the JSON-LD looks like.
For the authoring-side walkthrough (the type wizard, smart suggestions, switching types), see SEO → Schema.org variants.
Tier overview
The catalogue ships in three tiers — picking a type is a 3-step wizard (or one Skip click for the default BlogPosting).
| Tier | Count | Coverage |
|---|---|---|
| Tier 1 | 10 | The most-used variants — BlogPosting, Article, NewsArticle, HowTo, Recipe, FAQPage, Review, Product, VideoObject, ItemList. |
| Tier 2 | 20 | Specialised article subtypes, the Event family (7 sub-types), Job / Course / LocalBusiness / Podcast / Tech / Software, plus the news-article subtypes (OpinionNewsArticle, etc.) and ClaimReview. |
| Tier 3 | 29 | Long-tail variants — movie / TV / book / music / dataset / scholarly / vehicle / accommodation / travel / discussion-forum / Q&A, plus LocalBusiness subtypes (Restaurant, Hotel, Store, etc.). |
Tier 1 — the most-used variants
schemaType | What it's for | Key structured fields |
|---|---|---|
BlogPosting | Default for any post. Editorial blog content. | none required beyond title / body |
Article | Generic article — when "blog post" understates the case. | none required |
NewsArticle | A news report. Triggers Google News eligibility (with publisher signals). | none required |
HowTo | Step-by-step instructions. Auto-populates step[] from ordered lists or heading + paragraph pairs in the body. | step[], optional tool[], totalTime, supply[] |
Recipe | A recipe with ingredients, instructions, times, nutrition. | recipeIngredient[], recipeInstructions[], prepTime, cookTime, totalTime, recipeYield, nutrition?, recipeCuisine?, suitableForDiet?, keywords? |
FAQPage | A page whose primary content is a Q&A list. Auto-builds mainEntity[] from any faq blocks in the body. | nothing additional — the faq block is the source |
Review | A review of a specific subject (a product, a place, a book, ...). | itemReviewed (subject sub-pick), reviewRating (ratingValue, bestRating?, worstRating?) |
Product | A product page. | brand, sku?, mpn?, gtin?, offers (price + availability), aggregateRating? |
VideoObject | A page whose primary content is a video. Auto-extracts embedUrl from any video_embed blocks. | embedUrl (auto), optional duration, uploadDate, thumbnailUrl |
ItemList | An ordered or unordered list as the primary content. | itemListElement[], itemListOrder? (Ascending/Descending/Unordered) |
Tier 2 — specialised subtypes
schemaType | Family | Key structured fields |
|---|---|---|
TechArticle | Article | proficiencyLevel? (Beginner / Intermediate / Expert), dependencies? |
ScholarlyArticle | Article | citation?, doi? |
Report | Article | reportNumber? |
OpinionNewsArticle | NewsArticle subtype | — |
AnalysisNewsArticle | NewsArticle subtype | — |
ReportageNewsArticle | NewsArticle subtype | — |
BackgroundNewsArticle | NewsArticle subtype | — |
ReviewNewsArticle | NewsArticle subtype | — |
ClaimReview | Review subtype | claimReviewed, reviewRating |
SoftwareApplication | Announcement | applicationCategory, operatingSystem?, softwareVersion?, offers? |
Event | Event base | startDate, endDate?, location (Place or VirtualLocation), organizer?, performer?, offers? |
BusinessEvent | Event subtype | inherits Event fields |
EducationEvent | Event subtype | inherits Event fields |
SportsEvent | Event subtype | inherits Event fields |
MusicEvent | Event subtype | inherits Event fields |
TheaterEvent | Event subtype | inherits Event fields |
FoodEvent | Event subtype | inherits Event fields |
SocialEvent | Event subtype | inherits Event fields |
JobPosting | Announcement | hiringOrganization, jobLocation, baseSalary?, employmentType?, validThrough? |
Course | Announcement | provider, courseCode?, educationalLevel?, timeRequired? |
LocalBusiness | LocalBusiness base | address, telephone?, openingHours?, priceRange?, geo? |
PodcastEpisode | Announcement | audioUrl, duration?, episodeNumber?, partOfSeries? |
Tier 3 — long-tail variants
Creative works
schemaType | Key structured fields |
|---|---|
Movie | director?, actor[]?, duration?, contentRating? |
TVSeries | numberOfSeasons?, numberOfEpisodes? |
TVEpisode | episodeNumber?, partOfSeason? |
Book | isbn?, bookFormat?, numberOfPages? |
Audiobook | Book fields + duration?, readBy? |
MusicAlbum | byArtist?, numTracks?, genre? |
MusicRecording | byArtist?, duration?, inAlbum? |
MusicGroup | member[]?, genre? |
Dataset | license?, creator?, distribution?, variableMeasured? |
MedicalWebPage | medical-specific metadata |
Vehicles, accommodation, travel
schemaType | Key structured fields |
|---|---|
Vehicle | base vehicle |
Car | fuelType?, vehicleSeatingCapacity?, numberOfDoors? |
Accommodation | base accommodation |
House | floorSize? |
Apartment | floorLevel? |
SingleFamilyResidence | occupancy? |
Trip | itinerary?, partOfTrip?, subTrip? |
TouristAttraction | address?, geo?, touristType? |
TouristTrip | Trip fields + touristType? |
LocalBusiness subtypes
All inherit LocalBusiness fields (address, telephone, openingHours, etc.) plus a few specialised ones:
schemaType | Specialised fields |
|---|---|
Restaurant | servesCuisine?, menu? |
Hotel | starRating?, amenityFeature? |
Store | — |
AutoDealer | brand[]? |
MedicalBusiness | medicalSpecialty[]? |
ProfessionalService | areaServed? |
Discussion & QA
schemaType | Key structured fields |
|---|---|
DiscussionForumPosting | interactionStatistic? |
QAPage | mainEntity (Question + acceptedAnswer) |
How a type maps to jsonLd
On every content read response, Clog assembles a Schema.org @graph rooted at the entity's type, with the workspace's publisher Organization (or Person) and a BreadcrumbList (when enabled) as sibling nodes. The shape is:
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "<schemaType>", ...entity-typed-data },
{ "@type": "Organization", ...publisher },
{ "@type": "BreadcrumbList", ...trail }
]
}Drop into a <script type="application/ld+json"> tag verbatim. See API → SEO and JSON-LD for the rendering recipe.
The graph's first node is the entity itself, populated from the merge { ...post.structuredData, ...post.seo.schemaData } (per-field override semantics — see SEO → Type-specific SEO overrides). Embedded nodes (Person for the author, MediaObject for images, Place for an Event location) are inlined when relevant.
Page-type variants
Pages carry a smaller pageType enum picked from the page editor's right sidebar. There's no wizard — pick the closest match; WebPage is fine when nothing else fits.
pageType | When to pick it | jsonLd @type |
|---|---|---|
WebPage | The default. Any page that doesn't fit one of the others. | WebPage |
AboutPage | An "About us" or "About the team" page. | AboutPage |
ContactPage | A contact page (form, address, hours). | ContactPage |
LearningResource | A self-contained educational resource. | LearningResource |
MedicalWebPage | Medical / health content with regulated metadata. | MedicalWebPage |
Pages don't carry structuredData — their pageType solely drives the jsonLd @type. If you need rich structured content on a page (a FAQPage with mainEntity[], for example), the workaround in v1 is to author the equivalent as a post — pages are designed to be simpler.
Category, Tag, and Author defaults
Three entity types pin their Schema.org type without a picker:
| Entity | jsonLd @type | Embedded nodes |
|---|---|---|
| Category | CollectionPage | BreadcrumbList (from path) |
| Tag | CollectionPage | — |
| Author | ProfilePage | Person (from the author's person JSON-LD scaffold) |
The Author's person scaffold (jobTitle, worksFor, knowsAbout, alumniOf, awards, honorific prefix/suffix) is edited in the Author drawer's Person section — see Authors → Person (JSON-LD scaffold).
Skipping the type wizard
Clicking Skip on the create-time wizard ships the post as the workspace's defaultPostType (usually BlogPosting). The smart-suggestion banner may later prompt to switch — see SEO → Smart suggestions.
Skipping is the right answer for most posts. The wizard's value is highest for posts that genuinely are how-tos, recipes, reviews, or events — where structured-content rendering and richer SERP previews are worth a minute of authoring effort.
Related
- Dashboard guide → SEO — the wizard, structured-content fields, the live score engine.
- API → SEO and JSON-LD — how the type translates to
structuredBlocks+jsonLdon the read response. - Block types — what
structuredBlocksis made of.