Content ROI: how to measure what a blog post earns
Content ROI = (value of signups a post brings − what it cost) ÷ its cost. How to fill in each number from GA4, and why to judge at 90 days and 12 months.
LLaunchScaler·Published ·8 min read
Content ROI is the value a piece of content brings in, minus what it cost, divided by what it cost: (value − cost) ÷ cost. For a blog post, the value is the signups it produced multiplied by what a signup is worth to you, and the cost is every hour and dollar spent researching, writing, editing and publishing it, your own review time included.
The formula is simple; the work is in filling in each number with real data. Below is how to get each one from GA4 and your own records, a worked example, and why a post should be judged at 90 days and again at 12 months.
What is the content ROI formula?
Content ROI = (attributed value − total cost) ÷ total cost, shown as a percentage. A post that cost $200 and brought signups worth $600 has an ROI of 200%. Each side of the formula breaks into parts you can measure separately, which is what makes it usable rather than a guess.
Part
What it is
Where the number comes from
Signups attributed
Signups whose session started on the post, plus assisted signups
GA4, with signup marked as a key event
Value per signup
What a signup is worth: trial-to-paid rate × revenue per paying customer over your chosen period
Your billing data
Writing cost
Freelancer fee, or hours × your hourly rate
Invoices or a time log
Questions, answered
What people ask about this
01
What is the formula for content ROI?
Content ROI = (value attributed to the content − cost of the content) ÷ cost of the content. For a blog post, value is the signups or sales it brought multiplied by what each one is worth to you, and cost is the time and money spent writing, editing and publishing it.
Settle value per signup first, because every post in the sheet uses it. If 20% of signups become paying customers and a customer pays $300 in their first year, a signup is worth $60 over a 12-month view. Use whatever conversion rate and revenue window your business actually sees; the formula only needs you to be consistent.
How do you attribute signups to a blog post in GA4?
Mark the signup as a key event in GA4, then report key events by landing page. A signup whose session began on a blog post is the clearest credit you can give that post. Add the channel dimension so you can separate organic search visitors from people who arrived through a newsletter or a social share.
Set it up once:
Make sure your signup fires a GA4 event, for example sign_up.
In GA4, go to Admin, then under Data display click Events, and click the star next to sign_up to mark it as a key event. Google's help says you need the Editor role or above on the property to do this.
In Explore, start a new exploration from the Free form template.
Add the dimensions Landing page and Session default channel group, and the metric Key events filtered to sign_up.
Add a filter so Landing page contains your blog path, such as /blog/.
GA4 defines Landing page as "the page path associated with the first page view in a session." That is last-touch at the page level: it credits the post a visitor landed on in the session they signed up in. It misses the reader who found a post in May and signed up from the homepage in June, which the next section covers.
Two scopes matter here. GA4's documentation explains that "First user" dimensions such as First user default channel group show how a user was first acquired and never change, while "Session" dimensions are assigned fresh each time a user returns. For content ROI, use First user dimensions to see which channel brings new people, and Session dimensions to see which visit led to the signup.
GA4 also added an AI Assistant channel to the Default Channel Group on May 13, 2026. Visits whose referrer is a recognized AI assistant, such as ChatGPT, Gemini or Claude, get the medium ai-assistant and the campaign (ai-assistant). If your posts are cited in AI answers, that channel shows the resulting visits separately from organic search.
A reader often meets a post long before signing up. GA4 shares credit for a key event across earlier touchpoints through its attribution models, and shows the paths in the Attribution paths report. Use it to see how often organic search visits, which blog posts usually bring, appear earlier in the path to a signup.
To open the reports, click Advertising in GA4, then under Attribution choose Attribution models or Attribution paths. GA4 offers three models in those reports: data-driven attribution, paid and organic last click, and Google paid channels last click. Google's help says data-driven attribution "uses your account's data to calculate the actual contribution of each click interaction." All three exclude direct visits from receiving credit "unless the path to key event consists entirely of direct visits."
The lookback window limits how far back credit can reach. GA4's attribution settings default to 90 days for most key events (30, 60 or 90 can be chosen) and 30 days for acquisition events like first_visit. A post that influenced someone 120 days before they signed up gets no credit, so assisted numbers undercount older posts.
A practical split for the ROI sheet: count landing-page signups at full value, and assisted signups at a fraction you choose and apply to every post the same way. Being consistent across posts matters more than picking the perfect fraction.
How long before a blog post shows a return?
Longer than most founders expect. Google's SEO Starter Guide says "some changes might take effect in a few hours, others could take several months," and suggests waiting "a few weeks" before assessing whether work had an effect. A new post first has to be crawled, indexed and trusted before it ranks for anything that brings signups.
That lag is why a single measurement date misleads. Use two:
View
When
What it tells you
90-day view
Three months after publishing
Whether the post is indexed, earning impressions and starting to bring visits; early signals only
12-month view
One year after publishing
The post's return: a year of signups against a one-time cost
Most of a post's cost lands in its first week, while its value accumulates for as long as it keeps ranking. A post with a negative ROI at 90 days can be strongly positive at 12 months, and a post that is still near zero at 12 months usually needs a refresh or a merge, not more patience.
How do you calculate content ROI for one post?
Here is the formula filled in for one hypothetical post, so you can see how the parts fit. Replace every number with your own.
Writing: 5 hours at $60 an hour = $300.
Editing and fact-checking: 1.5 hours at $60 = $90.
Publishing, images and internal links: 1 hour at $60 = $60.
Total cost: $450.
Signups from the post as landing page in 12 months: 18.
Assisted signups in the same period: 10, counted at half value = 5.
Effective signups: 23.
Value per signup: 20% become paying × $300 first-year revenue = $60.
Attributed value: 23 × $60 = $1,380.
ROI at 12 months: ($1,380 − $450) ÷ $450 = 207%.
The same post at 90 days might show 3 signups, worth $180, which is a negative ROI of −60%. That is the lag, not a failure. Put both views in the same sheet for every post and sort by the 12-month column once you have a year of data.
Which costs do founders leave out?
The costs that go missing are the unpaid ones. Your own time reviewing a freelancer's draft, fixing its facts, adding screenshots and doing the CMS work is real cost, and it is often larger than the writing fee. Leaving it out inflates every ROI figure in the sheet.
Time the next three posts from brief to publish and use the average. The cost per blog post guide breaks down what freelancers, agencies and AI tools charge, and what each leaves for you to do. The other lever is choosing topics that can earn in the first place: posts aimed at searches your site already appears for tend to rank sooner, which the SaaS content strategy guide covers.
What should you do with the numbers?
Use the sheet to decide what to write next, not to grade past work. Group posts by topic and compare the 12-month ROI of each group: the topics whose posts pay back are the ones to write more of. Posts with plenty of impressions but few signups usually need a clearer next step on the page, such as a link to the signup or to the feature the post describes. Posts with neither impressions nor signups after a year are candidates to merge into a stronger post or to remove.
Recalculate every quarter. Each quarter adds three months of value to every post while the cost stays fixed, so the picture shifts toward the posts that keep ranking.
Lower the cost side of the formula
The cost per post is the part of the formula you control most directly. LaunchScaler's content engine plans a month of articles from your own Search Console queries, writes one a day in your voice, and by default leaves every draft in your workspace for your review before it publishes to WordPress, Webflow, Ghost, Shopify, Notion, Medium or a signed webhook. It is $99/mo per website for thirty articles a month, with 3 days free. That works out to about $3.30 an article, before your editing time.
Your review time still belongs in the formula, so log it the same way. Start the engine and your first article is ready on day one.
Mark your signup event as a key event, then build a Free form exploration with Landing page and Session default channel group as dimensions and your signup key event as the metric. Filter to landing pages under your blog path.
03
How long does it take for a blog post to show ROI?
Usually months. Google's SEO Starter Guide says some changes take effect in hours and others take several months, so judge a post at 90 days for early signals and at 12 months for its return.
04
What counts in the cost of a blog post?
Research and writing time or fees, editing, images, publishing and formatting time, and the time you spend reviewing it. Put a rate on your own hours, because that time is easy to leave out.
05
Does GA4 show assisted conversions from content?
Yes, through the Attribution paths report under Advertising, and through the data-driven attribution model, which shares credit for a key event across the touchpoints before it. Direct visits get no credit unless the whole path is direct.
Google does not penalize content for being AI-written. It demotes unhelpful pages and treats AI used mainly to game rankings as spam. The check to run.