I Audited 69 of My Own Shopify Blog Posts. Here Are the 4 Patterns I Keep Finding

Last week I ran a 4-tier SEO audit across the 69 posts on this blog. 49 of them needed touch-ups. The same 4 patterns kept surfacing, and the patterns are mechanical enough that any Shopify content writer can fix them in their own archive without a tool subscription. Here they are.

TL;DR: I audited 69 posts on this site across 4 tiers (Tier 1 schema + meta, Tier 2 structure + linking, Tier 3 word count + bold density, Tier 4 image + alt + OG). 4 recurring patterns surfaced. Bold density below 1% on 6 posts (technical guides). Outbound link starvation on 25 posts (worst was 0 outbound on a 1,810w piece). Label-style H2s on 12 posts (zero query intent). Pillar bloat over 2,400w on 7 posts (38% scroll completion vs 56% on tighter pieces).

How the audit worked

4 tiers, executed in order across all 69 posts:

  • Tier 1: schema markup (BlogPosting, FAQPage, BreadcrumbList, Person+sameAs), Open Graph meta, Twitter Card, canonical, robots, hreflang. Hugo emits most of these automatically, so this tier was a verification pass not a fix pass.
  • Tier 2: H2 structure (label vs query phrasing), TL;DR + takeaway block presence, internal cluster cross-links, outbound primary-source links.
  • Tier 3: word count vs pillar/tactical bands, bold density (target 3-7%, computed as bold-word-count divided by total-word-count), paragraph length distribution.
  • Tier 4: image presence, alt text quality, OG image dimensions, image format (WebP preferred over JPEG).

The audit ran across 7 commits over 36 hours. 49 of 69 posts got at least one edit. The 4 patterns below account for ~80% of the touched files.

Pattern 1: bold density under 1%

6 posts came in at 0.1-0.9% bold density. All 6 were technical guides where I had unconsciously avoided emphasis because “the code is the emphasis.” Bad instinct.

The fix is mechanical. Read the post. Every numeric value, named pattern, or hard rule that a reader would copy out goes in bold. Aim for 1 bold token per 25-35 words. The worst offender was a Liquid render-tag post at 0.1% (~3 bold words in 1,500w), bumped to 4.2% in 12 minutes by bolding 47 numbers and named directives.

Outcome: average position improved by 1.1 in the first 21 days for the 6 touched posts. Not a controlled experiment, just observation. The likelier mechanism is that bold tokens improve scannability, which improves time-on-page, which feeds back into ranking signals over the rolling window.

The writing playbook target is 4-8 outbound primary-source links per 1,000 words. 25 of 69 posts came in under that threshold. Worst case: a shopify-conversion-leaks-dollar-impact piece at 1,810w with 0 outbound links.

Outbound starvation correlates with weaker E-E-A-T signals in my GSC data. The 0-2 outbound group underperformed similar-length posts in the 5+ group by roughly 30% on impressions for the same query cluster. Causation is uncertain; correlation is stable across the dataset.

The fix per post: add 1-3 outbound links to authoritative domains during natural touches. Priority sources I lean on: Google Search Central, Shopify docs, Web.dev, Baymard research, MDN. Add as you reach for them in the prose, not as bolt-on citations. Bolt-on citations read like footnotes; in-flow links read like research.

Pattern 3: label-style H2s

12 of 69 posts had H2s like “Implementation” or “Best Practices” or “Considerations” or “Common Pitfalls.” Label-style. Zero query intent.

Compare a real GSC query export to your H2 list. Do any of your H2s match how people actually search? If your H2 is “Implementation,” nobody is searching that phrase. They are searching “how do I install variant validation in Shopify Plus” or “what breaks when I add custom Liquid filters.”

The fix: rewrite every H2 as either a query (“How do I X?”) or an outcome (“X drops by Y when you Z”). Mechanical. 5 minutes per post. The 12 touched posts saw average position lift by 1.4 in the 30 days following the edit. Featured snippet eligibility opens up because Google has a query-matched H2 to lift.

Example diff from this site’s section-schema post:

- ## Implementation
+ ## How do I add section schema in Online Store 2.0?

- ## Best Practices
+ ## What is the optimal range step for a Liquid range setting?

- ## Common Pitfalls
+ ## What breaks if I skip variant ID validation?

The “Common Pitfalls” → “What breaks if I skip variant ID validation” rewrite earned a featured snippet on the variant validation query within 9 days. Sample size of one; the mechanism is plausible.

Pattern 4: pillar bloat over 2,400 words

7 of 69 posts ran past 2,400 words. The longest was 3,010w on a 250-variant cap post. None of them earned the length; trimming back to 2,400-2,500 took 20-40 minutes per post and removed almost entirely intro throat-clearing and recap paragraphs.

The mechanical signal I use: 38% scroll-depth completion at 2,400w vs 56% at 1,500w in my Hotjar data on the same content topics. Past 2,400w, readers stop completing. Past 2,000w on mobile, scroll fatigue sets in fast. Pillar posts can justify 2,400-3,000w when every word earns its place; tactical guides should sit at 1,200-1,800w.

The 7 trimmed posts saw no ranking damage in the 21 days following the cut. If anything, time-on-page per visit improved (no published causal claim; just observation).

What I did not find

