/ โ† Schema Debugger Fixes / HowTo Schema Errors
In this guide
  1. What HowTo markup is, and what Google does with it now
  2. The fields HowTo needs
  3. The errors you will see, and what each one means
  4. Durations, costs, supplies and tools
  5. Fixing JSON that cannot be read
  6. Making the steps match the page
  7. The fix, step by step
  8. Long guides: HowToSection and HowToDirection
  9. Stopping it from coming back
  10. Questions and answers

What HowTo markup is, and what Google does with it now

HowTo is a schema.org type for instructions: a page that walks the reader through a task one step at a time, such as replacing a tap washer, setting up two-factor sign-in or planting a hedge. The markup is a HowTo object with a name and a step list. Each step is usually a HowToStep with the instruction in text, and long guides can group steps into HowToSection items.

In August 2023 Google limited HowTo rich results to desktop, and in September 2023 it stopped showing them altogether. At the same time it removed HowTo from the Rich Results Test and from the Search Console enhancement reports. That is why many site owners saw their step-by-step search results vanish, and why the Rich Results Test now says it detects no rich result items on a page that has perfectly good HowTo markup.

The markup has not become useless. It is still valid schema.org, other search engines read it, and AI answer engines use clearly ordered steps when they quote a page as a set of instructions. A clean HowTo block also keeps your audit reports honest: a broken block is reported every time the page is scanned and hides real problems in the noise.

๐Ÿ’ก Because the Rich Results Test no longer checks HowTo, use the Schema Markup Validator at validator.schema.org and the Schema Debugger to test it. Judge the fix by a clean validation, not by what appears in Google Search.

When HowTo is the wrong type

The fields HowTo needs

HowTo has two fields it cannot do without and a handful that make it useful. Most audit errors come from a missing step, a step with no text, or a duration written in the wrong format.

TypeFieldWhat it holds
HowTonameThe title of the task, as shown on the page, such as "How to replace a tap washer".
HowTostepAn array of HowToStep or HowToSection items, in the order the reader follows them.
HowToSteptextThe full instruction for that step. Required on every step.
HowToStepname, url, imageRecommended. A short title for the step, a link to the step on the page (an anchor), and a picture of it.
HowToSectionname, itemListElementA group of steps with a heading. itemListElement holds the HowToStep items in the group.
HowTototalTimeRecommended. How long the whole task takes, as an ISO 8601 duration such as PT45M.
HowToestimatedCost, supply, toolRecommended. What it costs, what is used up (HowToSupply) and what is needed but kept (HowToTool).

A correct block you can copy

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "How to replace a tap washer",
  "description": "Stop a dripping tap by fitting a new washer in about 30 minutes.",
  "image": "https://example.com/images/tap-washer.jpg",
  "totalTime": "PT30M",
  "estimatedCost": { "@type": "MonetaryAmount", "currency": "GBP", "value": "3" },
  "supply": [ { "@type": "HowToSupply", "name": "Replacement tap washer" } ],
  "tool": [
    { "@type": "HowToTool", "name": "Adjustable spanner" },
    { "@type": "HowToTool", "name": "Flat-head screwdriver" }
  ],
  "step": [
    {
      "@type": "HowToStep",
      "name": "Turn off the water",
      "text": "Turn off the isolation valve under the sink, then open the tap to drain what is left in the pipe.",
      "url": "https://example.com/tap-washer#step-1",
      "image": "https://example.com/images/tap-washer-step-1.jpg"
    },
    {
      "@type": "HowToStep",
      "name": "Remove the tap head",
      "text": "Prise off the decorative cap, undo the screw beneath it and lift the head off the valve.",
      "url": "https://example.com/tap-washer#step-2"
    },
    {
      "@type": "HowToStep",
      "name": "Fit the new washer",
      "text": "Unscrew the headgear nut with the spanner, swap the old washer for the new one and reassemble the tap.",
      "url": "https://example.com/tap-washer#step-3"
    }
  ]
}
</script>

Each step has its own anchor in url. Give the matching heading or list item on the page the same id (here step-1, step-2 and step-3) so the link goes to the right place.

The errors you will see, and what each one means

These are the messages the Schema Markup Validator, older Search Console reports and the Schema Debugger give for HowTo, with the cause behind each one.

MessageCauseFix
Missing field "step"The HowTo has a name but no steps, or the steps are under a made-up field such as steps or instructions.Put the steps in a field called step (singular).
Missing field "text" (in "step")A HowToStep has only a name, or its text is in description.Put the full instruction in text on every step.
Either "text" or "itemListElement" should be specifiedA step is empty, or a HowToSection was typed as HowToStep.Give a HowToStep its text; give a HowToSection its itemListElement.
Invalid value in field "totalTime"The duration is written as words, such as "30 minutes" or "1 hour".Use ISO 8601: PT30M, PT1H, PT1H30M, P2D.
Invalid object type for field "estimatedCost"The cost is a bare number, or a MonetaryAmount without a currency.Use a MonetaryAmount with currency (such as GBP) and value.
Invalid URL in field "image"A relative path, a placeholder, or an image that returns an error or is blocked by robots.txt.Use a full https address to an image that loads for anyone.
The property steps is not recognised by the schemaA misspelt or invented property name.Rename it to the schema.org property, here step.
Unparsable structured data / Parsing errorThe JSON is broken: a trailing comma, a curly quote, an unescaped quote or a raw line break.See the parsing section below.
Duplicate HowToTwo HowTo blocks on one page, often a tutorial block and a schema plugin both adding one.Keep one source and switch the other off.

