Skip to main content
Store operations and content

Shopify's Blog Editor Can Make a Heading but Not an Anchor — So Every Table of Contents App Writes the IDs in Your Reader's Browser

Shopify's rich text editor offers Heading 1 through Heading 6 and no way to give any of them an id. Shopify's own Help Center page for blog posts never mentions a table of contents, anchors, or headings. We fetched three long articles from a live US Shopify store: 20, 24, and 9 h2/h3 elements, and zero of them in the article body carried an id. Then we fetched a demo article running a TOC app: the server HTML contains id="toc- zero times, and after JavaScript runs, 9 of 9 headings have one. That is the whole category in one sentence. Compared five real apps — Easy Table of Contents 2.0, RuffRuff Table of Contents, Smart Table of Contents, Jump Links ‑ Table of Contents, and Auto Table of Contents — on USD pricing, what the free tier withholds, and placement. Between them: 35 reviews, one Built for Shopify badge, one admin that is not translated into English, and one developer who admitted in a public reply that uninstalling leaves code behind. Also why 'Google jump-link schema' is a paid feature for an output Google documents as automated. Verified September 10, 2026.

AIEC App Lab AI Editorial TeamPublished Read 16 min#Shopify blog operations#SEO and traffic#App comparisons

What you will learn

On this pageContentsCloseOpen

Open Content → Blog posts → Add blog post in your Shopify admin, put the cursor on a line, and click the Formatting button.

Shopify's rich text editor documentation lists what you get: Paragraph, Heading (1-6), and Blockquote, plus bold, italic, underline, lists, indent, alignment, and text color. Six heading levels. No field, button, or menu anywhere that gives a heading an id.

That single missing attribute is the entire table of contents app category.

Pricing, review counts and listing text were verified on the en-US Shopify App Store on September 10, 2026. All prices are in USD.

What Shopify documents, and what it doesn't

Shopify's Help Center page for adding and managing blog posts is thorough. It documents the title limit (255 characters), the author dropdown, the blog selector, the featured image, the excerpt, tags, theme templates, the search engine listing, and scheduled visibility.

It never uses the words "table of contents," "anchor," or "heading."

The rich text editor page does tell you how to reach the HTML — click the Edit code button, or Show HTML — and you can hand-write <h2 id="shipping"> in there. Two things in that same page complicate it:

Content limit: There's a hard limit of 64 KB for content entered into the rich text editor. This applies to Pages, Blog posts, and additional scripts.

HTML sanitization: TinyMCE provides content filtering logic that automatically corrects HTML formatting to prevent storefront malfunctions and security risks. Although you can manually edit HTML back to its original form, it's recommended that you work with these automated changes.

So hand-written anchors are possible, not documented, and subject to an editor that Shopify openly says will rewrite your markup and that you should let it. Shopify's own closing advice in that section is to solve the problem in your theme instead:

If you're attempting to achieve specific goals by writing HTML that the CDN is trying to correct, then consider whether there are more ideal ways of reaching those goals, such as making changes to your theme code that support the expected HTML formatting.

What live stores actually look like

We fetched three long-form articles from Beardbrand, a US Shopify store that has been publishing editorial content for years, and counted <h2> and <h3> elements in the served HTML.

Articleh2 + h3 elementsElements with an id
/how-to-grow-long-hair-men203
/buzz-cut243
/mustaches93

Three on every page, the same three on every page. Printing them out explains why: they are the footer accordion headings — <h3 tabindex="0" id="footer-heading-dadcc981-…" aria-expanded="false">, generated by the theme.

Article body headings with an id: zero, on all three pages. A 24-heading article with no linkable sections is the normal state of a Shopify blog, not a neglected one.

What the apps actually do

Next we took the demo article for one of these apps — Smart Table of Contents — and looked at the same page twice.

Fetching the raw HTML the server sends, the string id="toc- appears zero times, and the article's <h2> tags are bare <h2>. Reading the same page in a browser after JavaScript has run, 9 of 9 article headings carry an id: toc-what-is-a-table-of-contents-and-why-does-it-matter, toc-why-doesnt-shopify-include-a-toc-by-default, and so on.

That is the architecture of this whole category, and it is worth stating plainly because no listing does: the anchors your table of contents links to do not exist in your page. They are created in each reader's browser, on each page load, every time. One merchant describes the mechanism accurately in a 2023 review of another app in this category: "Must be dynamically scanning the page, and then dynamically adding the 'IDs' in the headings - before creating the TOC."

Three practical consequences follow, and none of them is a reason to avoid these apps — they are the things to plan around.

The id is derived from the heading text. toc-why-doesnt-shopify-include-a-toc-by-default is the heading, slugified. Edit the heading and the anchor changes. Any deep link you shared, or that anyone else shared, now lands at the top of the page.

Anything reading your HTML without running JavaScript sees no anchors. Browsers run JavaScript, and Google documents that Googlebot renders JavaScript, so the reader experience and Google's view are generally fine. But the section-level addressability you think you added isn't in the document that other fetchers receive, and whether any given fetcher executes JavaScript is not something the app's listing can tell you.

