How-to (HowTo
) structured data
Use HowTo
structured data to explicitly tell Google that your content is a how-to. A
how-to walks users through a set of steps to successfully complete a task, and can feature video,
images, and text. For example, "How to tie a tie" or "How to tile a kitchen backsplash". If each step
in your how-to must be read in sequence, it's a good sign that HowTo
structured
data could benefit your content. HowTo
structured data is appropriate when the how-to
is the main focus of the page.
Properly marked up how-to pages may be eligible to have a rich result on Search and an Action on the Google Assistant, which can help your site reach the right users.
How to add structured data
Structured data is a standardized format for providing information about a page and classifying the page content. If you're new to structured data, you can learn more about how structured data works.
Here's an overview of how to build, test, and release structured data. For a step-by-step guide on how to add structured data to a web page, check out the structured data codelab.
- Add the required properties. Based on the format you're using, learn where to insert structured data on the page.
- Follow the guidelines.
- Validate your code using the Rich Results Test and fix any critical errors. Consider also fixing any non-critical issues that may be flagged in the tool, as they can help improve the quality of your structured data (however, this isn't necessary to be eligible for rich results).
- Deploy a few pages that include your structured data and use the URL Inspection tool to test how Google sees the page. Be sure that your page is
accessible to Google and not blocked by a robots.txt file, the
noindex
tag, or login requirements. If the page looks okay, you can ask Google to recrawl your URLs. - To keep Google informed of future changes, we recommend that you submit a sitemap. You can automate this with the Search Console Sitemap API.
Feature availability
How-to rich results are currently available in all languages and countries where Google Search is available. The feature is available on mobile and desktop devices.
Examples
Here are some examples of how your content may appear in How-to rich results. A more visual variant may be displayed if your how-to contains an image of the completed how-to and an image per step. Make sure to add as many required and recommended properties as possible so your how-to can be most effectively represented in Google Search.
Standard How-to rich result

Here's an example of a text based how-to page using JSON-LD. The example only has one image that represents the final state of the how-to. In this result, users may see a preview of the content for some steps.
<html> <head> <title>How to tile a kitchen backsplash</title> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "HowTo", "name": "How to tile a kitchen backsplash", "image": { "@type": "ImageObject", "url": "https://example.com/photos/1x1/photo.jpg", "height": "406", "width": "305" }, "estimatedCost": { "@type": "MonetaryAmount", "currency": "USD", "value": "100" }, "supply": [ { "@type": "HowToSupply", "name": "tiles" }, { "@type": "HowToSupply", "name": "thin-set mortar" }, { "@type": "HowToSupply", "name": "tile grout" }, { "@type": "HowToSupply", "name": "grout sealer" } ], "tool": [ { "@type": "HowToTool", "name": "notched trowel" }, { "@type": "HowToTool", "name": "bucket" },{ "@type": "HowToTool", "name": "large sponge" } ], "step": [ { "@type": "HowToStep", "url": "https://example.com/kitchen#step1", "name": "Prepare the surfaces", "itemListElement": [{ "@type": "HowToDirection", "text": "Turn off the power to the kitchen and then remove everything that is on the wall, such as outlet covers, switchplates, and any other item in the area that is to be tiled." }, { "@type": "HowToDirection", "text": "Then clean the surface thoroughly to remove any grease or other debris and tape off the area." }], "image": { "@type": "ImageObject", "url": "https://example.com/photos/1x1/photo-step1.jpg", "height": "406", "width": "305" } }, { "@type": "HowToStep", "name": "Plan your layout", "url": "https://example.com/kitchen#step2", "itemListElement": [{ "@type": "HowToTip", "text": "The creases created up until this point will be guiding lines for creating the four walls of your planter box." }, { "@type": "HowToDirection", "text": "Lift one side at a 90-degree angle, and fold it in place so that the point on the paper matches the other two points already in the center." }, { "@type": "HowToDirection", "text": "Repeat on the other side." }], "image": { "@type": "ImageObject", "url": "https://example.com/photos/1x1/photo-step2.jpg", "height": "406", "width": "305" } }, { "@type": "HowToStep", "name": "Prepare your and apply mortar (or choose adhesive tile)", "url": "https://example.com/kitchen#step3", "itemListElement": [{ "@type": "HowToDirection", "text": "Follow the instructions on your thin-set mortar to determine the right amount of water to fill in your bucket. Once done, add the powder gradually and make sure it is thoroughly mixed." }, { "@type": "HowToDirection", "text": "Once mixed, let it stand for a few minutes before mixing it again. This time do not add more water. Double check your thin-set mortar instructions to make sure the consistency is right." }, { "@type": "HowToDirection", "text": "Spread the mortar on a small section of the wall with a trowel." }, { "@type": "HowToTip", "text": "Thinset and other adhesives set quickly so make sure to work in a small area." }, { "@type": "HowToDirection", "text": "Once it's applied, comb over it with a notched trowel." }], "image": { "@type": "ImageObject", "url": "https://example.com/photos/1x1/photo-step3.jpg", "height": "406", "width": "305" } }, { "@type": "HowToStep", "name": "Add your tile to the wall", "url": "https://example.com/kitchen#step4", "itemListElement": [{ "@type": "HowToDirection", "text": "Place the tile sheets along the wall, making sure to add spacers so the tiles remain lined up." }, { "@type": "HowToDirection", "text": "Press the first piece of tile into the wall with a little twist, leaving a small (usually one-eight inch) gap at the countertop to account for expansion. use a rubber float to press the tile and ensure it sets in the adhesive." }, { "@type": "HowToDirection", "text": "Repeat the mortar and tiling until your wall is completely tiled, Working in small sections." }], "image": { "@type": "ImageObject", "url": "https://example.com/photos/1x1/photo-step4.jpg", "height": "406", "width": "305" } }, { "@type": "HowToStep", "name": "Apply the grout", "url": "https://example.com/kitchen#step5", "itemListElement": [{ "@type": "HowToDirection", "text": "Allow the thin-set mortar to set. This usually takes about 12 hours. Don't mix the grout before the mortar is set, because you don't want the grout to dry out!" }, { "@type": "HowToDirection", "text": "To apply, cover the area thoroughly with grout and make sure you fill all the joints by spreading it across the tiles vertically, horizontally, and diagonally. Then fill any remaining voids with grout." }, { "@type": "HowToDirection", "text": "Then, with a moist sponge, sponge away the excess grout and then wipe clean with a towel. For easier maintenance in the future, think about applying a grout sealer." }], "image": { "@type": "ImageObject", "url": "https://example.com/photos/1x1/photo-step5.jpg", "height": "406", "width": "305" } } ], "totalTime": "P2D" } </script> </head> <body> </body> </html>
Here's an example of a text based how-to page using Microdata. The example only has one image that represents the final state of the how-to. In this result, users may see a preview of the content for some steps.
<html> <head> <title>How to tile a kitchen backsplash</title> </head> <body> <div itemscope itemtype="https://schema.org/HowTo"> <b><span itemprop="name">How to tile a kitchen backsplash</span></b> <div>About <span itemprop="estimatedCost" itemscope itemtype="https://schema.org/MonetaryAmount"> <meta itemprop="currency" content="USD"/> <meta itemprop="value" content="100"/> $100 </span> </div> <div>About <span itemprop="totalTime" content="P2D">2 days</span></div> <div>Necessary Items:</div> <div itemprop="supply" itemscope itemtype="https://schema.org/HowToSupply"> <a itemprop="url" href="https://example.com/supplies?id=1"> <span itemprop="name">tiles</span> </a> <img alt="Blue kitchen tiles with scalloped edges" itemprop="image" src="https://example.com/photos/1x1/photo.jpg"/> </div> <div itemprop="supply" itemscope itemtype="https://schema.org/HowToSupply"> <a itemprop="url" href="https://example.com/supplies?id=2"> <span itemprop="name">thin-set mortar</span> </a> <img alt="Thin-set mortar" itemprop="image" src="https://example.com/photos/1x1/photo.jpg"/> </div> <div itemprop="supply" itemscope itemtype="https://schema.org/HowToSupply"> <a itemprop="url" href="https://example.com/supplies?id=3"> <span itemprop="name">tile grout</span> </a> <img alt="White tile grout" itemprop="image" src="https://example.com/photos/1x1/photo.jpg"/> </div> <div itemprop="supply" itemscope itemtype="https://schema.org/HowToSupply"> <a itemprop="url" href="https://example.com/supplies?id=4"> <span itemprop="name">grout sealer</span> </a> <img alt="Grout sealer" itemprop="image" src="https://example.com/photos/1x1/photo.jpg"/> </div> <div itemprop="tool" itemscope itemtype="https://schema.org/HowToTool"> <a itemprop="url" href="https://example.com/supplies?id=5"> <span itemprop="name">notched trowel</span> </a> <img alt="Notched trowel with a red handle" itemprop="image" src="https://example.com/photos/1x1/photo.jpg"/> </div> <div itemprop="tool" itemscope itemtype="https://schema.org/HowToTool"> <a itemprop="url" href="https://example.com/tools?id=6"> <span itemprop="name">bucket</span> </a> <img alt="Medium-sized blue bucket" itemprop="image" src="https://example.com/photos/1x1/photo.jpg"/> </div> <div itemprop="tool" itemscope itemtype="https://schema.org/HowToTool"> <a itemprop="url" href="https://example.com/tools?id=7"> <span itemprop="name">large sponge</span> </a> <img alt="Large yellow sponge" itemprop="image" src="https://example.com/photos/1x1/photo.jpg"/> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <link itemprop="url" href="https://example.com/example#step1" /> <div itemprop="name">Preparation</div> <img itemprop="image" alt="image showing preparation" src="https://example.com/photos/1x1/photo-step1.jpg"/> <div itemprop="itemListElement" itemscope itemtype="https://schema.org/HowToDirection"> <div itemprop="text">Turn off the power to the kitchen and then remove everything that is on the wall, such as outlet covers, switchplates, and any other item in the area that is to be tiled. Then clean the surface thoroughly to remove any grease or other debris and tape off the area. </div> </div> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <link itemprop="url" href="https://example.com/example#step2" /> <div itemprop="name">Plan your Layout</div> <img itemprop="image" alt="image showing layout planning" src="https://example.com/photos/1x1/photo-step2.jpg"/> <div itemprop="itemListElement" itemscope itemtype="https://schema.org/HowToDirection"> <div itemprop="text">Lay out your tile horizontally below the wall where you're going to place it. This makes it easy to ensure that your pattern will fit in the space provided. Also it helps you double check that you have enough tile and know exactly where each piece will go. </div> </div> <div itemprop="itemListElement" itemscope itemtype="https://schema.org/HowToDirection"> <div itemprop="text">Spread the mortar on a small section of the wall with a trowel. Thinset and other adhesives set quickly so make sure to work in a small area. Once it's applied, comb over it with a notched trowel. </div> </div> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <link itemprop="url" href="https://example.com/example#step3" /> <div itemprop="name">Add your tile to the wall</div> <img itemprop="image" alt="image grout application" src="https://example.com/photos/1x1/photo-step3.jpg"/> <div itemprop="itemListElement" itemscope itemtype="https://schema.org/HowToDirection"> <div itemprop="text">Place the tile sheets along the wall, making sure to add spacers so the tiles remain lined up. Press the first piece of tile into the wall with a little twist, leaving a small (usually one-eight inch) gap at the countertop to account for expansion. use a rubber float to press the tile and ensure it sets in the adhesive. Repeat the mortar and tiling until your wall is completely tiled, working in small sections. </div> </div> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <link itemprop="url" href="https://example.com/example#step4" /> <div itemprop="name">Apply the grout</div> <img itemprop="image" alt="image grout application" src="https://example.com/photos/1x1/photo-step4.jpg"/> <div itemprop="itemListElement" itemscope itemtype="https://schema.org/HowToDirection"> <div itemprop="text">Allow the thin-set mortar to set. This usually takes about 12 hours. Don't mix the grout before the mortar is set, because you don't want the grout to dry out! To apply, cover the area thoroughly with grout and make sure you fill all the joints by spreading it across the tiles vertically, horizontally, and diagonally. Then fill any remaining voids with grout. </div> </div> <div itemprop="itemListElement" itemscope itemtype="https://schema.org/HowToDirection"> <div itemprop="text">Then, with a moist sponge, sponge away the excess grout and then wipe clean with a towel. For easier maintenance in the future, think about applying a grout sealer. </div> </div> </div> </div> </body> </html>
How-to rich result with images for each step

