← back to all posts

Which Page-Two Rankings Are Worth Fixing: Contrast Analysis by an AI Agent on a Live Store

Which Page-Two Rankings Are Worth Fixing: Contrast Analysis by an AI Agent on a Live Store

Contrast analysis is one of the most useful and most tedious jobs in SEO. Open the top results, write down what competitors cover, compare it with your own page, and repeat for every query. I handed that work to a router agent in Orakul and ran it on a real store — anastasiya.studio, which sells printable music worksheets for kids. Below is the data: what the agent found, where its export needed a second look, what I changed on the site right away, and how I'll check the result.

What contrast analysis is

It answers one question: what is my page missing compared with the pages already in the top results for this query? Not "write 2,000 words" and not a generic checklist, but specific subtopics that most competitors cover and you don't. If a subtopic shows up on 4 pages out of 6, that's a signal. If it shows up on one, it's probably just that site's quirk.

Step 1. Where to look: clicks, but positions 10–20

The first request to the agent is a 30-day Google Search Console export: pages that got clicks but sit on page two of the results. Clicks confirm there is demand, and page one isn't far away.

SEO Expert agent chat in Orakul: Search Console export for anastasiya.studio, pages with clicks at positions 10–20
The SEO Expert agent in Orakul: Search Console export for August 13 – September 12, 2026. Five anastasiya.studio pages with clicks at positions 10–20.
Page Query Average position
/tag/music-tracing-worksheets/ music note tracing worksheets 10.0
/tag/free-printable-music-theory-worksheets/ music color by number 10.5
/tag/free-printable-music-coloring-pages/ music coloring sheets for elementary free 15.5
/product/back-to-school-bass-clef-note-naming-worksheets/ bass clef note naming worksheets pdf 16.2
game.anastasiya.studio/002_star.html twinkle twinkle little star game 18.4

A manual check: the number matches, but it rests on 2 impressions

An export shouldn't be taken on faith, so I checked one pair in the Search Console interface, filtering by both query and page.

Google Search Console: query music note tracing worksheets, 1 click, 2 impressions, average position 10
Manual check in Search Console: position 10 matches the agent's data. It also shows the catch right away — 2 impressions in 28 days.

The position matched: 10 in GSC, 10.0 from the agent. But behind it are 2 impressions and 1 click on a single day, September 4. That's not a ranking, it's a fluke. A "has clicks + position 10–20" filter with no impression floor lets pairs like this through, so the request to the agent should include a minimum number of impressions.

The other rows can't be checked the same way: the GSC interface won't build a page + query table across several URLs at once. For those, you have to trust the export the agent pulls from the connected Search Console.

Step 2. How the agent compares a page with the top results

The second request goes page by page: "analyze the page for query X and determine what it needs to reach the top." The agent takes Google's first page of results, opens the competitors, extracts subtopics, counts how many pages cover each one, and checks whether ours does. Each subtopic becomes one line. For example, for "music color by number":

Add explicit age groups and grade levels (Preschool, Pre-K, Kindergarten, Grade 1) to the page copy and product data. Found on 4 out of 6 competitors. On our page: weak — ages are mentioned only in navigation and product titles.

Besides the list of edits, the report has a "what's already good" section and demand context. All of it is in the public document covering all five pages.

Two caveats the agent states in the report itself. First, the samples are incomplete: it managed to open 4 pages out of 8, 6 of 9, 6 of 9, and 3 of 9. Pinterest, Scribd, and direct PDF files don't return HTML, so there's nothing to compare. Second, it found no demand data for the exact long-tail queries. Wordstat shows zero for an English-speaking audience, and Bing only reports the broader topic: "music coloring pages," for example, had 141 impressions over 4 weeks.

What the five queries showed

1. "music note tracing worksheets," position 10.0 — a ceiling of 1–2 positions

The top results belong to big players. Content work might move the page up 1–2 positions, no more. The agent still found gaps: grade levels and ages (3 of 4 competitors), sequential note reading from Middle C (3 of 4), and instrument-specific sections (2 of 4).

2–3. "music color by number" (10.5) and "music coloring sheets for elementary free" (15.5) — worth working on

Here the report gives a clear list. For color by number:

For the coloring pages, the main gaps are character-driven themes (5 of 6) and the total number of sheets available (3 of 6).

4. "bass clef note naming worksheets pdf," position 16.2 — the agent refused to suggest edits

Agent report: the results for bass clef note naming worksheets pdf are free PDFs, while the analyzed page is a paid product
Instead of a checklist, the agent flagged an intent mismatch: the results are free PDFs, and our page is a paid $2.50 product.

This is the most useful result of the whole run. The results are direct PDF files from school sites and free directories where the file downloads in one click. Our page is a $2.50 product with a cart. The searcher wants a free file, and added subtopics won't change that. On top of that, only 3 of the 9 results returned HTML, which is too few for a reliable comparison.

The agent offered two paths: retarget the product page to commercial queries (for example, "printable bass clef music theory worksheets for kids"), or build a separate free page with 1–2 PDFs that links to the full paid 10-worksheet pack.

5. "twinkle twinkle little star game," position 18.4 — nothing to compare

This is a game page with no text content. Contrast analysis doesn't apply.

What I changed right away

I deliberately left the snippets alone. Snippets move CTR, content moves position. Change both at once, and a month from now there's no telling which one worked.

What's in the report but not done yet

Seasonality: why the analysis runs every two weeks

The store is highly seasonal: back-to-school, Halloween, Christmas, Easter. In two weeks people will be searching for Halloween coloring pages, and a fresh export will surface different pages. So there are two cycles. A new export and analysis every two weeks, for pages that have just reached positions 10–20. A check after one month, for what has already been fixed.

That leads to a practical takeaway. Changes take weeks to show up in the results, so seasonal pages are better analyzed before the season, using last year's data, rather than waiting for them to surface on page two.

How I'll check the result

In a month, mid-October, I'll compare average positions. I'll look at each page as a whole, not at page + query pairs: with two impressions, any change is meaningless. And not at clicks: by October back-to-school demand will have faded, and clicks will drop no matter what I changed. I'll publish the result as an update to this article, even if it's zero.

What to take away

The agent behind this analysis runs in Orakul. The full report on all five pages is in the public document.

Update, September 29, 2026: what happened to the rankings

A month has passed and the check is done — twice, because the first time I measured the wrong thing. Below are both attempts: first the one that's useless, then the honest one. Unfortunately, the verdict on the edits didn't improve along the way.

As a reminder, here's what was done right after the analysis: "A4 PDF" and "Instant Download" badges on all products, a grade level field in the admin, and instant file delivery for free products. I deliberately left the snippets alone.

Attempt one: page + query pairs

Query Before
Aug 13 – Sep 12
After
Aug 31 – Sep 27
Change
music note tracing worksheets 10.0 (2 impressions) 8.1 (10 impressions) +1.9
music color by number 10.5 11.1 (7 impressions) −0.6
music coloring sheets for elementary free 15.5 6.2 (39 impressions) +9.3
bass clef note naming worksheets pdf 16.2 13.8 (8 impressions) +2.4
twinkle twinkle little star game 18.4 not measured no edits were made
Google Search Console: query music note tracing worksheets, 10 impressions, 1 click, average position 8.1
Attempt one: position 8.1 versus 10.0 a month ago. The sample is 10 impressions over 28 days.

It looks decent, which is exactly what makes this kind of measurement dangerous. It has two holes. The periods overlap: 13 shared days out of 28, so part of the "growth" is the same days appearing in both samples. And I measured something other than what I promised: the article says to look at a page as a whole, not at page + query pairs. Query three showed why pairs fall apart.

Google swapped the page

Google Search Console: two different pages now rank for the query music coloring sheets for elementary free
For "music coloring sheets for elementary free," Google now ranks the music theory worksheets tag page and an old blog post. Neither is the page we analyzed.

That jump from 15.5 to 6.2 happened where we made no edits at all. The page the agent analyzed, /tag/free-printable-music-coloring-pages/, no longer shows up for that query. Google ranks /tag/free-printable-music-theory-worksheets/ instead (2 clicks, 34 impressions), along with an old blog post, /blog/enhancing-elementary-music-lessons-with-music-colo/ (10 impressions).

