# Implementation Patterns Copy-paste JSON-LD patterns for every common schema type. Replace ALL_CAPS placeholders with real values. Test at rich-results.google.com before deploying. --- ## Article (Blog Post) ```json { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "ARTICLE_TITLE_MAX_110_CHARS", "description": "ARTICLE_DESCRIPTION_150_TO_300_CHARS", "image": { "@type": "ImageObject", "url": "https://YOURDOMAIN.COM/images/ARTICLE_IMAGE.jpg", "width": 1200, "height": 630 }, "author": { "@type": "Person", "name": "AUTHOR_FULL_NAME", "url": "https://YOURDOMAIN.COM/author/AUTHOR_SLUG", "sameAs": "https://www.linkedin.com/in/AUTHOR_LINKEDIN" }, "publisher": { "@type": "Organization", "name": "PUBLICATION_OR_COMPANY_NAME", "logo": { "@type": "ImageObject", "url": "https://YOURDOMAIN.COM/images/logo.png", "width": 250, "height": 60 } }, "datePublished": "YYYY-MM-DD", "dateModified": "YYYY-MM-DD", "url": "https://YOURDOMAIN.COM/blog/ARTICLE_SLUG", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://YOURDOMAIN.COM/blog/ARTICLE_SLUG" } } ``` --- ## HowTo Guide ```json { "@context": "https://schema.org", "@type": "HowTo", "name": "How to TASK_NAME", "description": "BRIEF_DESCRIPTION_OF_WHAT_IS_ACCOMPLISHED", "image": "https://YOURDOMAIN.COM/images/HOWTO_IMAGE.jpg", "totalTime": "PT30M", "tool": [ { "@type": "HowToTool", "name": "TOOL_NAME_1" }, { "@type": "HowToTool", "name": "TOOL_NAME_2" } ], "supply": [ { "@type": "HowToSupply", "name": "SUPPLY_NAME_1" } ], "step": [ { "@type": "HowToStep", "position": 1, "name": "STEP_1_TITLE", "text": "STEP_1_FULL_INSTRUCTIONS", "image": "https://YOURDOMAIN.COM/images/step-1.jpg" }, { "@type": "HowToStep", "position": 2, "name": "STEP_2_TITLE", "text": "STEP_2_FULL_INSTRUCTIONS", "image": "https://YOURDOMAIN.COM/images/step-2.jpg" }, { "@type": "HowToStep", "position": 3, "name": "STEP_3_TITLE", "text": "STEP_3_FULL_INSTRUCTIONS" } ] } ``` **Note:** `totalTime` uses ISO 8601 duration. `PT30M` = 30 minutes. `PT1H30M` = 1 hour 30 minutes. --- ## FAQPage ```json { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "FIRST_QUESTION_TEXT?", "acceptedAnswer": { "@type": "Answer", "text": "FIRST_ANSWER_TEXT. Keep answers complete but concise — this appears directly in search results." } }, { "@type": "Question", "name": "SECOND_QUESTION_TEXT?", "acceptedAnswer": { "@type": "Answer", "text": "SECOND_ANSWER_TEXT." } }, { "@type": "Question", "name": "THIRD_QUESTION_TEXT?", "acceptedAnswer": { "@type": "Answer", "text": "THIRD_ANSWER_TEXT." } } ] } ``` **Note:** Add as many Question/Answer pairs as the page has. Google typically shows 3-5 in results. --- ## Product with Offers and Ratings ```json { "@context": "https://schema.org", "@type": "Product", "name": "PRODUCT_NAME", "description": "PRODUCT_DESCRIPTION", "image": [ "https://YOURDOMAIN.COM/images/product-front.jpg", "https://YOURDOMAIN.COM/images/product-side.jpg" ], "sku": "PRODUCT_SKU", "brand": { "@type": "Brand", "name": "BRAND_NAME" }, "offers": { "@type": "Offer", "url": "https://YOURDOMAIN.COM/products/PRODUCT_SLUG", "priceCurrency": "USD", "price": 49.99, "priceValidUntil": "YYYY-MM-DD", "availability": "https://schema.org/InStock", "itemCondition": "https://schema.org/NewCondition", "seller": { "@type": "Organization", "name": "YOUR_STORE_NAME" } }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.7, "reviewCount": 143, "bestRating": 5, "worstRating": 1 } } ``` **Availability options:** - `https://schema.org/InStock` - `https://schema.org/OutOfStock` - `https://schema.org/PreOrder` - `https://schema.org/Discontinued` --- ## Organization (Site-Wide, in Header Template) ```json { "@context": "https://schema.org", "@type": "Organization", "name": "COMPANY_LEGAL_NAME", "url": "https://YOURDOMAIN.COM", "logo": { "@type": "ImageObject", "url": "https://YOURDOMAIN.COM/images/logo.png", "width": 250, "height": 60 }, "description": "COMPANY_DESCRIPTION_1_SENTENCE", "foundingDate": "YYYY", "sameAs": [ "https://www.linkedin.com/company/YOUR_COMPANY", "https://twitter.com/YOUR_HANDLE", "https://www.facebook.com/YOUR_PAGE", "https://www.crunchbase.com/organization/YOUR_COMPANY", "https://www.wikidata.org/wiki/QXXXXXXX" ], "contactPoint": { "@type": "ContactPoint", "telephone": "+1-800-555-0100", "contactType": "customer service", "areaServed": "US", "availableLanguage": "English" } } ``` --- ## LocalBusiness ```json { "@context": "https://schema.org", "@type": "LocalBusiness", "name": "BUSINESS_NAME", "image": "https://YOURDOMAIN.COM/images/storefront.jpg", "url": "https://YOURDOMAIN.COM", "telephone": "+1-555-555-5555", "priceRange": "$$", "address": { "@type": "PostalAddress", "streetAddress": "123 Main Street", "addressLocality": "City Name", "addressRegion": "ST", "postalCode": "12345", "addressCountry": "US" }, "geo": { "@type": "GeoCoordinates", "latitude": 40.7128, "longitude": -74.0060 }, "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "opens": "09:00", "closes": "17:00" }, { "@type": "OpeningHoursSpecification", "dayOfWeek": "Saturday", "opens": "10:00", "closes": "14:00" } ], "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.6, "reviewCount": 87, "bestRating": 5 } } ``` --- ## BreadcrumbList ```json { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://YOURDOMAIN.COM" }, { "@type": "ListItem", "position": 2, "name": "CATEGORY_NAME", "item": "https://YOURDOMAIN.COM/CATEGORY-SLUG" }, { "@type": "ListItem", "position": 3, "name": "CURRENT_PAGE_TITLE", "item": "https://YOURDOMAIN.COM/CATEGORY-SLUG/PAGE-SLUG" } ] } ``` --- ## VideoObject ```json { "@context": "https://schema.org", "@type": "VideoObject", "name": "VIDEO_TITLE", "description": "VIDEO_DESCRIPTION_FULL", "thumbnailUrl": "https://YOURDOMAIN.COM/images/video-thumbnail.jpg", "uploadDate": "YYYY-MM-DD", "duration": "PT12M30S", "contentUrl": "https://YOURDOMAIN.COM/videos/VIDEO_FILE.mp4", "embedUrl": "https://www.youtube.com/embed/VIDEO_ID", "interactionStatistic": { "@type": "InteractionCounter", "interactionType": "https://schema.org/WatchAction", "userInteractionCount": 5000 }, "hasPart": [ { "@type": "Clip", "name": "Introduction", "startOffset": 0, "endOffset": 90, "url": "https://YOURDOMAIN.COM/video/VIDEO_SLUG#t=0" }, { "@type": "Clip", "name": "KEY_SECTION_NAME", "startOffset": 180, "endOffset": 360, "url": "https://YOURDOMAIN.COM/video/VIDEO_SLUG#t=180" } ] } ``` --- ## Combined: Article + BreadcrumbList (Most Blog Posts) Use two separate ` ``` Or combine into a single `@graph` array: ```html ``` Both approaches are valid. `@graph` is cleaner for sites with many schema types per page. --- ## WebSite (Homepage Only) ```json { "@context": "https://schema.org", "@type": "WebSite", "url": "https://YOURDOMAIN.COM", "name": "SITE_NAME", "potentialAction": { "@type": "SearchAction", "target": { "@type": "EntryPoint", "urlTemplate": "https://YOURDOMAIN.COM/search?q={search_term_string}" }, "query-input": "required name=search_term_string" } } ``` **Note:** Only add this if you have a working internal search at the URL template path. --- ## Duration Format Reference (ISO 8601) | Duration | ISO 8601 | |----------|----------| | 30 minutes | `PT30M` | | 1 hour | `PT1H` | | 1 hour 30 minutes | `PT1H30M` | | 2 hours 15 minutes | `PT2H15M` | | 5 minutes 30 seconds | `PT5M30S` | | 12 minutes 30 seconds | `PT12M30S` | ## Availability Values Reference Always use the full schema.org URL — not just the word. | Status | Value | |--------|-------| | In stock | `https://schema.org/InStock` | | Out of stock | `https://schema.org/OutOfStock` | | Pre-order | `https://schema.org/PreOrder` | | Back order | `https://schema.org/BackOrder` | | Limited availability | `https://schema.org/LimitedAvailability` | | Discontinued | `https://schema.org/Discontinued` |