Why structure matters more than you think
A Markdown heading is more than larger text. It is a structural flag. When you put ## Education in a resume, you are telling the renderer (and any AI tool reading the file) that the next block of content belongs to the Education section. That single piece of information is the difference between a chatbot answering "where did you go to school?" with a clean one-line answer versus quoting your entire bio back at you.
Lists do the same thing for groups of related items. A bullet list of five skills says these five things belong together. A paragraph that reads "My skills include Python, Excel, SQL, Tableau, and project management" says the same thing semantically, but a lot less cleanly. A Workday or Greenhouse ATS scanner parsing the bulleted version picks out every skill individually. The prose version, it splits wrong roughly half the time.
Headings: h1 through h6
Markdown gives you six levels of heading. In practice, most documents only need three. The levels are cumulative — H2 is a subsection of H1, H3 is a subsection of H2, and so on. Skipping levels (jumping from H2 straight to H4) is technically allowed but bad practice. Screen readers and AI tools use the heading tree to understand document structure; a broken tree breaks comprehension.
# Jane Chen ## Experience ### Senior Product Manager — Acme Corp 2022 – Present ### Product Manager — Widget Inc 2019 – 2022 ## Education ### MBA, Stanford GSB 2019
Jane Chen
Experience
Senior Product Manager — Acme Corp
2022 – Present
Product Manager — Widget Inc
2019 – 2022
Education
MBA, Stanford GSB
2019
That is a resume in Markdown. One H1 (the person's name — the document title), H2 for the two major sections, H3 for individual positions. Any AI tool, applicant tracking system, or search index can parse that structure and pull out exactly what it needs.
When to use which level
- H1 — the title of the document. Use it once, at the top. In most static site generators and CMS platforms, the page title becomes the H1 automatically, so you often do not type it yourself.
- H2 — major sections. On a resume: Experience, Education, Skills. On a meeting doc: Attendees, Agenda, Decisions, Action items. On an article: the top-level sections someone would jump between.
- H3 — subsections inside an H2. Individual jobs under Experience. Individual topics under Agenda.
- H4 and deeper — rarely needed. If you are four levels deep, your document probably wants to be two documents.
The pound-sign rule
One to six pound signs, then a space, then the heading text. No trailing punctuation in the source. The space matters — #Heading with no space is just a literal pound sign followed by text.
# Works ## Works ## Also works ###Does not work
Works
Works
Also works
###Does not work
Unordered (bulleted) lists
A dash, asterisk, or plus sign at the start of a line, followed by a space, makes a bullet. Dashes are the standard — easiest to type, most common in examples, universally supported. Pick dashes and forget the other two exist.
- Milk - Eggs - Bread - Apples
- Milk
- Eggs
- Bread
- Apples
Nesting bullets
Indent a line by two spaces under the parent bullet, and it becomes a sub-bullet. Every extra two spaces goes another level deeper. Three levels is the practical maximum for readability.
- Groceries
- Dairy
- Milk
- Yogurt
- Produce
- Apples
- Kale
- Hardware
- Screwdriver
- Drill bits- Groceries
- Dairy
- Milk
- Yogurt
- Produce
- Apples
- Kale
- Dairy
- Hardware
- Screwdriver
- Drill bits
The most common beginner mistake: inconsistent indentation. Mix two-space and four-space nesting in the same file and some of your bullets will not nest in some renderers. Pick one indent width and stick to it for the whole document.
Ordered (numbered) lists
A number, a period, and a space. The renderer does not care what numbers you type — it will count from the first number and go up from there. This looks weird the first time, but it saves you from renumbering by hand every time you insert or delete an item.
1. Preheat oven to 400°F 2. Pat the chicken dry 3. Season generously with salt 4. Roast for 45 minutes 5. Rest 10 minutes before carving
- Preheat oven to 400°F
- Pat the chicken dry
- Season generously with salt
- Roast for 45 minutes
- Rest 10 minutes before carving
The "lazy" version of the same list, typing 1. for every item, renders identically:
1. Preheat oven to 400°F 1. Pat the chicken dry 1. Season generously with salt 1. Roast for 45 minutes 1. Rest 10 minutes before carving
- Preheat oven to 400°F
- Pat the chicken dry
- Season generously with salt
- Roast for 45 minutes
- Rest 10 minutes before carving
If you want a list to start from a number other than 1, use that number on the first line. 5. at the top produces 5, 6, 7, 8.
Mixing numbered and bulleted lists
You can nest one type inside the other. Numbered steps with unordered sub-points, or the reverse, are both fine.
1. Gather ingredients - Flour, 500g - Salt, 10g - Yeast, 7g - Water, 350ml 2. Mix and knead 3. Rest for 1 hour - Dough should double in size - If it does not, your yeast is dead
- Gather ingredients
- Flour, 500g
- Salt, 10g
- Yeast, 7g
- Water, 350ml
- Mix and knead
- Rest for 1 hour
- Dough should double in size
- If it does not, your yeast is dead
Task lists (checkboxes)
A dash, a space, square brackets, a space, and the item text. [ ] is unchecked, [x] is checked. Lowercase x only.
- [x] Draft proposal - [x] Send to legal - [ ] Incorporate feedback - [ ] Final review with CEO - [ ] Submit to board
- Draft proposal
- Send to legal
- Incorporate feedback
- Final review with CEO
- Submit to board
Task lists are a GitHub invention but they render in Obsidian, Notion, Slack, Linear, Jira, VS Code previews, and every major AI chat tool. If you are dumping a to-do list into ChatGPT and asking it to sort by priority, use task-list syntax — the model will preserve the checked/unchecked state in its response.
Real example: meeting notes
Here is what a week's worth of running meeting notes looks like. One H1 (the project), H2 for each meeting date, H3 for topics inside each meeting, then lists and task lists for the content.
# Q4 Launch Planning ## Oct 14, 2025 ### Attendees - Jane Chen (PM) - Marcus Obi (Eng Lead) - Priya Shah (Design) ### Decisions 1. Ship core feature on Oct 28 2. Hold marketing launch for Nov 4 3. Beta cohort capped at 500 users ### Action items - [ ] Marcus: lock final API shape by Oct 18 - [ ] Priya: share updated onboarding mocks - [x] Jane: draft launch comms ## Oct 21, 2025 ### Decisions 1. Push onboarding to v1.1 — not blocking launch ### Action items - [ ] Jane: update timeline in Linear - [ ] Marcus: confirm staging is stable
Q4 Launch Planning
Oct 14, 2025
Attendees
- Jane Chen (PM)
- Marcus Obi (Eng Lead)
- Priya Shah (Design)
Decisions
- Ship core feature on Oct 28
- Hold marketing launch for Nov 4
- Beta cohort capped at 500 users
Action items
- Marcus: lock final API shape by Oct 18
- Priya: share updated onboarding mocks
- Jane: draft launch comms
Oct 21, 2025
Decisions
- Push onboarding to v1.1 — not blocking launch
Action items
- Jane: update timeline in Linear
- Marcus: confirm staging is stable
Paste that into Claude and ask "what are my open action items?" The answer comes back correctly because the structure told the model which bullets are tasks, which are checked, and who owns them. Try doing that with a PDF of the same notes — you will get a worse answer every time.
Common pitfalls
- Missing blank line before a list. Most renderers require a blank line between a paragraph and the start of a list. Without it, the list runs into the paragraph as plain text.
- Tabs vs spaces. Some renderers treat a tab as four spaces; others treat it as eight. Use spaces for indentation and you will never be surprised.
- Inconsistent bullet markers. Mixing
-,*, and+in the same list will not break anything — but it looks sloppy when someone edits the raw file. Pick one. - Multi-paragraph list items with no indent. If you want a paragraph inside a bullet, the second paragraph must be indented the same amount as the text of the first line.
Try it
Open the free Markdown editor and type a quick outline — a heading, a couple of bullets, a nested list. Watch the preview update as you type. Or convert an existing Word doc with the Word to Markdown converter and see how your headings translate. For deeper context on why all of this structure matters for AI tools, the blog post on why Markdown works best for AI walks through the mechanics.