Three things the audit did not surface, in case you run the same audit on your own archive:

  • No keyword cannibalization on tactical posts. The 9-post agentic-citation cluster (covered in the Shopify agentic storefronts guide) had one cannibalization pair (Guide + Enable) that I merged. The other 49 tactical posts each held a distinct query intent.
  • No schema gaps. Hugo auto-emits BlogPosting, FAQPage when frontmatter faq: exists, BreadcrumbList, Person with sameAs. The schema infrastructure was healthy; just needed verification.
  • No image format gaps. Hugo serves WebP via image processing. The gaps were on OG image dimensions (1200x630 not enforced) and alt text quality (some missing).

How to run the same audit on your blog

The 4-tier structure works without tooling. The full implementation took me about 6 hours across 69 posts, mostly in Hugo. The same audit on a Shopify blog would take longer because Liquid does not give you the same regex-friendly markdown view; you would have to export articles via Admin API first.

The fast version for any blog:

  1. Bold density: for each post, divide bold-word-count by total-word-count. Anything under 1% gets 5-10 inline bold stat highlights. 5 minutes per post.
  2. Outbound links: count [text](http external links per 1,000 words. Anything under 4 gets 1-3 primary-source links added during the next natural touch. 2-5 minutes per post.
  3. H2 phrasing: read every H2 out loud. If it does not sound like a question or an outcome, rewrite. 5 minutes per post.
  4. Word count: soft-cap at 2,400w. Trim throat-clearing intros and recap paragraphs first; technical sections rarely deserve cutting. 20-40 minutes per over-cap post.

The total time investment for a 50-100 post archive is 4-8 hours. The compounding benefit is permanent. For the broader self-audit workflow on a CRO-focused engagement (not just blog content), see my Shopify CRO audit process.

The takeaway

  • Bold density under 1% is the most common pattern on technical writing. Aim for 3-7%. 5 minutes per post fixes it.
  • Outbound link starvation under 4 per 1,000w correlates with weaker rankings in my data. Add primary-source links during natural touches. Bolt-on citations do not work; in-flow research links do.
  • Label-style H2s (“Implementation”, “Best Practices”) earn zero query intent. Rewrite as queries or outcomes. Featured snippet eligibility follows.
  • Past 2,400 words, scroll completion drops sharply. Trim throat-clearing intros first. Tactical posts belong at 1,200-1,800w; pillar posts can justify 2,400-3,000w if every word earns it.
  • Run the audit on your own archive. 4-8 hours of mechanical work compounds permanently. The patterns above are not unique to me; they show up in most Shopify blogs I read.

Frequently Asked Questions

Why audit your own blog posts when you already wrote them?

Writing creates blind spots that reading fixes. The patterns I keep finding (label-style H2s instead of query phrasings, single-stat paragraphs with zero bold density, 2,800-word pillar bloat) are invisible while drafting and obvious when read side-by-side at scale. The audit took 6 hours across 69 posts and surfaced 49 posts needing touch-ups. The same pattern frequency probably holds for most Shopify blogs out there; the writers just have not run the audit yet.

What is the bold density target on a blog post?

3-7% of word count bolded, distributed across stat highlights, hard rules, and key terms. Under 1% reads flat and shallow; over 9% reads like sales copy. The Wikipedia AI-writing guide flags excessive bold as one tell of generated content. The sweet spot is 1 bold token per 25-35 words, ideally on numbers, percentages, or named patterns the reader can copy out. 6 of my 69 posts fell under 1% (the bold-low pattern); all 6 were technical guides where I had unconsciously avoided emphasis.

How many outbound links should a 1,500-word blog post have?

4-8 outbound primary-source links per 1,000 words, weighted toward authoritative domains: Google Search Central, Shopify docs, Web.dev, MDN, Baymard, peer-reviewed research. A 1,500w post lands at 6-12 outbound links. 25 of my 69 posts came in under that threshold, the worst at 0 outbound on a 1,810w piece. Outbound link starvation is correlated with weaker E-E-A-T signals in my GSC data; the posts in the 0-2 range underperform similar-length posts at 5+ outbound by ~30% on impressions for the same query cluster.

What is wrong with label-style H2s?

H2s like 'Implementation' or 'Best Practices' or 'Considerations' carry zero query intent. They tell the reader what is in the section, but they do not match how anyone searches. Query-phrased H2s ('How do I install this on Online Store 2.0?' or 'What breaks if I skip the variant validation?') match real GSC queries, which earns featured snippet eligibility and improves on-page time. The fix is mechanical: rewrite every H2 as either a query or an outcome. 12 of my 69 posts had label-style H2s; rewriting them took ~5 minutes per post and lifted average position by 1.4 in the first 30 days post-edit.

Is there a maximum word count for a Shopify blog post?

I use 2,400 words as a soft pillar cap and 1,200-1,800 as the tactical sweet spot. Posts past 2,400w show reduced scroll-depth completion (Hotjar data: 38% completion at 2,400w vs 56% at 1,500w on the same content topic) and harder time-on-page measurement. 7 of my 69 posts ran past 2,400w; trimming each to 2,400-2,500 took 20-40 minutes and did not damage rankings (the trimmed sections were almost entirely throat-clearing intros and recap paragraphs). The cap is a discipline, not a rule. Tutorials and pillar guides can justify 3,000w if every word earns its place.

Book Strategy Call