Uninstalling can leave the markup behind. See the Jump Links section below, where the developer says so themselves.

Two of these apps sell schema output as a reason to pay. Easy Table of Contents 2.0 lists "Automated SEO Schema: Built-in JSON-LD for Google Jump-to eligibility" as a feature, puts "Full SEO JSON-LD Schema" in its Free plan, and then puts 'Google SEO "Jump-Link" Schema' in the $1.99/month Essential plan — the same idea, on two tiers, in one listing.

Google's list of structured data features does not contain a table of contents or jump links type. The closest Search result is a sitelink, and Google's sitelinks documentation is direct about how those are produced:

At the moment, sitelinks are automated.

Its best-practice list is about informative headings, logical structure, and concise internal anchor text — page structure, not markup you can add. A table of contents is a genuinely good reason to structure an article well. There is no documented schema type that makes Google render one.

Where the app is allowed to sit

One more constraint decides more than the pricing does, and it lives in your theme rather than in the app.

In September 2025 an app developer opened a thread on Shopify's developer forum: in the Horizon theme, dropping an app block into the Blog post section doesn't work — the block is moved into a new section below the article, "meaning the app block won't display within/alongside the article content." Dawn allowed it; Horizon did not. A Shopify staff member escalated it, then reported in March 2026 that Shopify "do not actually review or approve contributions to Horizon at this time," and in June 22, 2026 confirmed: "this has now been resolved with version 4.0.0 of Horizon." Nine months. In the same thread, in May 2026, a second app developer reported hitting the same limit on Horizon, Sense and Refresh, and shipping a separate section under the article body as the workaround.

Before you compare plans, check two things: your theme, and its version. If an app's only placement mechanism is a theme app block and your theme won't accept one inside the article section, you get a table of contents under your article instead of above it.

Five apps, five different deals

AppFree planPaid fromTrialBuilt for ShopifyRating (reviews)Beyond blog posts
Easy Table of Contents 2.0Yes, top position only$1.99/mo30 daysNo4.8 (13)Pages, collections, products on $3.99
RuffRuff Table of ContentsYes, with branding$3.99/mo3 daysYes4.8 (17)Products, collections, pages on $9.99
Smart Table of ContentsFree onlyNo5.0 (1)Blog articles only
Jump Links ‑ Table of ContentsNo$1.99/mo7 daysNo2.5 (4)Related products on $9.99
Auto Table of ContentsFree onlyNo0.0 (0)Pages and blog posts

Thirty-five reviews across the five. For scale, on September 10, 2026 the App Store's Blogs category listed 234 apps — and filtering that category by the "Table of contents" feature returned the same 234, so the filter is not a shortlist. (We found the same thing about the category's "Related posts" filter.)

Easy Table of Contents 2.0

Top of the Shopify App Store listing page for Easy Table of Contents 2.0, showing the free plan and a 4.8 rating from 13 reviews

Source: Shopify App Store (Easy Table of Contents 2.0), retrieved September 10, 2026

By Bestdecoders, launched January 18, 2022. The longest trial here at 30 days, and four price points: Free, Essential $1.99/month, Extended $3.99/month, and Extended Yearly $39.99/year.

The free plan generates a TOC on unlimited articles but is restricted to Fixed Top Position Only. Position control, the mobile slide-out drawer, bullets and indentation, and per-page settings are all on Essential.

Two things to weigh. Its rating is 4.8 across 13 reviews, but every one of those ratings is at an extreme: 11 five-star and 2 one-star, with nothing at four, three or two. One reviewer mentions having been "put off with the 1 star reviews by others below for a while." And its data access request is the broadest of the five: store owner name, email, phone and physical address, plus blog contributor email, IP address, browser and operating system.

RuffRuff Table of Contents

Top of the Shopify App Store listing page for RuffRuff Table of Contents, showing the Built for Shopify badge and a 4.8 rating from 17 reviews

Source: Shopify App Store (RuffRuff Table of Contents), retrieved September 10, 2026

By Tsun Inc., launched December 5, 2022, and the only app here carrying the Built for Shopify badge. Light $3.99/month or $39.60/year; Regular $9.99/month or $99.60/year, which adds products, collections and pages. The trial is 3 days.

Read the Light plan feature list closely, because it tells you what the free plan is. Light adds "Anchor Link Generation from Headings" and "No branding." Both are worth knowing before you install: the free tier displays vendor branding, and heading-derived anchor generation — the thing the rest of this article is about — is listed as a paid feature rather than a baseline one.

Light also unlocks custom Liquid above and below the table of contents, which is the most open-ended customization on offer in this group.

Smart Table of Contents

Top of the Shopify App Store listing page for Smart Table of Contents, showing that it is free and rated 5.0 from one review

Source: Shopify App Store (Smart Table of Contents), retrieved September 10, 2026

By Sefa, launched May 19, 2026. Free, with no paid tier at all. It reads H2 and H3 headings, is configured from the theme editor rather than an app dashboard, adds scroll-spy highlighting of the active section, and states support for "any Online Store 2.0 theme."

It is also the app whose demo article we tested above, so its mechanism is the one we can describe from observation rather than from a listing.

