Black Friday: 30% off all plugins from 24 Nov · Join the list for early access →

Long articles, guides, recipes and documentation pages are easier to read when visitors see what is inside and can jump straight to the part they need. A table of contents does exactly that. Here is how to add one to WordPress, and how to make it genuinely useful.

Why a table of contents helps

Which headings to include

For most blogs, H2 headings are enough: they are the main sections. Include H3 only for long guides where sub-sections matter. Leave out headings that are not real sections (a “Share this article” title, a FAQ question list) by excluding them.

Where to place it

The best place is right after the introduction, before the first section. Readers first understand what the article is about, then see the plan. At the very top, the table pushes the introduction down; at the bottom, nobody sees it.

Details that make a difference

Manual or automatic?

You can build a table of contents by hand with anchor links, but it must be updated every time you edit headings. An automatic plugin reads your headings, adds anchors and keeps the list in sync.

Setup with Tocly

  1. Install Tocly.
  2. In Settings › Table of contents, choose the post types, heading levels and minimum number of headings.
  3. Set the scroll offset to the height of your sticky header.
  4. Enable the reading progress bar if you like it.
  5. Use the shortcode on pages where you want the table in a specific place.

Scroll the live demo to see the active section and progress bar. Tocly also runs on every guide of this blog.

Frequently asked questions

Does a table of contents improve SEO?

It improves structure and navigation. Search engines may show section links in results, but they decide when.

Should every post have a table of contents?

Only posts long enough to have several sections. Set a minimum number of headings.

Will it work with my page builder?

Automatic insertion works on standard content; the shortcode works in any builder.

Leave a Reply

Your email address will not be published. Required fields are marked *