Durations, costs, supplies and tools

HowTo carries more typed values than most schema types, and each one has a format that validators check strictly.

Durations

totalTime, prepTime and performTime take an ISO 8601 duration. It starts with P (period); a T separates days from hours, minutes and seconds.

You meanWriteCommon mistake
20 minutesPT20MP20M means 20 months, not minutes
1 hour 15 minutesPT1H15MPT1.25H or 1:15
90 secondsPT90SPT1.5M
2 daysP2DPT48H is valid but harder to read
1 day 4 hoursP1DT4HP1D4H without the T
โš ๏ธ P20M without the T is the most common HowTo mistake we see. It is valid ISO 8601, so some validators pass it, but it says the task takes twenty months. Always put the T before hours, minutes and seconds.

Cost

estimatedCost is either plain text or a MonetaryAmount. Use MonetaryAmount with a three-letter currency code and a numeric value written as a string or number without the currency sign. For a range, use minValue and maxValue in place of value.

Supplies and tools

A HowToSupply is used up by the task (a washer, paint, screws). A HowToTool is needed but kept (a spanner, a brush, a drill). Both need a name, and both take an array when there is more than one. Plain strings are allowed by schema.org, but typed objects are clearer and let you add a requiredQuantity to a supply.

Fixing JSON that cannot be read

An unparsable block is the worst HowTo error: the whole script is ignored, including every other type in the same block, such as your Organization, BreadcrumbList or Article. HowTo blocks are long, and long blocks break more often. Four mistakes cause almost all of them.

1. A comma after the last step

    { "@type": "HowToStep", "text": "Reassemble the tap." },
  ]      <-- the comma before ] breaks the JSON

JSON does not allow a comma after the last item in a list or the last field in an object. It happens when a step is deleted by hand and the comma before it is left behind.

2. Curly quotes

Editors and word processors turn " into โ€œ and โ€. JSON only accepts straight double quotes around names and values. Curly quotes are fine inside the text of a step, but never as the quotes that open or close a value.

3. A double quote inside a step

"text": "Set the dial to "Eco" and press start."          <-- broken
"text": "Set the dial to \"Eco\" and press start."        <-- fixed

Instructions often quote a button label or a setting name, so this is more common in HowTo than in any other type.

4. A line break inside the text

A raw line break inside a value ends the string. Keep each step's text on one line. If a step has several parts, split it into separate steps, or use a HowToStep with an itemListElement of HowToDirection items.

โš ๏ธ When the steps come from a CMS field, fix the template, not the one page. Output the whole block with json_encode() in PHP or JSON.stringify() in JavaScript. Both escape quotes and line breaks for you, so a quote typed into a step can never break the block again.

Making the steps match the page

Structured data must describe what the reader can see. Steps in the markup that are not on the page, are in a different order, or say something different from the visible instructions are treated as misleading markup, which can lead to a manual action that removes rich results from the whole site.

๐Ÿ’ก The Schema Debugger compares the step text in the markup with the page text and lists steps that are in one but not the other, which catches the most common mismatch: a step edited on the page but not in the markup.

The fix, step by step

Step 1

Find every HowTo block on the page

Open the page source (Ctrl+U, or Cmd+Option+U on a Mac) and search for HowTo. Note each match and where it comes from: an SEO plugin (Yoast, Rank Math, All in One SEO), a how-to block from the editor, the theme, a recipe plugin that also outputs HowTo, or code added by hand. The Schema Debugger lists every block with its source position, which is quicker on long pages.

Step 2

Fix JSON that cannot be read

Paste the block into the Schema Markup Validator. A parsing error gives the line and column; the fault is almost always one of the four in the parsing section: a trailing comma, a curly quote, an unescaped quote or a raw line break. Fix it at the source, in the template or the plugin field, not in a saved copy of the HTML, then paste the block in again until it reads cleanly.

Step 3

Add the required fields

Check the HowTo has name and step, and that every HowToStep has text holding the full instruction. If a guide has more than about ten steps with headings between them, group them into HowToSection items, each with a name and an itemListElement of steps. Rename invented fields such as steps or instructions to the schema.org property step. Then re-run the validator to confirm no step is empty.

Step 4

Correct durations, costs and images

