How-To Schema Generator - Create JSON-LD Structured Data for Google
Generate valid HowTo schema markup (JSON-LD) for Google rich results. Add steps, images, tools, supplies, and export production-ready structured data.
Supplies & Tools (optional)
Steps * (minimum 2)
About
Google uses HowTo structured data to display step-by-step rich results directly in search. A missing or malformed HowToStep object causes silent validation failures. Google's Rich Results Test will pass a technically valid schema that still never triggers a rich snippet because the totalTime field uses the wrong ISO 8601 duration format, or the estimatedCost block omits the required @type: MonetaryAmount wrapper. Manual JSON-LD authoring invites bracket-matching errors. One unclosed brace invalidates the entire block and your page loses its rich result with no warning in Search Console.
This generator enforces the Schema.org HowTo specification. It produces @type: HowTo objects with properly nested HowToStep, HowToTool, and HowToSupply arrays. Time values convert to ISO 8601 durations (PT1H30M). Cost values wrap in MonetaryAmount with the correct currency code. Limitations: this tool generates client-side JSON-LD only. It cannot guarantee Google will display a rich result. Google's rendering decision depends on page authority, content quality, and internal ranking signals beyond schema correctness.
Formulas
The HowTo schema follows a strict nested object structure:
HowTo → HowToStep[1..n] → HowToDirection
ISO 8601 duration conversion:
totalTime = PT + floor(minutes60) ⋅ H + (minutes mod 60) ⋅ M
Where minutes = total estimated time in minutes entered by the user. For example, 150 min → PT2H30M.
Step position assignment: positioni = i + 1, where i ∈ [0, n − 1] is the zero-based array index.
URL validation pattern: match(^https?:\/\/.+) → TRUE | FALSE
Reference Data
| Property | Type | Required | Description |
|---|---|---|---|
| @type | Text | Yes | Must be HowTo |
| name | Text | Yes | Title of the how-to guide |
| description | Text | Recommended | Summary of what the how-to achieves |
| image | URL | Recommended | Image representing the completed how-to |
| totalTime | Duration | Recommended | ISO 8601 format, e.g. PT2H30M |
| estimatedCost | MonetaryAmount | Optional | Requires currency (ISO 4217) and value |
| supply | HowToSupply[] | Optional | Materials consumed during the process |
| tool | HowToTool[] | Optional | Instruments used but not consumed |
| step | HowToStep[] | Yes | Ordered array of steps, minimum 2 |
| step.name | Text | Yes | Short title for the step |
| step.text | Text | Yes | Full instruction for the step |
| step.image | URL | Recommended | Image illustrating the step |
| step.url | URL | Optional | Anchor link to the step on the page (e.g. #step1) |
| @context | URL | Yes | Must be https://schema.org |
| currency | Text | If cost used | ISO 4217 code: USD, EUR, GBP |
| value | Number | If cost used | Numeric cost value, e.g. 25.00 |
| position | Integer | Auto | Auto-generated step index starting at 1 |
| @type (step) | Text | Yes | Must be HowToStep for each step |
| @type (direction) | Text | Yes | HowToDirection wraps step text |