HowTo JSON-LD earns its keep on true procedural pages. Here is the field list, a working example, and when to skip it.
HowTo schema looks tempting: numbered steps, tools, time required — the kind of structure answer engines already like in plain HTML. The mistake is wrapping every blog post in HowTo JSON-LD because a plugin offered a checkbox.
HowTo markup earns its keep on true procedural pages: install guides, configuration walkthroughs, "replace the filter" instructions. It is a poor fit for opinion essays, product pitches, and anything without a real sequence of actions.
What HowTo schema is for
HowTo describes a process with ordered steps. Parsers can extract step names and text more reliably when you mark them up — but only if the page is genuinely a how-to.
If your "steps" are sales stages ("Book a demo", "Watch us dazzle you"), use ordinary content. Do not launder marketing into HowTo.
When it is worth the effort
| Page type | Worth HowTo schema? | Why |
|---|---|---|
| Install / setup docs | Yes | Clear steps, tools, outcomes |
| Troubleshooting runbook | Often | Ordered actions; keep symptoms in HTML too |
| Recipe-style ops guide | Yes | Natural fit for steps + tools |
| Thought-leadership blog | No | Not a procedure |
| Pricing explainer | No | Use Product/Offer clarity instead |
| "How we think about X" | No | Essay, not HowTo |
Similarweb Gen AI Landscape 2025 (US desktop, Sep 2025) noted AI referral sessions that were longer and deeper than typical Google sessions on average (about 15 minutes and ~12 pages for ChatGPT referrals versus about 8 minutes and ~9 pages for Google). Procedural docs are the kind of pages people — and agents fetching for them — actually traverse. Schema is optional polish on top of solid steps.
Fields that matter
Focus on a small set. You do not need every schema.org property.
| Field | Use when | Notes |
|---|---|---|
name | Always | Title of the procedure |
description | Always | One-paragraph outcome |
step | Always | List of HowToStep (or HowToSection for grouped steps) |
HowToStep.name | Always | Short step label |
HowToStep.text | Always | Instruction matching visible copy |
totalTime | If honest | ISO 8601 duration (PT20M) |
tool / supply | If real | Software, accounts, hardware |
image | Optional | Only if the image teaches the step |
Working example
Northstar Analytics publishes "Connect Snowflake to Northstar":
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "Connect Snowflake to Northstar Analytics",
"description": "Create a read-only Snowflake role and add connection details in Northstar.",
"totalTime": "PT15M",
"tool": [
{"@type": "HowToTool", "name": "Snowflake account with ACCOUNTADMIN access"},
{"@type": "HowToTool", "name": "Northstar Analytics workspace admin"}
],
"step": [
{
"@type": "HowToStep",
"name": "Create a read-only role",
"text": "In Snowflake, create a role that can read the schemas you want to analyze. Do not grant write privileges."
},
{
"@type": "HowToStep",
"name": "Generate a key pair",
"text": "Create a key-pair for the service user and store the private key in your secret manager."
},
{
"@type": "HowToStep",
"name": "Add the connection in Northstar",
"text": "Open Settings → Sources → Snowflake, paste account details, and test the connection."
}
]
}
Mirror those steps in visible HTML with the same names and instructions.
How to implement (step by step)
- Confirm the page is a procedure with at least three real actions.
- Rewrite the HTML so steps are obvious (
ol/h2per step beats a wall of text). - Add JSON-LD
HowTowithname,description, andstep. - Keep
textfaithful to the page — no "bonus" claims only in schema. - Validate JSON; fix trailing commas and bad types.
- Test a no-JS fetch to ensure the script is in the initial response if your stack SSR/prerenders.
- Skip
aggregateRatingcosplay on HowTo. Fake ratings help nobody.
When to skip HowTo schema
- The article is explanatory ("how CDPs differ from warehouses") without a user procedure
- Steps vary wildly by plan/region and you cannot state one honest path
- The content is gated behind login for the actual instructions
- You are only chasing rich results that may not show for your site type anyway
In those cases, invest in clearer headings and a table. Answer engines can use well-structured HTML without HowTo JSON-LD. Pair procedural clarity with entity clarity via Organization schema on the site overall.
Mistakes that waste the work
- Marking a whole category hub as one HowTo
- Steps that say "click here" without naming the control
totalTime:PT5Mon a three-hour migration guide- Duplicating HowTo on twenty near-identical affiliate pages
- Expecting HowTo to compensate for blocked AI crawlers
How to verify
- Validator clean for
HowTo/HowToStep. - Side-by-side: step 2 in HTML equals step 2 in JSON-LD.
- Raw fetch includes the markup (not only after client render).
- Re-scan after deploy if you track schema findings in an AEO audit (how to run an AEO audit).
Honest ceiling
HowTo schema will not put you in every assistant answer about your category. It can make a genuine guide easier to extract. If the guide is weak, schema just labels the weakness efficiently.
Ship the HTML steps first. Add JSON-LD second. Leave the checkbox plugins alone unless they output markup you would be willing to defend in a review.
