BlogPosting with author and dates
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "How we cut our app's cold start time in half",
"image": ["https://acme.example/blog/cold-start-16x9.jpg"],
"datePublished": "2026-09-24T09:00:00",
"dateModified": "2026-10-06T14:30:00",
"author": { "@type": "Person", "name": "Priya Sharma", "url": "https://acme.example/team/priya-sharma" }
}Article has no strictly required properties in Google's documentation, but headline, image, dates and author are what it uses.
Opening hours for a cafe
Input:
Mo-Fr 08:00-21:00
Sa,Su 09:00-22:00
Output:
"openingHoursSpecification": [
{ "dayOfWeek": ["Monday", …, "Friday"], "opens": "08:00", "closes": "21:00" },
{ "dayOfWeek": ["Saturday", "Sunday"], "opens": "09:00", "closes": "22:00" }
]Type hours the short way; the tool writes the structured form Google prefers.
Product with an offer
"offers": {
"@type": "Offer",
"price": "89.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}Price is a plain number and the currency an ISO 4217 code. A Product needs an offer, a review or an aggregate rating to be eligible.
Breadcrumb trail
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://shop.example/" },
{ "@type": "ListItem", "position": 2, "name": "Bags", "item": "https://shop.example/bags" },
{ "@type": "ListItem", "position": 3, "name": "Trailhead 22L Daypack" }
]Every item except the last needs a URL. Match the trail visitors see on the page.
Hybrid event
"eventAttendanceMode": "https://schema.org/MixedEventAttendanceMode",
"location": [
{ "@type": "Place", "name": "Pier 27 Conference Center", "address": { … } },
{ "@type": "VirtualLocation", "url": "https://acme.example/summit/live" }
]Mixed events list both a Place and a VirtualLocation. If plans change, update eventStatus rather than deleting the markup.