The caveat is evidence, not features: one review, dated June 10, 2026, from a store that had the app installed for 7 minutes. Launched less than four months before our check, with a single review, is not a track record. Its data access request is the narrowest of the five — store owner details only.

Top of the Shopify App Store listing page for Jump Links ‑ Table of Contents, showing pricing from $1.99 a month and a 2.5 rating from 4 reviews

Source: Shopify App Store (Jump Links ‑ Table of Contents), retrieved September 10, 2026

By Jump Links, of Dallas, Texas, launched April 29, 2021 — the oldest app here. Full Access $1.99/month; Premium $9.99/month adds automatic related-product blocks at the bottom of posts. 7-day trial, no free plan.

Its rating is 2.5 from 4 reviews: one four-star, one three-star, one two-star, one one-star, and no five-stars at all. Those four reviews are the most useful documentation in this category, so read them rather than the listing.

A February 2023 reviewer reported two problems: load time, and leftover code on uninstall. The developer's public reply disputes the first and confirms the second:

The app does unfortunately leave some code behind when it is removed. As stated in our support response to you when you reached out about this issue, this is a known bug we are working to fix and you should be able to remove that code soon.

That reply is three and a half years old and still the current public record. On load time, two separate reviewers independently describe "an extra 2 seconds"; the developer calls that "an outrageous lie with zero evidence" and cites GTmetrix page loads of 498 ms from London and 357 ms from Vancouver. What the exchange does establish is architectural: the developer explains that the app uses AWS "to generate a table of contents," so unlike the client-side apps it involves a server round trip. Two of the four reviews describe support that did not answer. The most recent, from August 2024, reads in full: "Stopped working long time back and their support never answers." An earlier one, edited May 2023, reads: "I'm back to being seriously disappointed by ZERO communication" — the developer replied that the merchant's emails had been caught by their spam system.

If you uninstall anything in this category, it's worth checking your article HTML afterwards — app uninstalls leave more behind than most merchants expect.

Auto Table of Contents

Top of the Shopify App Store listing page for Auto Table of Contents, showing that it is free with no reviews yet

Source: Shopify App Store (Auto Table of Contents), retrieved September 10, 2026

By Max Benz, of Dresden, launched July 16, 2026 — under two months before our check. Free, with no reviews. It scans H2 and H3 headings on pages and blog posts and generates anchor links, updating when headings change.

One line on the listing decides this for most US merchants. Under Languages it says German, followed by: "This app is not translated into English." Its listing copy, meta description included, is in German. That is a statement about the app's admin interface, not necessarily its storefront output, but it is the kind of thing to check before you install rather than after.

How to choose

If you publish a handful of long articles a year, do nothing first. Open one in a browser, count the headings, and ask whether a reader would actually use a jump list. A 900-word post with three headings does not need one.

If you want no monthly fee and are on an Online Store 2.0 theme, Smart Table of Contents is the cleanest free option with an English admin — with the understanding that its evidence base is one review.

If you want the strongest platform signal, RuffRuff Table of Contents is the only Built for Shopify app here. Budget for Light at $3.99/month; the free tier carries branding and lists heading anchor generation as a paid feature.

If you need a TOC on product or collection pages too, compare Easy Table of Contents 2.0 at $3.99/month against RuffRuff's Regular at $9.99/month. Easy Table of Contents 2.0 is cheaper for that scope; RuffRuff has the badge and the longer review history.

If you want related-product blocks under your posts from the same app, that is Jump Links' Premium tier at $9.99/month. Weigh it against a 2.5 rating and a developer-confirmed uninstall-leftover bug.

If your theme is Sense, Refresh, or a Horizon older than 4.0.0, settle placement before you settle on pricing.

The bottom line

Shopify gives you six heading levels and no way to address any of them. Every app in this category closes that gap the same way — by writing the id attributes into the DOM in your reader's browser — and then charges differently for position control, mobile layout, scope beyond blog posts, and in one case for the anchor generation itself.

The questions that actually separate them are not in the feature lists: what your theme lets the app do, how much evidence exists that the app still works, and what it leaves behind when you remove it.

Sources

RelatedYour Reviews Live in Two Places Now — and Only One of Them Fits in a CSV

Shopify's Help Center contains one sentence that decides how a review app migration turns out: reviews migrated between partner apps using a CSV aren't eligible to display in Shop. Since the standard product review syndication program went generally available on June 6, 2025, approved apps write every review into a metaobject in your own store — so a migration is really two migrations, and the CSV is the worse one. Judge.me's export drops videos, SKUs, order details and verified status. Yotpo's import treats every incoming review as anonymous. Loox caps you at 100,000 imported reviews forever and gives you seven days to undo. Okendo lets you type TRUE into an isVerifiedBuyer column. Judge.me refuses to mark anything verified by hand. Compared on export contents, import limits, what restores the verified badge, and what it costs to land the reviews: Judge.me Product Reviews App, Loox ‑ Product Reviews App, Yotpo: Product Reviews App, Okendo: Reviews & Loyalty, and Stamped Reviews & Loyalty. Verified September 10, 2026.