Here's an example of a how-to page with images for each step using JSON-LD. When there's an image for each step, users may see a preview with a carousel of images.
<html> <head> <title>How to tie a tie</title> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "HowTo", "image": { "@type": "ImageObject", "url": "https://example.com/1x1/photo.jpg" }, "name": "How to tie a tie", "totalTime": "PT2M", "video": { "@type": "VideoObject", "name": "Tie a Tie", "description": "How to tie a four-in-hand knot.", "thumbnailUrl": "https://example.com/photos/photo.jpg", "contentUrl": "https://www.example.com/videos/123_600x400.mp4", "embedUrl": "https://www.example.com/videoplayer?id=123", "uploadDate": "2019-01-05T08:00:00+08:00", "duration": "P1MT10S" }, "supply": [ { "@type": "HowToSupply", "name": "A tie" }, { "@type": "HowToSupply", "name": "A collared shirt" } ], "tool": [ { "@type": "HowToTool", "name": "A mirror" } ], "step":[ { "@type": "HowToStep", "name": "Preparations", "text": "Button your shirt how you'd like to wear it, then drape the tie around your neck. Make the thick end about 1/3rd longer than the short end. For formal button down shirts, it usually works best with the small end of the tie between 4th and 5th button.", "image": "https://example.com/1x1/step1.jpg", "url": "https://example.com/tie#step1" }, { "@type": "HowToStep", "name": "Crossing once", "text": "Cross the long end over the short end. This will form the basis for your knot.", "image": "https://example.com/1x1/step2.jpg", "url": "https://example.com/tie#step2" }, { "@type": "HowToStep", "name": "Second crossing", "text": "Bring the long end back under the short end, then throw it back over the top of the short end in the other direction.", "image": "https://example.com/1x1/step3.jpg", "url": "https://example.com/tie#step3" }, { "@type": "HowToStep", "name": "Loop in", "text": "Now pull the long end through the loop near your neck, forming another loop near your neck.", "image": "https://example.com/1x1/step4.jpg", "url": "https://example.com/tie#step4" }, { "@type": "HowToStep", "name": "Pull and tighten", "text": "Pull the long end through that new loop and tighten to fit!", "image": "https://example.com/1x1/step5.jpg", "url": "https://example.com/tie#step5" } ] } </script> </head> <body> </body> </html>
Here's an example of a how-to page with images for each step using Microdata. When there's an image for each step, users may see a preview with a carousel of images.
<html> <head> <title>How to tie a tie</title> </head> <body> <div itemscope itemtype="https://schema.org/HowTo"> <b><span itemprop="name">How to tie a tie</span></b> <div>About <span itemprop="totalTime" content="PT2M">2 minutes</span></div> <div itemprop="video" itemscope itemtype="https://schema.org/VideoObject"> <meta itemprop="name" content="Tie a Tie" /> <meta itemprop="description" content="How to tie a four-in-hand knot." /> <link itemprop="thumbnailUrl" content="https://example.com/photos/photo.jpg" /> <link itemprop="contentUrl" content="https://www.example.com/videos/123_600x400.mp4" /> <link itemprop="embedUrl" content="https://www.example.com/videoplayer?id=123" /> <meta itemprop="duration" content="P1MT10S" /> <meta itemprop="uploadDate" content="2019-01-05T08:00:00+08:00" /> <video>...</video> </div> <div>Necessary Items:</div> <div itemprop="supply" itemtype="https://schema.org/HowToSupply">A tie</div> <div itemprop="supply" itemtype="https://schema.org/HowToSupply">A collared Shirt</div> <div itemprop="tool" itemtype="https://schema.org/HowToTool">A mirror</div> <div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Preparations</div> <div itemprop="text">Button your shirt how you'd like to wear it, then drape the tie around your neck. Make the thick end about 1/3rd longer than the short end. For formal button down shirts, it usually works best with the small end of the tie between 4th and 5th button.</div> <div itemprop="image">https://example.com/1x1/photo1.jpg</div> <meta itemprop="url" content="https://example.com/tie#step1" /> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Crossing once</div> <div itemprop="text">Cross the long end over the short end. This will form the basis for your knot.</div> <div itemprop="image">https://example.com/1x1/photo2.jpg</div> <meta itemprop="url" content="https://example.com/tie#step2" /> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Second crossing</div> <div itemprop="text">Bring the long end back under the short end, then throw it back over the top of the short end in the other direction.</div> <div itemprop="image">https://example.com/1x1/photo3.jpg</div> <meta itemprop="url" content="https://example.com/tie#step3" /> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Loop in</div> <div itemprop="text">Now pull the long end through the loop near your neck, forming another loop near your neck.</div> <div itemprop="image">https://example.com/1x1/photo4.jpg</div> <meta itemprop="url" content="https://example.com/tie#step4" /> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Pull and tighten</div> <div itemprop="text">Pull the long end through that new loop and tighten to fit!</div> <div itemprop="image">https://example.com/1x1/photo5.jpg</div> <meta itemprop="url" content="https://example.com/tie#step5" /> </div> </div> </div> </body> </html>
How-to rich result with video
Here's an example of a how-to page that contains a mix of text, images, and video clips using JSON-LD. The example contains 1 video of the how-to, with steps in that same video marked up with Clip
structured data.
<html> <head> <title>How to create a Trivia action</title> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "HowTo", "image": { "@type": "ImageObject", "url": "https://example.com/1x1/photo.jpg" }, "name": "How to create a Trivia action", "totalTime": "PT2M", "video": { "@type": "VideoObject", "name": "Build a Trivia Game for the Google Assistant with No Code", "description": "Learn how to create a Trivia action for Assistant within minutes.", "thumbnailUrl": "https://example.com/photos/photo.jpg", "contentUrl": "https://www.youtube.com/watch?v=4AOI1tZrgMI", "embedUrl": "https://www.youtube.com/embed/4AOI1tZrgMI", "uploadDate": "2019-01-05T08:00:00+08:00", "duration": "P1MT10S", "hasPart": [ { "@type": "Clip", "@id": "Clip1", "name": "Open Actions on Google Console", "startOffset": 29, "endOffset": 36, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI&t=29" }, { "@type": "Clip", "@id": "Clip2", "name": "Select Trivia Template", "startOffset": 36, "endOffset": 45, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI&t=36" }, { "@type": "Clip", "@id": "Clip3", "name": "Choose a Personality", "startOffset": 45, "endOffset": 65, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI&t=45" }, { "@type": "Clip", "@id": "Clip4", "name": "Feed your content", "startOffset": 65, "endOffset": 154, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI&t=65" }, { "@type": "Clip", "@id": "Clip5", "name": "Create the action", "startOffset": 154, "endOffset": 172, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI&t=154" }, { "@type": "Clip", "@id": "Clip6", "name": "Test your action", "startOffset": 172, "endOffset": 212, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI&t=172" }, { "@type": "Clip", "@id": "Clip7", "name": "Submit your action", "startOffset": 212, "endOffset": 285, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI&t=212" } ] }, "step": [ { "@type": "HowToStep", "name": "Open Actions on Google Console", "text": "Navigate to https://console.actions.google.com to get started.", "image": "https://example.com/1x1/step1.jpg", "url": "https://example.com/tie#step1", "video": { "@id": "Clip1" } }, { "@type": "HowToStep", "name": "Select Trivia Template", "text": "Create a new project and select Templates | You have a choice to select between Trivia, Flashcard or Personality Quiz.", "image": "https://example.com/1x1/step2.jpg", "url": "https://example.com/tie#step2", "video": { "@id": "Clip2" } }, { "@type": "HowToStep", "name": "Choose a Personality", "text": "Select one of the three personalities- Mr, Montgomery, Regal Queen, or the Trivia Bot.", "image": "https://example.com/1x1/step3.jpg", "url": "https://example.com/tie#step3", "video": { "@id": "Clip3" } }, { "@type": "HowToStep", "name": "Feed your content", "itemListElement": [ { "@type": "HowToDirection", "text": "Make a copy of our pre-filled sheet and replace with your content." }, { "@type": "HowToDirection", "text": "Ensure you make the sheet publicly accessible. Copy the URL of the sheet and paste it into the Console." } ], "image": "https://example.com/1x1/step4.jpg", "url": "https://example.com/tie#step4", "video": { "@id": "Clip4" } }, { "@type": "HowToStep", "name": "Create the action", "text": "Create the action. Once content is successfully uploaded, it will take couple of minutes to create the action.", "image": "https://example.com/1x1/step5.jpg", "url": "https://example.com/tie#step5", "video": { "@id": "Clip5" } }, { "@type": "HowToStep", "name": "Test your action", "text": "Navigate to the Simulator to test your action and simulate various surfaces, locations and locales.", "image": "https://example.com/1x1/step6.jpg", "url": "https://example.com/tie#step6", "video": { "@id": "Clip6" } }, { "@type": "HowToStep", "name": "Submit your action", "text": "Once you complete directory information and invocation names, submit your action for all Assistant users to see and use your action.", "image": "https://example.com/1x1/step7.jpg", "url": "https://example.com/tie#step7", "video": { "@id": "Clip7" } } ] } </script> </head> <body> </body> </html>
Here's an example of a how-to page that contains a mix of text, images, and video clips using Microdata. The example contains 1 video of the how-to, with steps in that same video marked up with Clip
structured data.
<html> <head> <title>How to create a Trivia action</title> </head> <body> <div itemscope itemtype="https://schema.org/HowTo"> <b><span itemprop="name">How to create a Trivia action</span></b> <div>About <span itemprop="totalTime" content="PT2M">2 minutes</span></div> <div itemprop="video" itemscope itemtype="https://schema.org/VideoObject"> <meta itemprop="name" content="Tie a Tie" /> <meta itemprop="description" content="How to tie a four-in-hand knot." /> <link itemprop="thumbnailUrl" content="https://example.com/photos/photo.jpg" /> <link itemprop="contentUrl" content="https://www.example.com/videos/123_600x400.mp4" /> <link itemprop="embedUrl" content="https://www.example.com/videoplayer?id=123" /> <meta itemprop="duration" content="P1MT10S" /> <meta itemprop="uploadDate" content="2019-01-05T08:00:00+08:00" /> <div> <div itemprop="hasPart" itemscope itemtype="https://schema.org/Clip" itemid="Clip1"> <div itemprop="name">Open Actions on Google Console</div> <div itemprop="startOffset">29</div> <div itemprop="endOffset">36</div> <div itemprop="url">https://www.youtube.com/watch?v=4AOI1tZrgMI&t=29</div> </div> <div itemprop="hasPart" itemscope itemtype="https://schema.org/Clip" itemid="Clip2"> <div itemprop="name">Select Trivia Template</div> <div itemprop="startOffset">36</div> <div itemprop="endOffset">45</div> <div itemprop="url">https://www.youtube.com/watch?v=4AOI1tZrgMI&t=36</div> </div> <div itemprop="hasPart" itemscope itemtype="https://schema.org/Clip" itemid="Clip3"> <div itemprop="name">Choose a Personality</div> <div itemprop="startOffset">45</div> <div itemprop="endOffset">65</div> <div itemprop="url">https://www.youtube.com/watch?v=4AOI1tZrgMI&t=45</div> </div> <div itemprop="hasPart" itemscope itemtype="https://schema.org/Clip" itemid="Clip4"> <div itemprop="name">Feed your content</div> <div itemprop="startOffset">65</div> <div itemprop="endOffset">154</div> <div itemprop="url">https://www.youtube.com/watch?v=4AOI1tZrgMI&t=65</div> </div> <div itemprop="hasPart" itemscope itemtype="https://schema.org/Clip" itemid="Clip5"> <div itemprop="name">Create the action</div> <div itemprop="startOffset">154</div> <div itemprop="endOffset">172</div> <div itemprop="url">https://www.youtube.com/watch?v=4AOI1tZrgMI&t=154</div> </div> <div itemprop="hasPart" itemscope itemtype="https://schema.org/Clip" itemid="Clip6"> <div itemprop="name">Test your action</div> <div itemprop="startOffset">172</div> <div itemprop="endOffset">212</div> <div itemprop="url">https://www.youtube.com/watch?v=4AOI1tZrgMI&t=172</div> </div> <div itemprop="hasPart" itemscope itemtype="https://schema.org/Clip" itemid="Clip7"> <div itemprop="name">Submit your action</div> <div itemprop="startOffset">212</div> <div itemprop="endOffset">285</div> <div itemprop="url">https://www.youtube.com/watch?v=4AOI1tZrgMI&t=212</div> </div> </div> <video>...</video> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Open Actions on Google Console</div> <div itemprop="text">Navigate to https://console.actions.google.com to get started.</div> <div itemprop="image">https://example.com/1x1/photo1.jpg</div> <meta itemprop="url" content="https://example.com/tie#step1" /> <link itemprop="video" href="Clip1" /> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Select Trivia Template</div> <div itemprop="text">Create a new project and select Templates | You have a choice to select between Trivia, Flashcard or Personality Quiz.</div> <div itemprop="image">https://example.com/1x1/photo2.jpg</div> <meta itemprop="url" content="https://example.com/tie#step2" /> <link itemprop="video" href="Clip2" /> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Choose a Personality</div> <div itemprop="text">Select one of the three personalities- Mr, Montgomery, Regal Queen, or the Trivia Bot.</div> <div itemprop="image">https://example.com/1x1/photo3.jpg</div> <meta itemprop="url" content="https://example.com/tie#step3" /> <link itemprop="video" href="Clip3" /> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Feed your content</div> <div itemprop="itemListElement" itemscope itemtype="https://schema.org/HowToDirection"> <div itemprop="text">Make a copy of our pre-filled sheet and replace with your content.</div> </div> <div itemprop="itemListElement" itemscope itemtype="https://schema.org/HowToDirection"> <div itemprop="text">Ensure you make the sheet publicly accessible. Copy the URL of the sheet and paste it into the Console.</div> </div> <div itemprop="image">https://example.com/1x1/photo4.jpg</div> <meta itemprop="url" content="https://example.com/tie#step4" /> <link itemprop="video" href="Clip4" /> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Create the action</div> <div itemprop="text">Create the action. Once content is successfully uploaded, it will take couple of minutes to create the action.</div> <div itemprop="image">https://example.com/1x1/photo5.jpg</div> <meta itemprop="url" content="https://example.com/tie#step5" /> <link itemprop="video" href="Clip5" /> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Test your action</div> <div itemprop="text">PNavigate to the Simulator to test your action and simulate various surfaces, locations and locales.</div> <div itemprop="image">https://example.com/1x1/photo6.jpg</div> <meta itemprop="url" content="https://example.com/tie#step6" /> <link itemprop="video" href="Clip6" /> </div> <div itemprop="step" itemscope itemtype="https://schema.org/HowToStep"> <div itemprop="name">Submit your action</div> <div itemprop="text">Once you complete directory information and invocation names, submit your action for all Assistant users to see and use your action.</div> <div itemprop="image">https://example.com/1x1/photo7.jpg</div> <meta itemprop="url" content="https://example.com/tie#step7" /> <link itemprop="video" href="Clip7" /> </div> </div> </body> </html>
Guidelines
For your page to be eligible for How-to rich results and a How-to Action for the Google Assistant, you must follow these guidelines:
- General structured data guidelines
- Search Essentials
- Content restrictions policy for Actions on Google
- How-to content guidelines
Content guidelines
- Advertising: Don't use
HowTo
structured data for advertising purposes. - Ineligible Content: How-to rich results may not be displayed if the content is obscene, profane, sexually explicit, or graphically violent; or if it promotes dangerous or illegal activities or has hateful or harassing language.
- Source: All
HowTo
content must be visible to the user on the source page. Make sure that the how-to is the main focus of the source page. Don't include more than oneHowTo
for a certain page. - Materials and Tools: Add structured data to all materials and tools necessary to complete the task.
- Steps: Each
HowToStep
must include the entire contents of the source step. Don't mark up non-step data such as a summary or introduction section as a step. - Step images: If the steps are best represented visually, ensure the images
in these steps are marked up for each
HowToStep
. Only mark up the instructional step images that are specific for each step and don't use the same image in multiple steps for the same how-to. Use the same images that correspond to the content on your page. Don't use images that don't reflect the how-to content, or use different images to optimize the rich-result. - Final image: If the end result can be accurately described by an image,
ensure this image is present on the page, and your
HowTo
markup includes it using theimage
property. This image may be the same as the one marked up for the last step. - Content: Don't use
HowTo
markup for recipes; instead, useRecipe structured data
. Articles and general advice content that is not a specific set of instructions are not appropriate forHowTo
markup.
Structured data type definitions
You must include the required properties for your content to be eligible for display as a rich result. You can also include the recommended properties to add more information to your structured data, which could provide a better user experience.
HowTo
The full definition of HowTo
is available at
schema.org/HowTo.
The HowTo
type indicates that the page contains a how-to. There
must be one HowTo
type definition per page.
The Google-supported properties are the following:
Required properties | |
---|---|
name |
The title of the how-to. For example, "How to tie a tie". |
step |
HowToStep or HowToSection
An array of
An array of "step":[ { "@type": "HowToSection", "name": "Choose a Tie", "itemListElement": [ { "@type": "HowToStep", "name": "Choose a color", "text": "Pick a tie that matches your shirt color. Contrasting colors can be fun!" }, { "@type": "HowToStep", "name": "Choose a pattern", "text": "A tie with a pattern can add flare to your outfit. Make sure the pattern is not too noisy against your shirt" } ] }, { "@type": "HowToSection", "name": "Put on the Tie", "itemListElement": [ { "@type": "HowToStep", "name": "Arrange the Tie", "text": "Stand in front of the mirror with the tie around your neck." }, { "@type": "HowToStep", "name": "Tie the Tie", "text": "Use your hands to tie the tie into a neat knot around your neck. Looking sharp!" } ] } ] |
Recommended properties | |
---|---|
estimatedCost |
MonetaryAmount or Text
The estimated cost of the supplies consumed when performing instructions. |
image |
ImageObject or URL
Image of the completed how-to. Additional image guidelines:
|
supply |
HowToSupply or Text
A supply consumed when performing instructions or a direction. |
tool |
HowToTool or Text
An object used (but not consumed) when performing instructions or a direction. |
totalTime |
Duration
The total time required to perform all instructions or directions (including time to prepare the supplies), in ISO 8601 duration format. |
video |
VideoObject
A video of the how-to. Follow the list of required and recommended
Video properties. Mark the steps
within a video with { "@context": "https://schema.org", "@type": "HowTo", "video": { "@type": "VideoObject", "name": "Build a Trivia Game for the Google Assistant with No Code", "description": "Learn how to create a Trivia action for Assistant within minutes.", "thumbnailUrl": "https://example.com/photos/photo.jpg", "contentUrl": "https://www.youtube.com/watch?v=4AOI1tZrgMI", "embedUrl": "https://www.youtube.com/embed/4AOI1tZrgMI", "uploadDate": "2019-01-05T08:00:00+08:00", "duration": "P1MT10S", "hasPart": [ { "@type": "Clip", "@id": "Clip1", "name": "Open Actions on Google Console", "startOffset": 29, "endOffset": 36, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI?t=29" }, { "@type": "Clip", "@id": "Clip2", "name": "Select Trivia Template", "startOffset": 36, "endOffset": 45, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI?t=36" } ] } } |
video.hasPart
|
A video clip that is part of the entire video. |
video.hasPart.endOffset
|
The end time of the clip expressed as the number of seconds from the beginning of the video. |
video.hasPart.name
|
The name of the clip. For example, "Pull and tighten" could be the name of the clip that shows how to pull and tighten a tie. |
video.hasPart.startOffset
|
The start time of the clip expressed as the number of seconds from the beginning of the video. |
video.hasPart.url
|
A link to the start time of the clip. The start time must match the value set in
"startOffset": 30, "endOffset": 45, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI&t=30" |
HowToSection
The full definition of HowToSection
is available at
schema.org/HowToSection.
The HowToSection
type defines a section of a single how-to and
contains one or multiple steps. Don't use HowToSection
to define different solutions
to complete a task; instead, use HowToSection
as part of a single solution. For listing
multiple ways to complete a task, use multiple HowTo
objects. For example,
multiple ways to change a flat tire are listed as multiple HowTo
objects, not
HowToSection
objects.
The Google-supported properties are the following:
Required properties | |
---|---|
itemListElement |
HowToStep
A list of detailed steps for the section. |
name |
Text
The name of the section. |
HowToStep
The full definition of HowToStep
is available at
schema.org/HowToStep.
The HowToStep
type defines the simple textual step in a how-to, and may
include an image.
The Google-supported properties are the following:
Required properties | |
---|---|
itemListElement |
HowToDirection or HowToTip
A list of detailed substeps, including directions or tips. Optional if |
text |
Text
The full instruction text of this step. Optional if
|
Recommended properties | |
---|---|
image |
ImageObject or URL
An image for the step. Additional image guidelines:
|
name |
Text
The word or short phrase summarizing the step (for example, "Attach wires to post" or "Dig"). Don't use non-descriptive text (for example, "Step 1: [text]") or other form of step number (for example, "1. [text]"). |
url |
URL
A |
video |
VideoObject or Clip
A video for this step of the how-to, or a clip from one video that shows the entire how-to. For
Here's an example using { "@type": "HowToStep", "video": { "name": "Drape the tie", "description": "Drape the tie.", "thumbnailUrl": "https://example.com/photos/photo.jpg", "contentUrl": "https://www.example.com/videos/123_600x400.mp4", "embedUrl": "https://www.example.com/videoplayer?id=123", "uploadDate": "2019-01-05T08:00:00+08:00", "duration": "PT12S" } } Here's an example using { "@context": "https://schema.org", "@type": "HowTo", "name": "Build a Trivia Game for the Google Assistant with No Code", "video": { "@type": "VideoObject", "name": "Build a Trivia Game for the Google Assistant with No Code", "description": "Learn how to create a Trivia action for Assistant within minutes.", "thumbnailUrl": "https://example.com/photos/photo.jpg", "contentUrl": "https://www.youtube.com/watch?v=4AOI1tZrgMI", "embedUrl": "https://www.youtube.com/embed/4AOI1tZrgMI", "uploadDate": "2019-01-05T08:00:00+08:00", "duration": "P1MT10S", "hasPart": [ { "@type": "Clip", "@id": "Clip1", "name": "Open Actions on Google Console", "startOffset": 29, "endOffset": 36, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI?t=29" }, { "@type": "Clip", "@id": "Clip2", "name": "Select Trivia Template", "startOffset": 36, "endOffset": 45, "url": "https://www.youtube.com/watch?v=4AOI1tZrgMI?t=36" } ] }, "step": [ { "@type": "HowToStep", "name": "Open Actions on Google Console", "video": { "@id": "Clip1" } }, { "@type": "HowToStep", "name": "Select Trivia Template", "video": { "@id": "Clip2" } } ] } |
HowToSupply
, HowToTool
The full definitions of HowToSupply
and HowToTool
are available at
schema.org/HowToSupply and
schema.org/HowToTool.
HowToSupply
and HowToTool
are used to complete the HowTo
.
They have the same required and recommended properties.
Required properties | |
---|---|
name |
Text
The name of the supply or tool. |
HowToDirection
, HowToTip
The full definitions of HowToDirection
and HowToTip
are available at
schema.org/HowToDirection and
schema.org/HowToTip.
Use HowToDirection
and HowToTip
to describe directions or tips.
They have the same required and recommended properties.
Required properties | |
---|---|
text |
Text
The text of the direction or tip. |
Monitor rich results with Search Console
Search Console is a tool that helps you monitor how your pages perform in Google Search. You don't have to sign up for Search Console to be included in Google Search results, but it can help you understand and improve how Google sees your site. We recommend checking Search Console in the following cases:
- After deploying structured data for the first time
- After releasing new templates or updating your code
- Analyzing traffic periodically
After deploying structured data for the first time
After Google has indexed your pages, look for issues using the relevant Rich result status report. Ideally, there will be an increase of valid items, and no increase in invalid items. If you find issues in your structured data:
- Fix the invalid items.
- Inspect a live URL to check if the issue persists.
- Request validation using the status report.
After releasing new templates or updating your code
When you make significant changes to your website, monitor for increases in structured data invalid items.- If you see an increase in invalid items, perhaps you rolled out a new template that doesn't work, or your site interacts with the existing template in a new and bad way.
- If you see a decrease in valid items (not matched by an increase in invalid items), perhaps you are no longer embedding structured data in your pages. Use the URL Inspection tool to learn what is causing the issue.
Analyzing traffic periodically
Analyze your Google Search traffic using the Performance Report. The data will show you how often your page appears as a rich result in Search, how often users click on it and what is the average position you appear on search results. You can also automatically pull these results with the Search Console API.Troubleshooting
If you're having trouble implementing or debugging structured data, here are some resources that may help you.
- If you're using a content management system (CMS) or someone else is taking care of your site, ask them to help you. Make sure to forward any Search Console message that details the issue to them.
- Google does not guarantee that features that consume structured data will show up in search results. For a list of common reasons why Google may not show your content in a rich result, see the General Structured Data Guidelines.
- You might have an error in your structured data. Check the list of structured data errors.
- If you received a structured data manual action against your page, the structured data on the page will be ignored (although the page can still appear in Google Search results). To fix structured data issues, use the Manual Actions report.
- Review the guidelines again to identify if your content isn't compliant with the guidelines. The problem can be caused by either spammy content or spammy markup usage. However, the issue may not be a syntax issue, and so the Rich Results Test won't be able to identify these issues.
- Troubleshoot missing rich results / drop in total rich results.
- Allow time for re-crawling and re-indexing. Remember that it may take several days after publishing a page for Google to find and crawl it. For general questions about crawling and indexing, check the Google Search crawling and indexing FAQ.
- Post a question in the Google Search Central forum.