diff --git a/README.md b/README.md
index 406ed89301..24f51f2a84 100644
--- a/README.md
+++ b/README.md
@@ -258,6 +258,7 @@ To disable a rule for an entire `.gjs`/`.gts` file, use a regular ESLint file-le
| Name | Description | 💼 | 🔧 | 💡 |
| :--------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------- | :- | :- | :- |
+| [template-heading-level](docs/rules/template-heading-level.md) | enforce heading hierarchy within a template | | | |
| [template-link-href-attributes](docs/rules/template-link-href-attributes.md) | require href attribute on link elements | 📋 | | |
| [template-no-abstract-roles](docs/rules/template-no-abstract-roles.md) | disallow abstract ARIA roles | 📋 | | |
| [template-no-accesskey-attribute](docs/rules/template-no-accesskey-attribute.md) | disallow accesskey attribute | 📋 | 🔧 | |
diff --git a/docs/rules/template-heading-level.md b/docs/rules/template-heading-level.md
new file mode 100644
index 0000000000..212d322b87
--- /dev/null
+++ b/docs/rules/template-heading-level.md
@@ -0,0 +1,110 @@
+# ember/template-heading-level
+
+
+
+This rule codifies a heading-outline **authoring convention**, not a WCAG
+requirement — no WCAG 2.1 Success Criterion prohibits skipped heading
+levels. The convention is widely endorsed by WebAIM, MDN, and the A11y
+Project as a screen-reader-navigation aid. Enforce if your team has
+adopted it; skip otherwise.
+
+**Defaults are tuned for Ember's component-based architecture.** Only the
+one check that is reliably verifiable within a single template file runs
+by default; the two checks that depend on tracking heading state across
+component/route/layout boundaries are opt-in.
+
+## Default on: multiple `
` within the same sectioning root
+
+Finding two `` in one file is a within-file signal regardless of what
+ancestors render. `