Your tutorial pages have emitted "@type": "HowTo" JSON-LD for years. The Schema Markup Validator at validator.schema.org still parses it without errors, so it looks healthy. But Search Console stopped reporting HowTo impressions long ago, the step-by-step rich result no longer appears in any SERP, and Google’s own Rich Results Test no longer even detects the type.
Fastest fix: stop emitting HowTo and switch those pages to Article (or TechArticle). Google retired HowTo rich results in 2023 — mobile in August 2023, desktop on September 13, 2023 — and removed it from the Rich Results Test and Search Console reporting shortly after. As of June 2026 the markup produces zero result enhancement on any surface. It will not penalize you on its own, but a HowTo block that disagrees with the visible page is dead weight worth removing.
One tool trap drives most of the confusion here, so get it straight before you debug:
| Tool | What it tells you | Does it still show HowTo? |
|---|---|---|
Schema Markup Validator (validator.schema.org) | Whether your markup is valid schema.org vocabulary | Yes — HowTo is still a valid schema.org type, so it “passes” |
Google Rich Results Test (search.google.com/test/rich-results) | Whether the markup is eligible for a Google rich result | No — HowTo is no longer a supported type, so it reports nothing |
If your “proof it works” is a green check from validator.schema.org, that proves syntax only. Google stopped rendering HowTo years ago.
Common causes
Ordered by how often each appears in the wild.
1. Boilerplate template still wraps every tutorial in HowTo
A previous content team added "@type": "HowTo" to every article with an ordered list, and nobody touched the template since 2022. The markup persists even though Google no longer rewards it.
How to spot it: View source on any tutorial. If you see "@type": "HowTo" with a "step": [...] array, the deprecated schema is live.
2. HowTo steps no longer match the visible page
The page was rewritten as a narrative article, but the JSON-LD still lists the old steps. The Schema Markup Validator passes (steps are well-formed), but the markup now describes a page that no longer exists.
How to spot it: Compare the name of each HowToStep in the JSON-LD against the visible H2/H3 headings on the page. Mismatches are common after content edits.
3. CMS plugin auto-generates HowTo from any ordered list
A WordPress plugin (Yoast, Rank Math, Schema Pro) wraps any <ol> in HowTo automatically. Recipes, listicles, even “5 reasons to…” articles get tagged as HowTo. None of these are real procedural how-tos.
How to spot it: Disable the plugin’s HowTo generator and rebuild. Count how many pages lose the markup — anything above your real tutorial count is bogus.
4. HowTo nested inside Article confuses the parser
The JSON-LD wraps an Article inside a HowTo, or vice versa. A parser may pick one type and ignore the other — often the wrong one — so the Article rich result (byline and date chip) can disappear too.
How to spot it: In the Rich Results Test, check which schema type is “detected.” If it shows nothing or the wrong type while you expected Article, the nesting is the problem.
5. Migrated articles kept HowTo while losing the step structure
After a CMS migration the ordered list collapsed into paragraphs, but the JSON-LD generator kept emitting HowTo steps from a database field nobody updated.
How to spot it: The page has zero visible numbered steps yet the JSON-LD declares a HowTo with 8 steps. Classic stale-data signature.
6. Confusing HowTo with Recipe or Article
For cooking content use Recipe, which still earns a rich result. For instructional articles use Article or TechArticle, which still earn the byline and date treatment. HowTo was its own category and is now gone for everyone.
How to spot it: The page reads like an article (“How I built X”) but is tagged HowTo. It should be Article or TechArticle.
Which bucket are you in
| Symptom | Likely cause | Go to |
|---|---|---|
| Every tutorial emits HowTo | Template / theme boilerplate | Step 2 |
| Only some pages emit it | Per-article flag or plugin rule | Step 1, then Step 3 |
| HowTo steps differ from visible headings | Stale content after a rewrite | Step 4 |
| Listicles and recipes tagged HowTo | Plugin auto-wraps every <ol> | Step 3 |
| Article rich result also vanished | HowTo nested inside Article | Step 2 |
Before you start
- HowTo is fully retired for general results; there is no locale or partner exception still standing as of June 2026. (The “government and health sites only” carve-out announced in August 2023 applied to FAQ rich results, not HowTo — and FAQ itself stopped appearing on May 7, 2026, so do not count on either coming back.)
- Capture a list of URLs currently emitting
"@type": "HowTo"— you need this baseline to measure cleanup. - Check whether HowTo impressions still appear in Search Console under “Search Appearance.” They almost certainly vanished in 2023; if so, the markup is doing nothing for Google.
- Decide your replacement: most tutorial pages should become
ArticleorTechArticlewith a clear H1 and section headings.
Information to collect
- Total count of pages emitting HowTo (use a crawler with structured-data extraction, or
grepthe rendered HTML). - The template, plugin, or generator responsible for emitting the markup.
- Any pages where HowTo steps disagree with the visible H2/H3 list.
- Whether the HowTo is the outermost JSON-LD or nested inside Article.
Step-by-step fix
Ordered by cost: cheapest first.
Step 1: Confirm the markup is live and stale
Pick five tutorial URLs and check the rendered HTML:
for url in /tutorial/setup /tutorial/install /tutorial/deploy /tutorial/cleanup /tutorial/upgrade; do
echo "=== $url ==="
curl -s "https://example.com$url" | grep -A1 '"@type": "HowTo"' | head -5
done
If every URL emits HowTo, the template is the source. If only some do, a per-article flag or a plugin rule is at fault.
Step 2: Remove the HowTo generator from the template
In an Astro / Next / Eleventy template, find the JSON-LD block that emits "@type": "HowTo" and replace it with Article:
// before
const jsonLd = {
"@context": "https://schema.org",
"@type": "HowTo",
"name": article.title,
"step": article.steps.map((s, i) => ({
"@type": "HowToStep",
"position": i + 1,
"name": s.heading,
"text": s.body,
})),
};
// after
const jsonLd = {
"@context": "https://schema.org",
"@type": "Article",
"headline": article.title,
"datePublished": article.publishedAt,
"dateModified": article.modifiedAt ?? article.publishedAt,
"author": { "@type": "Person", "name": article.author },
};
Article is broadly supported and gives you the byline and date treatment that HowTo never actually provided on its own.
Step 3: Disable HowTo in your SEO plugin
- Yoast: the standalone HowTo block was deprecated; remove any
HowToblocks from affected posts and confirm the schema graph no longer carries a HowTo node. - Rank Math: Titles & Meta / per-post Schema tab → delete or change the
HowToschema, or turn off the HowTo schema template. - Schema Pro: delete the HowTo schema rule that targets your tutorial template.
After saving, view source on a representative page and confirm the HowTo block is gone. Plugins differ by version, so verify on the rendered page rather than trusting the toggle.
Step 4: Backfill an Article schema where appropriate
For pages that genuinely document a procedure, switch to Article or TechArticle:
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "Deploy a Static Site to Cloudflare Pages",
"datePublished": "2026-01-12",
"dateModified": "2026-05-10",
"author": { "@type": "Person", "name": "Jane Lee" },
"publisher": {
"@type": "Organization",
"name": "Example Inc",
"logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" }
},
"mainEntityOfPage": "https://example.com/tutorial/deploy-cloudflare"
}
Step 5: Re-validate every formerly-HowTo URL
Run a fresh crawl. The structured-data extractor should now find Article only, with no HowTo. Then spot-check a few URLs in Google’s Rich Results Test — it should detect Article and say nothing about HowTo. Submit a few representative URLs through URL Inspection → Request indexing so Google re-fetches them.
Step 6: Watch Search Console settle
Any residual HowTo reporting was already removed by Google in 2023, so you will not see a HowTo “Enhancement” report disappear. What you are watching for is the Article / breadcrumb appearance staying healthy and no new structured-data errors appearing on the re-crawled pages. If a HowTo block stubbornly reappears in your crawl, a cache or CDN layer is serving stale HTML — purge it and re-test.
How to confirm it’s fixed
- View source on five tutorial pages shows
Article(orTechArticle) and zeroHowTo. - Google’s Rich Results Test detects Article on those pages and lists no HowTo (it cannot — HowTo is unsupported).
- A site crawl with structured-data extraction returns zero pages carrying
"@type": "HowTo"(and zeroitemtype="https://schema.org/HowTo"microdata). - Search Console shows no new structured-data errors on the re-crawled URLs over the following weeks.
Long-term prevention
- Keep a “schema registry” in your repo: one file lists each
@typeyour site emits, its purpose, and the template that owns it. - Subscribe to the Google Search Central blog and review structured-data deprecations quarterly. FAQ rich results were the most recent casualty (gone since May 7, 2026), and Practice Problem was removed in January 2026 — the list keeps shrinking.
- Require structured-data changes to ship as code PRs reviewed by SEO and engineering, not as a CMS plugin toggle that one person flips.
- Add a weekly CI check that greps rendered HTML for deprecated schema types you have flagged.
- For new content types, default to
Articleand add a specialized schema only when Google documents a live rich-result enhancement for it.
Common pitfalls
- Treating a green check from
validator.schema.orgas proof the result works. That tool only validates schema.org vocabulary; Google’s Rich Results Test is the one that tells you about eligibility, and it stopped detecting HowTo in 2023. - Replacing HowTo with
Articlebut forgettingauthor,datePublished, andpublisher— those are the fields that actually drive the byline and date treatment. - Disabling the plugin’s HowTo toggle on staging only, then forgetting production has its own settings.
- Adding
Recipeschema to non-recipe content because “it still gets rich results” — that violates Google’s content guidelines and risks a manual action. - Removing HowTo from the JSON-LD but leaving microdata
itemtype="https://schema.org/HowTo"attributes in the HTML. A parser will still read those.
FAQ
Q: Did Google fully kill HowTo, or only some categories?
Fully, for everyone. HowTo rich results stopped appearing on mobile in August 2023 and on desktop on September 13, 2023, and Google then removed HowTo from the Rich Results Test and Search Console reporting. There is no surviving partner or locale exception as of June 2026. Treat HowTo as gone.
Q: My HowTo still validates with no errors. Doesn’t that mean it works?
No. You are almost certainly using the Schema Markup Validator (validator.schema.org), which checks schema.org vocabulary and will happily pass any valid HowTo. Eligibility for a Google rich result is a separate question, answered by the Rich Results Test — and it no longer recognizes HowTo at all.
Q: Will leaving HowTo schema in place harm my rankings?
Not by itself. Google’s own guidance is that unused structured data does not cause problems for Search. The real risk is a HowTo block that contradicts the visible page after a rewrite — that is misleading markup you should remove. Clean deletion is simpler than maintaining markup that does nothing.
Q: What replaces HowTo for step-by-step tutorials?
Article or TechArticle with clear H2/H3 step headings. Include mainEntityOfPage, author, datePublished, and dateModified. These keep the byline and date treatment in SERPs; the numbered-step rich result simply no longer exists.
Q: Should I bother removing HowTo if it isn’t hurting anything?
If the steps match the page, removal is low-priority cleanup. If the steps are stale or the markup was auto-injected onto listicles and recipes, remove it now — that is the case most likely to generate misleading-markup signals, and it adds bytes to every page for zero benefit.
Related
- Structured Data Became Invalid After a Template Change
- Structured Data Rich Results Warning
- FAQ Schema Invalid
- Article Date and JSON-LD Date Mismatch
- Website JSON-LD Inconsistency
Tags: #SEO #Troubleshooting #Structured data #howto-schema #JSON-LD