Rewrite every duration as ISO 8601 with the T in place, such as PT30M or PT1H15M. Give estimatedCost a MonetaryAmount with a currency code and a value. Open each image address in a private browser window to confirm it loads without a login, and replace relative paths with full https addresses. Check that each step image shows that step, not the finished product.

Step 5

Make the steps match the page and keep one block

Read the visible steps and the markup side by side and bring them into line: the same steps, in the same order, with the same wording. If two sources output HowTo, keep the one that is easiest to keep in line with the page and switch the other off. A how-to block in Yoast or Rank Math adds its own markup, so do not also add HowTo by hand.

Step 6

Validate and request a recrawl

Test the live URL in the Schema Markup Validator and re-run the Schema Debugger; the Rich Results Test no longer checks HowTo, so do not rely on it. When both are clean, use URL Inspection in Search Console and choose Request indexing so the corrected markup is read on the next crawl. Re-check the page after a plugin or theme update, which is when duplicate blocks usually return.

Long guides: HowToSection and HowToDirection

A guide with forty steps under five headings reads better, and validates more cleanly, when the markup follows the same structure. HowToSection is a named group of steps; HowToDirection and HowToTip split one step into smaller parts.

"step": [
  {
    "@type": "HowToSection",
    "name": "Prepare the wall",
    "itemListElement": [
      { "@type": "HowToStep", "text": "Fill holes with filler and leave it to dry." },
      { "@type": "HowToStep", "text": "Sand the filled areas smooth." }
    ]
  },
  {
    "@type": "HowToSection",
    "name": "Paint",
    "itemListElement": [
      { "@type": "HowToStep", "text": "Cut in around the edges with a brush." },
      {
        "@type": "HowToStep",
        "itemListElement": [
          { "@type": "HowToDirection", "text": "Roll the first coat in a W pattern." },
          { "@type": "HowToTip", "text": "Keep a wet edge to avoid lap marks." }
        ]
      }
    ]
  }
]

Stopping it from coming back

Questions and answers

1. Why did my HowTo rich results disappear from Google?

Google limited HowTo rich results to desktop searches in August 2023 and stopped showing them altogether in September 2023, for every site. Nothing on your page caused the change, and fixing or rewriting the markup will not bring the step-by-step results back in Google Search. The markup is still valid schema.org, so keep it clean for other search engines, AI answer engines and your own audit reports, and judge it with the Schema Markup Validator.

2. Is HowTo markup still worth adding?

Yes, on pages that really are step-by-step instructions. HowTo markup is still valid schema.org, it is read by other search engines and by AI answer engines, and it states the order of the steps, the time and the tools without any guesswork, which makes the page easier to quote as a set of instructions. Keep it accurate and matching the visible steps. Do not add it to pages that are not instructions just to get markup on them.

3. Why does the Rich Results Test say no items were detected?

Google removed HowTo from the Rich Results Test when it retired the HowTo rich result in 2023. The test no longer looks for HowTo at all, so it reports that no rich result items were detected even when the markup is perfectly correct. That message is not an error. Test HowTo markup with the Schema Markup Validator at validator.schema.org and with the Schema Debugger instead, both of which still read and check every HowTo field.

4. What does "Missing field text" in a step mean?

It means one of your HowToStep items has no instruction in its text field. It usually comes from an empty step box in a plugin, or from the instruction being placed in name or description instead of text. Open the step, put the full instruction the reader sees on the page into text, or delete the step if it is empty. A step that uses itemListElement with HowToDirection items is the one case where text can be left out.

5. How do I write 45 minutes in totalTime?

Write PT45M. The P starts the duration, the T marks the start of the time part, and M after the T means minutes. The T matters: without it, P45M means 45 months, which some validators accept without warning. For longer tasks combine the parts, such as PT1H30M for an hour and a half or P1DT2H for a day and two hours. Words such as 45 minutes or clock times such as 0:45 are invalid.

6. Should a recipe use HowTo or Recipe?

Use Recipe. It has its own fields for ingredients, preparation and cooking times, yield, nutrition and ratings, and it is the type Google still uses for recipe rich results, which HowTo no longer gets. A recipe marked up as HowTo loses all of that. Do not add HowTo to a recipe page as well as Recipe; the recipe instructions already use HowToStep items inside the Recipe, so a second HowTo block only creates a duplicate.

7. How long before the fix is picked up?

After you request indexing with URL Inspection in Search Console, Google usually recrawls the page within a few days, and other search engines follow on their own schedule. Because HowTo no longer has a Search Console enhancement report, there is no report to watch change. Check the live page with the Schema Markup Validator and the Schema Debugger straight after the fix, and re-run them after the next crawl to confirm the corrected markup is being served.

Check your HowTo markup now

The Schema Debugger lists every structured data block on a page, shows each missing or invalid field, checks durations and image addresses, and compares your HowTo steps with the visible instructions.

Open Schema Debugger Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All Schema Debugger Fixes  ·  Schema Debugger Guide  ·  FAQPage Schema Errors  ·  Recipe Schema Errors  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.