The takeaway that justifies the whole exercise: the page that ranks isn't the one you picked to work on — it's the one Google picked. And Google changes its pick without telling you.

Attempt two: whole pages, against a baseline

The second measurement works differently. I take each page's average position across all its queries: before is June 15 – September 14, after is the week of September 21–27. No overlap. And crucially, I add a baseline: the same change for every other page on the site. The baseline is the median across 90 pages with at least 10 impressions that week and 40 over the three months.

The baseline came out at −1.85 positions. The site as a whole climbed almost two positions on its own. So our pages had to climb at least that much just to keep up.

Page Jun 15 – Sep 14 Sep 21–27 Δ vs. baseline
/tag/music-tracing-worksheets/ 8.17 9.21 +1.04 +2.89 worse
/tag/free-printable-music-theory-worksheets/ 16.33 8.45 −7.88 −6.03 better
/tag/free-printable-music-coloring-pages/ 24.44 20.94 −3.50 −1.65 better
/product/back-to-school-bass-clef-note-naming-worksheets/ 21.50 17.83 −3.67 −1.82 better

Three pages out of four beat the baseline and one fell behind. But before celebrating, look at where the biggest success happened. The page that beat the baseline hardest, by 6.03, is the music theory worksheets tag — the very page Google swapped into the results in place of the one we analyzed, and one that got no targeted edits. As for the bass clef product page, it had 6 impressions that week; at that volume its −1.82 means nothing.

There's a more direct test available. The "A4 PDF" and "Instant Download" badges went onto every product page, while tag and blog pages got nothing. That's a ready-made split between pages that were edited and pages that weren't:

The edited pages climbed less than the untouched ones. That doesn't prove badges hurt — the untouched group is only 11 pages. But it firmly settles whether a positive effect from the edits is visible in the data. It isn't.

Caveats

What was actually tested, and what wasn't

Before extending this verdict to the approach itself, it's worth stating what went into the measurement and what didn't.

So the correct way to state the result is this: three cosmetic edits, over a week and a half, on falling demand, produced no effect visible in the data. This measurement can't support the claim that contrast analysis doesn't work — its main recommendations were never implemented.

The agent did pay for itself once in this run, though not in rankings. It refused to suggest edits for bass clef and took off the table a page that has no business ranking in a SERP of free PDFs. Work not wasted is a result too; it just doesn't show up in Search Console.

What's next

Waiting another two weeks wouldn't help: the data would get noisier, not cleaner. The next round will be set up as a proper experiment.

I'll publish the result here either way.

Maxim Safianov
Maxim Safianov

I work at the intersection of technical SEO and software engineering: helping sites stay visible for classic search and AI answers alike, and building the Python tooling that automates it.

No comments yet — be the first to share your thoughts.

Python

Chris Green Built a Chrome Extension for This. In Orakul It's Just Text

On September 30, Chris Green wrote in Search Engine Journal that not every SEO task needs a frontier model: exact operations belong in code, light interpretation in a small local model, and the expensive frontier model should be called only for judgment. I built a product on exactly that principle. Here's how the same architecture gets assembled in text, with no code, and where my stack falls short of his design.

01 Oct 20266 min
GEO

Google's Top 10 Still Feeds AI Answers. Three Signals the Rules Are About to Change

The common view is that AI answers have already changed search. Under the hood it is still the same two-stage ranking pipeline. I checked this on data from anastasiya.studio: 74% of pages with impressions in AI Overviews and AI Mode rank in the top 10 and collect 92.6% of AI impressions. But Google has already published the theory that removes that pipeline, started paying for contributions to AI answers, and opened a Search Console report for them. Here are the three signals and what to do right now.

17 Sep 202610 min
SEO

Negative SEO Link Bombing Is Real. That SEJ Disavow Story Was Something Else.

A widely shared Search Engine Journal story about a Reddit user's ranking collapse is making the rounds as proof Google can't stop negative SEO. It isn't that story — it's about someone disavowing their own paid links by mistake. The real threat is separate, and one of our clients lived through it: a coordinated spam-link attack, a same-day disavow file, and months of Search Console data that still hasn't fully recovered.

06 Sep 20265 min