You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Every one of those 17 pages has zero numbered list items in its body, because they're layout: template pages — the reader-visible instructions are generated by layouts/templates/template.html from frontmatter (template.prefix, template.languages, cloud), not written as prose in the markdown. So the extractor is scanning a body that has nothing to find, and:
{{/* Add steps to schema if we found any */}}
{{ if $steps }}
{{ $schema = merge $schema (dict "step" $steps) }}
{{ end }}
...simply never adds the key. The emitted entity still carries name, url, description, totalTime, and auto-detected tool entries — everything except the one property that makes a HowTo a HowTo.
There's already a precedent for the fix
layouts/partials/schema/collectors/main-entity.html hit this exact failure on the auto-detection path and guarded against it. Tutorial hub pages route to collection-entity.html instead, with this comment:
Emitting HowTo here produced an empty/invalid step array with no real steps to describe.
The explicitschema_type: howto branch has no equivalent guard — it dispatches to the HowTo collector unconditionally:
So the lesson was learned on one path and not the other.
Possible directions
Guard the explicit path the way auto-detection already does — if step extraction yields nothing, emit a different entity type rather than a stepless HowTo. Most consistent with the existing fix.
Teach the collector about template pages — derive steps from the same frontmatter the template layout renders from, so these pages get real, accurate steps. Best outcome for the pages themselves, more work.
Change the 17 pages' schema_type if HowTo isn't the right entity for a template gallery page in the first place.
Option 1 or 2 seems right depending on whether we want these pages to carry HowTo at all.
Worth confirming what consumes HowTo markup for us today before picking a direction — Google's treatment of HowTo rich results has changed over time, so the value may be mostly for LLM/agent crawlers rather than search rich results. That affects whether option 2 is worth the effort or option 1 is sufficient.
Seventeen pages declare
schema_type: howtoand emit aHowToentity with nostepproperty at all — a how-to that describes no steps.Affected pages
All 17 are
layout: templatepages undercontent/templates/:The 18th page carrying
schema_type: howto—content/what-is/mcp-for-infrastructure-as-code.md— is fine and does emit steps.Why
layouts/partials/schema/collectors/howto-entity.htmlextracts steps by scanning.RawContentfor numbered-list items:Every one of those 17 pages has zero numbered list items in its body, because they're
layout: templatepages — the reader-visible instructions are generated bylayouts/templates/template.htmlfrom frontmatter (template.prefix,template.languages,cloud), not written as prose in the markdown. So the extractor is scanning a body that has nothing to find, and:...simply never adds the key. The emitted entity still carries
name,url,description,totalTime, and auto-detectedtoolentries — everything except the one property that makes aHowToaHowTo.There's already a precedent for the fix
layouts/partials/schema/collectors/main-entity.htmlhit this exact failure on the auto-detection path and guarded against it. Tutorial hub pages route tocollection-entity.htmlinstead, with this comment:The explicit
schema_type: howtobranch has no equivalent guard — it dispatches to the HowTo collector unconditionally:So the lesson was learned on one path and not the other.
Possible directions
HowTo. Most consistent with the existing fix.schema_typeifHowToisn't the right entity for a template gallery page in the first place.Option 1 or 2 seems right depending on whether we want these pages to carry
HowToat all.Notes
what-ispage).HowTomarkup for us today before picking a direction — Google's treatment of HowTo rich results has changed over time, so the value may be mostly for LLM/agent crawlers rather than search rich results. That affects whether option 2 is worth the effort or option 1 is sufficient.