/content directory. Every page, category, and product follows a strict content model. Understanding that model lets you place new content correctly, wire up navigation, and choose the right layout from the start.
Content types
Every article has acontentType frontmatter field that declares what kind of content it is. The site uses this value to filter articles on product guides pages (when using layout: product-guides) and to apply the right structural expectations during linting.
One of
get-started, concepts, how-tos, reference, tutorials, rai, landing, homepage, or other.get-started
Introductory content for people who are new to a feature. Orientates the reader and links to next steps.
concepts
Explains background knowledge — what something is and why it works the way it does. No step-by-step procedures.
how-tos
Task-based articles that walk the reader through completing a specific goal.
reference
Structured factual content: API parameters, configuration options, syntax tables. Designed to be scanned, not read linearly.
tutorials
End-to-end learning exercises with a concrete outcome. Longer than how-tos and include explanatory context.
rai
Responsible AI content. Only used for files that live in directories with
responsible-use in the name.landing
Product landing pages — only applies to
content/<product>/index.md files.Index pages
Every product, category, and map topic has anindex.md file that acts as the landing page for that section. The index.md must declare a children array that lists every page directly nested under it.
A typical category index.md looks like this:
children are relative to the current index.md. They point to either a subdirectory (which must itself have an index.md) or a .md file (written without the extension).
Product landing pages
A product landing page (layout: product-landing) is the main entry point for a top-level GitHub product such as Actions or Codespaces. In addition to children, these pages support featuredLinks to highlight key articles, and optionally changelog to pull recent entries from the GitHub Changelog.
featuredLinks sections
| Key | Purpose |
|---|---|
gettingStarted | Links shown in the “Get started” column |
startHere | Links shown in the “Start here” column |
guideCards | Links displayed as guide cards |
popular | Links shown under the “Popular” heading (or a custom popularHeading) |
videos | Array of { title, href } objects for a video section |
The homepage
The homepage (content/index.md) is the only file that uses childGroups. Where a normal index page lists children as a flat array, the homepage groups them into named sections displayed in the main content area.
childGroups.children array must also appear in the top-level children array.
Product guides pages
A product guides page (for example, the Actions guides page) useslayout: product-guides and renders a filterable list of articles. You can populate it two ways:
learningTracks— references named learning tracks defined indata/learning-tracks/*.yml. The featured track is configured in that YAML file.includeGuides— an explicit list of article paths. Each article must have acontentTypein its frontmatter for the filter UI to work.
Journey pages
Journey landing pages (layout: journey-landing) present a set of sequential learning paths. Each path is a journeyTracks entry with an id, a title, an optional description, and an ordered guides array.
alternativeNextStep field renders a branch prompt beneath a step — useful when readers might want to skip ahead or take a different path through the material. It supports Liquid variables and [AUTOTITLE] links.
How the site discovers pages
The site build does not crawl the filesystem. It walks thechildren graph starting from content/index.md. Every reachable path becomes a valid URL; everything else does not exist from the site’s perspective.
This means:
- Adding a new article requires both creating the
.mdfile and listing it in the parentindex.md. - Renaming or moving a file requires updating the
childrenentry and adding aredirect_fromentry on the new page. - Deleting a file requires removing it from
children(and adding a redirect if the URL should remain accessible).