Skip to content

feat(content): move the sponsor block from the article tail to after the intro - #169

Closed
Decipher wants to merge 1 commit into
developfrom
feat/sponsor-block-placement
Closed

feat(content): move the sponsor block from the article tail to after the intro#169
Decipher wants to merge 1 commit into
developfrom
feat/sponsor-block-placement

Conversation

@Decipher

Copy link
Copy Markdown
Owner

Why

The sponsor block sits between 85% and 100% of the way down every article — dead last in five of eight — while only 19 of 135 newsletter readers (about 14%) scroll to the bottom. So roughly 86% of readers never see it at all.

That is a position problem, not a copy or CTA-quality problem.

Placing it after the intro is also the better editorial call: "here is the module, and here is where its code lives" belongs right after you have said what the post is about, not as a footnote 27 blocks later. Not at the very top, which would read as asking before anything has been delivered.

What moved

Article Sessions (90d) Before After
custom-formatters-410-20260731 177 27/27 4/27
jsonapi-views-120-20260812 85 29/30 5/30
drupal-site-settings-over-jsonapi-consumer-20260826 19 29/29 4/28

Each block moves to the end of the article's opening section. On drupal-site-settings the block was alone in its own section, so the emptied section wrapper was removed too — hence 29 nodes becoming 28.

Not included

  • field-tokens-200 deliberately left alone. Its block is at 8/9, but the whole post is only 9 nodes, so it is already effectively visible — and it has the site's best engagement at 0.83. Raw depth percentage is misleading on short posts.
  • decoupling-configuration, layout-paragraphs, what-no-images — 3 to 6 sessions each over 90 days. The effort exceeds any possible return.
  • two-frontends-one-drupal-one-codebase-20260902 is at 48/48 and would benefit most, but it is not committed yet, so it cannot be included here. Worth fixing before it is published, while it costs nothing.

Verification

Mechanical, and checked rather than assumed:

  • Leaf paragraph types unchanged in all three — nothing added, removed or reworded.
  • The repository block itself is byte-identical — this is a move, not an edit.
  • 638 tests passing, lint:all, and nuxt typecheck all clean.

Two things that need your eye

custom-formatters now ends on a code block. The repository block was the last node, so removing it leaves the article closing on composer require. That is an abrupt ending and probably wants a closing line. The other two still end on prose.

jsonapi-views now has two sponsor touchpoints — the moved repository block near the top, and the existing "If your project depends on this work" jumbotron at node 24. That may be one ask too many; removing or softening the jumbotron is an editorial call rather than a mechanical one.

Important: Drupal is the source of truth

This changes only the synced frontend JSON, so the next sync-content run will revert it. It is deliberately shaped as a preview so the placement can be judged before committing to it.

If the placement is right, the same reordering has to be made in Drupal — the frontend change is not the durable one.

@coderabbitai

coderabbitai Bot commented Aug 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 94223a61-413a-4f67-a192-20889faf320c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

Preview site

pr-169: https://pr-169--stuartclark.netlify.app

Updated 2026-08-27T22:51:20Z

@codecov

codecov Bot commented Aug 27, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.77%. Comparing base (ba8ee3f) to head (24b44e1).

Additional details and impacted files
@@           Coverage Diff            @@
##           develop     #169   +/-   ##
========================================
  Coverage    99.77%   99.77%           
========================================
  Files           78       78           
  Lines         1316     1316           
  Branches       330      330           
========================================
  Hits          1313     1313           
  Misses           3        3           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

Copy link
Copy Markdown

✅ Lighthouse Audit · unknown

All pages within budget — 13 pages scanned.

Route FCP LCP CLS TBT Perf
/ 2.8s 2.9s 0.009 22.500 0.90
/about 2.6s 3.1s 0.178 69.500 0.82
/community 2.6s 2.7s 0.016 24.308 0.92
/open-source 2.8s 4.8s 0.000 0.000 0.78
/writing 2.7s 2.9s 0.000 5.500 0.91
/writing/custom-formatters-410-20260731 2.9s 3.4s 0.063 0.000 0.86
/writing/decoupling-configuration-config-pages-20220412 2.7s 3.0s 0.015 0.000 0.90
/writing/drupal-site-settings-over-jsonapi-consumer-20260826 2.9s 4.0s 0.159 0.000 0.76
/writing/field-tokens-200-20260722 2.7s 2.8s 0.019 0.000 0.91
/writing/hello-world-20211126 2.9s 3.0s 0.142 0.000 0.84
/writing/jsonapi-views-120-20260812 2.7s 2.8s 0.005 0.000 0.91
/writing/layout-paragraphs-module-20220301 2.6s 2.7s 0.055 0.000 0.92
/writing/what-no-images-20220315 2.7s 2.8s 0.039 0.000 0.91

Thresholds: FCP ≤ 3.5s, LCP ≤ 5.0s, CLS ≤ 0.25, TBT ≤ 600.000, Perf ≥ 0.75

@Decipher

Copy link
Copy Markdown
Owner Author

Closing: a blind A/B audience review does not support this change.

Five reader personas reviewed the article twice, once with the sponsor block in its committed position and once with it moved after the intro. Reviewers were blind to which variant they held, the variants were counterbalanced, and the sponsor block was never mentioned in the review brief — placement had to surface on its own.

Four of five judged the moved placement premature or inconsistent.

  • Voice guardian: "Inconsistent, and demonstrably so." It checked the two nearest published posts and found the identical sentence in both, in both cases as the last line. "The site does ask. It just asks last." It also noted the moved card occupies the slot where those posts put their "if you haven't used it" explainer, which this article is missing.
  • Sentiment reader: "It arrives before the post has demonstrated anything." With a Sponsor button four lines below it, "(work, life, the usual reasons)" stops reading as candour and becomes pre-emptive justification, which drags the maintainer credit into the same light.
  • Planet Drupal reader: "premature", one beat of friction. In the committed position: "That's not begging, that's a footer."
  • Skim reader: "arrived before I had got anything… the condition reads as unmet."

The one dissent was the practitioner, which preferred the moved version — but its actual complaint was that composer require is the last line of the post, not that the sponsor card is. That is fixed by moving the install command, and needs no change here.

The more useful finding: both skim readers stopped at paragraph two, in both variants, for reasons unrelated to placement. The post opens on the module's biography and the first line describing what it does is four paragraphs down. So readers are not lost to distance from the sponsor block; they are lost before they reach any of it. Moving the block up relocates the ask to a place they have already decided to leave.

Recorded for whoever picks this up: the sponsor block placement is already correct. The levers worth pulling instead are the opening, the position of the install command, and section headings.

@Decipher Decipher closed this Aug 27, 2026
@Decipher
Decipher deleted the feat/sponsor-block-placement branch August 27, 2026 23:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant