The case study
I built an SEO automation tool with Claude and the articles earned 87,325 impressions.
Across 94 tracked articles, Google Search recorded 87,325 impressions and 367 clicks from August 11 through October 4, 2026. Here is how I built the workflow with Claude, the keywords those articles appeared for, and what their rankings tell us.
01 / The results
The rankings I can trace to these articles
These are exact Google Search queries matched to article URLs in our local tracker. Average position is measured over September 7 through October 4, 2026, across countries and devices. It describes the searches where a result appeared, so it is not a fixed rank for every person.
Average positions cover September 7–October 4, 2026, across all countries and devices. The Bitget query recorded 89 impressions and 3 clicks; the Phantom query recorded 888 impressions and 4 clicks. These are historical averages, not current fixed ranks.
An October 7 US desktop spot-check did not find Ryder in the first-page organic results returned for the Bitget and Phantom queries above. These are historical Search Console averages; live rankings vary and need separate tracking.
Beyond the rank examples
Across 94 tracked article URLs, Google Search recorded 367 clicks and 87,325 impressions from August 11 through October 4. Fifty-nine URLs earned at least one click. Those are observed results for this group of articles, not proof of extra traffic or wallet sales caused by the workflow.
02 / The workflow
How I put the system together
The system makes it easier to repeat the research, publishing and measurement work. The decisions about what is worth saying and what can go live still matter. This is the path an article is intended to take.
The images below are five labeled captures of actual local code or drafts, one live Ryder article, and one local analysis of exported Search Console data. The source views are not screenshots of the Claude, Notion or Search Console interfaces. Select any image to see it at full size.
- 01
Start with a question people are searching for
I look for wallet questions and rising topics through Google Trends, Ahrefs and DataForSEO. A spike is only a lead: someone looking for a security explanation has a different need from someone comparing wallets before buying. The current script sorts candidates by volume; a stronger intent filter is still on my list.

From seed keyword to candidate list. The real research code merges two providers; I still review the results for reader intent. Local source: keyword_research.py · Open full size ↗ - 02
Have Claude prepare a draft and metadata
Claude researches the topic and prepares a local Markdown draft with publishing details. A scheduled drafting task is configured to create three Notion cards at Idea status. That is a configured schedule, not a claim that three approved articles are published every day.

From selected topic to staged article. This saved Phantom wallet draft has a matching title, search title, description and target keyword. Local draft and metadata files · Open full size ↗ - 03
Keep a person in the approval loop
The publishing agent selects Notion cards marked “Approved for publishing” after a person reviews the sources, product claims and answer. The publishing script itself does not recheck that status if called directly with a manifest. I treat approval as an operating rule and want to harden it in code.

From Idea to reviewed approval. The source shows the Idea status and the publishing agent’s approval rule. This is a repository view, not a screenshot of Notion. Local source: push_to_notion_idea.py and SKILL.md · Open full size ↗ - 04
Run the editorial checks
The publisher requires a body draft, checks for a duplicate Shopify slug and runs a Python checklist for banned wording, unverified markers and product language. A failing draft stops. Those checks enforce consistency; they cannot verify every source, which is why the review step matters.

From reviewed draft to pass or fix. The checklist catches repeatable wording and product issues before the publisher proceeds. Local source: prepublish_check.py · Open full size ↗ - 05
Publish and update the records
The workflow prepares topic artwork, publishes the article and SEO metadata to Shopify, then writes its live URL and Published status back to Notion. It has a Slack announcement step, with a safeguard that can withhold the announcement when unique topic artwork is missing.

From checked content to live page. The published D'CENT explainer is a real Ryder article in the tracked cohort. Visit the article ↗ · Screenshot captured October 7, 2026 · Open image ↗ - 06
Connect it to the rest of the blog
A separate internal-link script proposes links from older, relevant posts to the new article. It can show a dry-run plan before changes are applied, with caps of two additions per old post and eight per new target. I still want each link to help the reader.

From live article to relevant links. The source shows how candidate posts are ranked and link additions are capped. Local source: linkback_sweep.py · Open full size ↗ - 07
Check what Google actually does
The tools can submit the sitemap, inspect URLs and read Search Console queries, clicks, impressions and average positions. I match those results to the tracker instead of assuming an article worked because it was published. Submitting a sitemap cannot force indexing or ranking; the saved index log is also dated, with its latest check on September 28.

From indexed URLs to measured results. This is the local analysis of exported Search Console data matched to the 94 tracked URLs; it is not the Search Console interface. Local source: case-study-evidence.json · Open full size ↗
03 / Article results
The three articles with the most clicks
These are the top three of the 94 tracked article URLs by Google Search clicks from August 11 through October 4, 2026. Each earned more than 10 impressions. The totals are for the whole article URL, across searches, rather than for one keyword.
05 / What this proves
The useful result, and the open question
The system can get approved, checked articles live and make their Search performance visible. Across the 94 tracked URLs, Google recorded 367 clicks and 87,325 impressions in the observed window. That is a real starting point for a small team.
It is too early to call it a revenue engine. Two pages supplied 36% of those clicks: one drew some searches with poor buyer relevance, and another answered a time-sensitive withdrawal problem. The data does not attribute sales, prove incremental traffic against a control group, or show that every search visitor was shopping for a hardware wallet. I want to improve the buyer-relevant topics and keep checking the query level evidence as the library grows.
Recent clicks across the same 94 tracked URLs also declined: 196 from August 10 through September 6, compared with 171 from September 7 through October 4. That is another reason to watch the topic mix and query results as the library grows.
If you want to build a similar workflow, the code is on GitHub. The schedules run through Claude tasks outside the repository, so cloning it does not start an always-on publisher. You would need your own connections, instructions and approval process.
Explore all chapters

