Title: UTS Sites Table of Contents
Author: UTS Sites
Published: <strong>August 29, 2026</strong>
Last modified: August 29, 2026

---

Search plugins

![](https://ps.w.org/uts-sites-table-of-contents/assets/banner-772x250.png?rev=3671515)

![](https://ps.w.org/uts-sites-table-of-contents/assets/icon.svg?rev=3671525)

# UTS Sites Table of Contents

 By [UTS Sites](https://profiles.wordpress.org/uts0173/)

[Download](https://downloads.wordpress.org/plugin/uts-sites-table-of-contents.1.13.5.zip)

 * [Details](https://wordpress.org/plugins/uts-sites-table-of-contents/#description)
 * [Reviews](https://wordpress.org/plugins/uts-sites-table-of-contents/#reviews)
 *  [Installation](https://wordpress.org/plugins/uts-sites-table-of-contents/#installation)
 * [Development](https://wordpress.org/plugins/uts-sites-table-of-contents/#developers)

 [Support](https://wordpress.org/support/plugin/uts-sites-table-of-contents/)

## Description

UTS Sites Table of Contents scans your post/page content for headings (H2–H6, configurable)
and builds a Table of Contents automatically — no manual editing needed.

#### SEO features

 * Every heading gets a stable, unique, crawlable anchor `id` — sections become 
   directly linkable and can appear as “jump to” links in search results.
 * The TOC is rendered as real server-side HTML inside the page — no JavaScript 
   is required to see or follow it, so it’s fully readable by search engine crawlers.
 * Wrapped in a semantic `<nav>` landmark with `role="doc-toc"` and a proper `aria-
   label`, plus `aria-expanded` / `aria-controls` on the toggle button for assistive
   technology.
 * Optional JSON-LD `ItemList` structured data describing the page’s section structure(
   toggle in Settings  UTS TOC  SEO).
 * Only loads its CSS/JS on singular pages that actually have a TOC — no unnecessary
   weight added to the rest of the site.

Note on E-E-A-T: Experience, Expertise, Authoritativeness and Trustworthiness are
content-and-author quality signals that depend on what you write and who wrote it—
no plugin can add E-E-A-T for you. This plugin focuses on the technical SEO and 
accessibility signals it can genuinely control.

#### Other features

 * Font-family always matches your theme. Link/marker/border/background colors and
   per-level font sizes default to sensible, readable values and can be customized
   anytime in Settings  UTS TOC (Colors, Typography), with a one-click reset.
 * Clean, modern box design: subtle border, soft shadow, accent bar on the title,
   dot markers for nested items, and native numbering when “numbered” mode is on.
 * Per-post control via a meta box on every post/page editor:
    - Show TOC on this post: Use default setting / Always show / Never show (disable
      just for this one post)
    - Position on this post: Use default setting, or pick its own position independently
      of the global setting
    - Paragraph number override when using “After the Nth paragraph”
 * Site-wide position options (Settings  UTS TOC):
    - Before the first heading
    - After the first heading
    - After the Nth paragraph (default: after the 2nd paragraph)
    - Before all content
    - After all content
    - Manually, anywhere, using the [uts_toc] shortcode
 * Optional collapsible box, numbered/bulleted list, smooth scrolling.

### Also by UTS Sites

If this plugin was useful, you might also like another plugin from the same developer:

 * **UTSSites Auto FAQ Schema** — https://wordpress.org/plugins/utssites-auto-faq-
   schema/

More plugins and tools: https://utssites.com

## Installation

 1. Upload the `uts-sites-toc` folder to `/wp-content/plugins/`.
 2. Activate the plugin from the Plugins screen.
 3. Go to Settings  UTS TOC to configure the default position, heading levels, title
    text, and SEO structured data.
 4. Open any post/page editor to see the “UTS Table of Contents” box in the sidebar—
    use it to disable the TOC or change its position for that one post only.

## FAQ

### Does this help SEO?

It improves the technical SEO signals a TOC plugin can control: crawlable per-section
anchors, semantic/ARIA markup, and optional JSON-LD structured data. It does not
and cannot affect E-E-A-T, which is about your content’s quality and authorship.

### Will this change my site’s colors or fonts?

The TOC’s font always matches your theme (no font-family override). Link and marker
colors default to a neutral, readable color designed to work on both light and dark
backgrounds; you can override any color, or the per-level font sizes, in Settings
UTS TOC.

### Can I hide the TOC on just one blog post?

Yes — open that post’s editor, find the “UTS Table of Contents” box in the sidebar,
and set “Show TOC on this post” to “Never show (disable here)”.

### Can different posts use different positions?

Yes — leave the per-post “Position” field on “Use default setting” to follow the
global setting, or pick a specific position (including its own paragraph number)
just for that post.

### Can I place the TOC manually instead of automatically?

Yes — set Position to “Manual” (globally or per-post), then place the [uts_toc] 
shortcode wherever you like in the editor.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“UTS Sites Table of Contents” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ UTS Sites ](https://profiles.wordpress.org/uts0173/)

[Translate “UTS Sites Table of Contents” into your language.](https://translate.wordpress.org/projects/wp-plugins/uts-sites-table-of-contents)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/uts-sites-table-of-contents/),
check out the [SVN repository](https://plugins.svn.wordpress.org/uts-sites-table-of-contents/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/uts-sites-table-of-contents/)
by [RSS](https://plugins.trac.wordpress.org/log/uts-sites-table-of-contents/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.13.5

 * Critical fix: the [uts_toc] shortcode caused a fatal error (PHP ArgumentCountError)
   on every page it was used on. A required argument was missing from an internal
   function call. Automatic placement was never affected — only the manual shortcode.

#### 1.13.4

 * Added uninstall.php: removes the settings option, activation transient, and all
   per-post meta on uninstall.

#### 1.13.3

 * Fixed: readme, settings page, and code comments claimed colors/fonts were “always
   inherited from theme” — outdated since Colors and Typography settings were added.
   Documentation now accurately describes the actual defaults.

#### 1.13.2

 * Added License URI header for completeness. Full audit found no remaining unsanitized
   inputs, unescaped output, raw script/style tags, or external network calls.

#### 1.13.1

 * Fixed: used absint() instead of a plain int cast on one remaining $_POST value
   in the meta box save handler.

#### 1.13.0

 * Fixed: all inline `<script>`/`<style>` tags in the admin settings, welcome, and
   post-editor meta box pages are now properly registered and enqueued via `wp_enqueue_script`/`
   wp_enqueue_style` with `wp_add_inline_script`/`wp_add_inline_style`, instead 
   of being printed directly.
 * Fixed: the meta box nonce is now sanitized (`sanitize_text_field`/`wp_unslash`)
   before being passed to `wp_verify_nonce()`.
 * Shortened the readme short description to fit the 150-character limit.

#### 1.12.1

 * Cleaned up: removed remaining em-dashes from Settings (Typography) and Welcome
   page text. Confirmed all code comments are in plain English throughout.

#### 1.12.0

 * Added: Typography settings — customize font size for each heading level (H2-H6)
   independently, with a Reset to Default button. Defaults match the plugin’s original
   sizing exactly.

#### 1.11.1

 * Changed: title bar accent, top-level marker, and the sublist’s vertical divider
   line now align in one column instead of the sublist line sitting far to the right—
   removes wasted indent space.

#### 1.11.0

 * Rebuilt bullet and numbered list rendering on one shared structure: marker and
   text are now separate elements laid out with flex, instead of the old hanging-
   indent trick. This fixes wrapped second lines not aligning cleanly under the 
   first line’s text, and guarantees bullet/number spacing stays identical in every
   case.
 * Changed: numbered mode’s number is now a muted, professional weight/color instead
   of solid dark bold text.

#### 1.10.12

 * Reverted numbered-mode padding to 1.15em (matching bullet mode’s line position
   exactly, as in earlier 1.10.x builds), kept the flex layout (no clipping on any
   level), and gave numbers a clean, professional look matching body text size.

#### 1.10.11

 * Fixed: H2/H4/H5/H6 numbers were missing again (hanging-indent trick clips top-
   level items). Switched to flex layout while keeping the same 1.6em padding, so
   the vertical line position is unchanged but numbers now show at every level. 
   Number font-size now matches body text instead of being shrunk/faded.

#### 1.10.10

 * Testing: numbered mode reverted to the 1.9.9-style hanging-indent CSS (1.6em)
   for live comparison, per request.

#### 1.10.9

 * Fixed a regression from 1.10.8: switching numbered mode to the hanging-indent
   trick clipped/hid the number on top-level (H2) items. Reverted to the flex layout(
   same one that was working correctly), keeping the equal padding/gap fixes.

#### 1.10.8

 * Fixed: numbered mode used a different layout mechanism (flex) than bullet mode(
   hanging indent), causing spacing/wrapping differences. Both now use the exact
   same padding, indent, and margin — only the marker (dot vs number) differs.

#### 1.10.7

 * Fixed: gap between marker and text was 0.6em in bullet mode but 0.5em in numbered
   mode. Both now use 0.6em.

#### 1.10.6

 * Fixed: sublist vertical line sat at a different position in numbered vs. bullet
   mode (numbered items had no left padding). Both modes now use the same base indent,
   so the line lands in the same place either way.

#### 1.10.5

 * Fixed: numbered list layout used a negative text-indent hack that could push 
   numbers out of view or overlap adjacent items. Replaced with a simple flex layout
   so numbers on every level (H2-H6) are reliably visible and never overlap.

#### 1.10.4

 * Fixed: numbered list numbers were still missing on H2 in some cases due to fragile
   CSS counter-reset scoping. Numbers are now computed directly in PHP and printed
   as plain text — no CSS counters involved, so this can’t go wrong regardless of
   nesting.

#### 1.10.3

 * Cleaned up: removed remaining em-dash from the heading-skip warning text in the
   post editor meta box.

#### 1.10.2

 * Cleaned up: removed em-dashes from Settings page and per-post meta box text, 
   rewritten as normal sentences.

#### 1.10.1

 * Fixed: numbered list mode showed wrong/missing numbers on H2 (and H4/H5/H6) when
   a heading returned to a shallower level after a deeper one — the list HTML wasn’t
   closing the parent item properly, corrupting the structure. Numbering is now 
   correct at every heading level.

#### 1.10.0

 * Added: Scroll Offset setting (global + per-post override) so headings aren’t 
   hidden behind a sticky header when a TOC link is clicked. Default = 0px (normal).
   Per-post setting overrides global for that post only.

#### 1.9.9

 * Fixed: collapse/expand arrow’s circle background was invisible in dark mode (
   was a fixed light-mode-only tint) — now uses a proper light-tint background in
   dark mode too.

#### 1.9.8

 * Changed: dark mode link/item color is now a teal accent (#5eead4) instead of 
   blue, separate from the title’s text color.

#### 1.9.7

 * Fixed: readable text color now applies unconditionally by default (was previously
   gated behind a JS-set attribute, so it silently failed to apply in a race right
   after toggling). Also fixed a broken CSS selector that accidentally never matched
   TOC links, and added a click-based recheck so any theme toggle mechanism is caught.

#### 1.9.6

 * Fixed: text/links were washed out in light mode because color was left as theme-
   inherited, and the theme’s own text color there is pale (meant for dark backgrounds).
   Now sets an explicit readable dark text color in light mode, and light text in
   dark mode, guaranteed contrast either way.

#### 1.9.5

 * Fixed: TOC could appear faded/washed-out on load — now forces full visibility,
   overriding any theme/page-builder entrance-fade animation.

#### 1.9.4

 * Fixed: day/night mode was mismatching on themes with manual toggles — now detects
   the actual rendered background color live via JS instead of guessing theme class
   names.
 * Improved: dark mode now sets a readable text color for the title and list items.

#### 1.9.3

 * Added: automatic day/night (light/dark) mode support — matches OS-level dark 
   mode and common theme dark-mode toggles automatically.

#### 1.9.2

 * Changed: source-code credit comment is now always on and no longer a user-toggleable
   setting.
 * Improved: settings page and per-post meta box styling (toggle switches, chip 
   selectors, native field widths).

#### 1.7.0

 * Added: Colors settings card — custom bullet/marker, border/accent, link, and 
   background colors (all optional, blank = theme default), with a one-click “Use
   theme colors for everything” reset.
 * Added: optional transparent-background mode (removes only the white box fill,
   everything else stays the same).
 * Added: optional visible “Powered by” credit line, and an optional invisible HTML
   source-code credit comment.
 * Fixed: bullet/number vertical alignment now uses a proper hanging-indent layout
   so it lines up correctly with heading text at any font size, and nested sub-lists
   always render below their parent item (never beside it).

#### 1.2.0

 * Added SEO features: crawlable heading anchor IDs (always on), semantic nav landmark
   with role=”doc-toc” and ARIA labelling, optional JSON-LD ItemList structured 
   data.

#### 1.1.0

 * Default position changed to “After the 2nd paragraph”.
 * New per-post meta box: enable/disable TOC and override its position individually
   per post/page.

#### 1.0.0

 * Initial release.

## Meta

 *  Version **1.13.5**
 *  Last updated **18 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.6 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [headings](https://wordpress.org/plugins/tags/headings/)[seo](https://wordpress.org/plugins/tags/seo/)
   [table of contents](https://wordpress.org/plugins/tags/table-of-contents/)[toc](https://wordpress.org/plugins/tags/toc/)
 *  [Advanced View](https://wordpress.org/plugins/uts-sites-table-of-contents/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/uts-sites-table-of-contents/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/uts-sites-table-of-contents/reviews/)

## Contributors

 *   [ UTS Sites ](https://profiles.wordpress.org/uts0173/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/uts-sites-table-of-contents/)