DEV Community

Jakub
Jakub

Posted on

Programmatic SEO with an AI agent: 9 styles N breeds, what actually indexed

We run Pet Imagination, a free AI pet portrait generator with 9 art styles (Renaissance, Watercolor, Anime, Sketch, Sheriff, Wizard, Astronaut, Final Boss, Blocky). The core product works fine, but we wanted each style-breed combination to be its own indexable landing page. Golden Retriever in Renaissance style, Poodle in Anime, Maine Coon in Watercolor - every permutation.

The math is straightforward: 9 styles × ~150 popular breeds = ~1,350 pages. We used an AI agent to generate them, then tracked what Google actually indexed over 8 weeks via GSC. This post covers the technical setup, the indexation results, and the edge cases nobody warns you about.

The matrix

Each page follows the same template: breed name, style name, a sample portrait, and roughly 200 words of unique description explaining why that particular combination works (why a Husky suits the Watercolor style, why a Dachshund looks good in the Wizard outfit). The descriptions are not spun - each one references specific visual traits of the breed and how the style handles them.

URL structure: petimagination.com/{breed}-{style}-portrait

We started with 47 dog breeds (the most searched ones according to keyword volume data) across all 9 styles = 423 pages in the first batch. Cat breeds came later, adding another 180 pages.

Generation pipeline

The agent reads a breed list, pulls physical trait data (size, coat type, face shape, coloring), and writes a page description that connects those traits to the art style. A Bernese Mountain Dog in Renaissance style gets a description about how the tri-color coat translates to oil-paint layering. A Siamese in Sketch style gets a note about how the angular face structure works well with line art.

Each page took about 4 seconds to generate. The whole first batch of 423 pages went live in under 40 minutes. We deployed through Lovable, which handles the routing and SSR.

The key technical choice: we rendered each page server-side with its own <title>, <meta description>, and <h1>. No client-side rendering, no hash routing. Google needs to see the content without executing JavaScript, and we made sure it could.

What GSC showed after 8 weeks

Week 1-2: Google discovered about 60% of the pages through the sitemap. Crawl rate was roughly 30-50 pages per day. The pages showed up in GSC as "Discovered - currently not indexed."

Week 3-4: Indexation started picking up. Pages with higher keyword volume breeds (Golden Retriever, German Shepherd, Labrador) indexed first. By the end of week 4, about 210 of the 423 dog breed pages were indexed - roughly 50%.

Week 5-6: The long tail started indexing. Breeds like Vizsla, Weimaraner, and Basenji made it in. We hit about 340 indexed pages (80%).

Week 7-8: Plateau. The remaining 20% stayed in "Discovered - currently not indexed" or "Crawled - currently not indexed." These were almost exclusively low-volume breeds combined with less popular styles (Final Boss, Blocky).

Final tally after 8 weeks: 78% indexation rate for the dog breed matrix. Cat breeds followed a similar curve but about one week behind.

What indexed vs. what did not

Three patterns stood out:

High volume breed + any style = indexed. Golden Retriever pages indexed across all 9 styles within the first 3 weeks. Breed search volume was the strongest predictor of indexation, not style popularity.

Low volume breed + popular style = usually indexed. A Basenji in Watercolor style indexed because Watercolor is one of the top-performing styles by user engagement. Google seemed to follow internal link signals - more popular styles have more traffic flowing through them.

Low volume breed + niche style = coin flip. Xoloitzcuintli in Final Boss style is still not indexed after 8 weeks. Neither is Azawakh in Blocky. These pages get almost zero internal traffic and the keyword combinations have near-zero search volume. Google does not bother.

Edge cases that cost us time

Duplicate content flags. The first version of our descriptions was too templated. We used a structure like "The {breed} is known for {trait}. In {style} style, this translates to {visual}." Google grouped about 30 pages as near-duplicates. We rewrote the generation prompt to vary sentence structure, paragraph length, and the order of information. The duplicates cleared after a re-crawl.

Breed name variants. "German Shepherd" vs "German Shepherd Dog" vs "GSD." We picked the highest-volume variant per Google Keyword Planner and set up redirects from alternatives. This matters because people search differently than breeders name.

Compound breed names in URLs. golden-retriever-renaissance-portrait is readable. cavalier-king-charles-spaniel-astronaut-portrait is not. We kept the full name for SEO but added breadcrumbs and shorter display titles on the page itself.

Style names that mean something else. "Sketch" as an art style competes with "Sketch" the design tool in search. "Final Boss" returns gaming content. These styles indexed fine but ranked lower than expected because the keyword intent is split.

Internal linking matters more than we expected

The single biggest lever for getting the long-tail pages indexed was internal linking. Each style hub page (/renaissance-portraits, /watercolor-portraits) links to all breeds in that style. Each breed page links to the same breed in other styles. This creates a tight mesh.

When we added a "Related breeds" section to each page (3-4 breeds with similar physical traits), indexation of the remaining unindexed pages jumped by about 12 percentage points over the following two weeks. The mesh got denser, and Google followed.

Numbers we track now

We monitor three things weekly:

  1. Indexation rate per style - some styles consistently underperform. Blocky sits at 68% indexed vs. Watercolor at 94%.
  2. Click-through by page type - breed pages with sample portraits in the search snippet (via structured data) get 2.3x more clicks than those without.
  3. Cannibalization - we watch for cases where two breed-style pages compete for the same query. Has not been a real problem so far because the long-tail queries are specific enough.

Would we do it again

Yes, but we would start with fewer breeds. The first 47 breeds (top keyword volume) account for about 85% of the total organic traffic from the matrix. The remaining 100+ breeds add incremental traffic that is real but small. If you are building a similar matrix, start with the head terms, validate indexation, then expand.

The AI agent made the generation fast, but the real work was the indexation monitoring and the iteration on content quality. Generating 1,350 pages takes an afternoon. Getting Google to actually index and rank them takes months of tweaking.

Pet Imagination is free to use - upload a photo, pick a style, get a portrait in under 60 seconds.

Top comments (1)

Collapse
 
fromzerotoship profile image
FromZeroToShip

The internal-linking bump is the part I'm sitting with. I just added related/next-post links across a small blog on a hunch, and your +12pp number turns that hunch into something I can actually reason about — mesh over isolation. And "Golden Retriever indexed in 3 weeks, Xoloitzcuintli never" is a great gut-check against the "just generate more pages" reflex: Google indexes demand, not effort. Did the un-indexed long-tail pages eventually pull any traffic once you linked them, or did they mostly stay dead weight?