Mini-Project Submission SEO Lead @ Zoviz Apr 2026

Zoviz technical SEO audit & programmatic page strategy

Candidate
Omid Eslami
Submitted to
Zoviz Hiring Team
Scope
Technical audit + programmatic strategy
Data sources
Ahrefs, manual crawl, SERP inspection
00 · Performance context

The authority is there. The traffic isn't.

Before the audit, it's worth grounding everything in the story the Ahrefs history tells. Zoviz built real authority on the back of a fast backlink ramp and a content explosion in 2024–2025, then lost 61% of its organic traffic in five months while Domain Rating kept climbing. That pattern (authority up, traffic down) points away from link issues and straight at content quality and technical hygiene, which is what this audit targets.

Organic traffic vs. Domain Rating · Jan 2024 – Apr 2026

Monthly organic traffic (left axis) plotted against Domain Rating and referring domains (right axes). Source: Ahrefs.
Peak traffic
149,984
Nov 2025
Current
57,682
−61.5% vs peak
Domain Rating
64
+37 since Jan '24
Referring domains
4,074
+15.6× since Jan '24
01 · Technical SEO audit

Top 5 priorities for the first two weeks

Ordered by ratio of impact to implementation effort. The first three are cheap fixes with outsized SEO consequences; the last two are structural and will take coordination with engineering but directly address the traffic decline visible above.

01
Fake AggregateRating in schema markupCritical · Penalty risk

The JSON-LD Product schema claims an AggregateRating of 4.86 stars from 4,261 reviews. None of that rating is visible on the page. No star widget, no review count, no numerical average, and no reviews section matching the numbers. The same 4.86 / 4,261 figures are then repeated across dozens of service pages.

Why it matters

Google's structured-data guidelines explicitly prohibit marking up content not visible on the page. Repeating an identical rating across many pages amplifies the signal from "oversight" to "systematic spam." Consequences escalate from loss of rich results to site-wide manual actions under Spammy structured markup. For a branding platform whose entire SEO funnel relies on Product rich snippets, this is the single most exposed risk on the site.

Fix

Either render real, per-page reviews into the DOM and let schema reflect that, or strip AggregateRating from pages that can't support it. Not both hidden and page-wide.

02
Canonical English URLs 302-redirect via an HTTP downgradeCritical · Hreflang-breaking

Observed redirect chain for https://zoviz.com/about/:

https://zoviz.com/about/ → 301 http://zoviz.com/about ← HTTPS downgrade
http://zoviz.com/about → 307 https://zoviz.com/about
https://zoviz.com/about → 302 https://zoviz.com/ar/about ← language redirect on a cookie
https://zoviz.com/ar/about → 200

Two compounding problems

(a) The canonical English URL redirects server-side based on a language cookie (TdwVuGzjzMvXrmPN=ar). Google's hreflang guidance is explicit: don't auto-redirect by perceived language; use a banner. When Googlebot crawls from a non-English IP or re-enters with a stale cookie, the English canonical bounces to a locale variant, diluting its ranking signals and flattening hreflang clusters. (b) The first hop drops to plain HTTP. HSTS saves most visitors silently, but the chain itself is 4 hops instead of 1, wasting crawl budget and tripping every SEO crawler's redirect-chain warning.

Fix

Replace cookie-based 302 language redirects with a soft locale suggestion banner. Rewrite the trailing-slash edge rule to 301 directly to the final HTTPS URL in one hop.

03
Localized subdirectories (/tr, /ar, /id, /pt) are systemically under-localizedCritical · Correlates with traffic loss

This is the issue most tightly correlated with the traffic decline shown earlier. /tr lost 86% of its traffic, /ar lost 53%, and both are homepages that cascade quality signals to their entire subdirectory. Manual inspection of those pages turns up a consistent pattern of half-localized content. The shell is translated, the substance isn't.

Customer testimonials never translated

Every testimonial on /tr reads "John, Small Business Owner" and "Lisa, Graphic Designer" in English, which feels jarring to a Turkish reader and reads as a quality signal to Google's raters.

Section headings don't match their body copy

On both / and /tr, the "Social media profiles & covers" section contains text about multilingual logo support. The "Business cards" section contains text about logo creation speed. The translation pipeline carried the mismatch across languages.

Blog titles are English inside a Turkish/Arabic UI

The blog chrome on /tr is Turkish ("Tasarım", "8dakika okundu"), but every post title ("Best AI Image Editing Tools Online", "Best Free Poster Makers Online in 2026") stays in English. A user sees a page that half-speaks their language.

Awkward literal translation fragments

"Built Right In" was a marketing tagline on the English page, and translators treated it as a paragraph opener. Turkish readers now see "Doğrudan Entegre" starting a sentence, which no native speaker would write.

Image alt text and app-store badges never localized

Every <img> on /tr keeps the same English alt text as /. App Store and Google Play badges use English alt on Turkish and Arabic pages, even though Apple and Google ship localized assets.

Taken together, this is the fingerprint of an automated translation pipeline injected into an English template without native-speaker review. Google's late-2025 and early-2026 core updates have both specifically targeted thin, programmatically-localized content, which is the most plausible explanation for the November 2025 peak and subsequent decline.

Fix

Audit the 12 locales top-to-bottom. Route content through native-language reviewers for the four worst-hit (TR, AR, ID, PT) first. Localize testimonials, alt text, app-store badges, and blog titles. Fix the headline/body mismatches at source so translations stop inheriting them.

04
Localized URLs missing from the sitemap + robots.txt conflictsHigh

static-0.xml lists only the 192 English URLs as <loc> entries. The 12 locales per URL exist only as hreflang alternates inside those English entries. Google tolerates this; Bing, Yandex, Baidu, and DuckDuckGo heavily prefer explicit <loc> for every indexable URL. With 192 pages × 12 locales, roughly 2,300 indexable URLs are being under-declared to every non-Google crawler, and localized pages get far less crawl priority even from Google.

Separately, robots.txt disallows three URLs that are still listed in the sitemap:

  • /hire-expert
  • /website-creation
  • /marketing-automation

Search Console flags these as "Submitted URL blocked by robots.txt", a self-inflicted crawl conflict.

Fix

Generate one <loc> per (page, locale) pair with a full hreflang cluster on each, or split into per-language sitemaps referenced from the index. Reconcile the three blocked URLs: decide whether they're indexable, then update one file, not both.

05
Blog internal links append ?srsltid, creating duplicate indexable URLsHigh · Indexation hygiene

Internal blog links are being written with a trailing ?srsltid query parameter. On a representative post, the link at XPath //*[@id="dynamic"]/div[2]/div[2]/div[1]/div[1]/div[3]/div[7]/p/a points to https://zoviz.com/blog/how-to-build-brand-awareness?srsltid=…, which Google will treat as a second, parameterized version of the canonical URL. The pattern is widespread inside the blog's internal-link graph.

Why it matters

srsltid is Google's Merchant Center click-tracking parameter; it's designed to appear on Google-hosted referral URLs, not on internal site links. When the site itself emits it, three things go wrong in sequence: (a) Google indexes both the clean and parameterized URLs, doubling the indexed footprint for every affected post; (b) ranking signals (links, engagement, dwell) split between the two URLs; (c) the resulting duplicate bloat sits precisely on the blog, the content surface most exposed to the Helpful Content algorithm's quality signals. At Zoviz's scale, this is not a cosmetic issue; it's quiet, cumulative index pollution.

Fix

Strip ?srsltid from internal link generation at the source template. Ensure every blog page emits a clean rel="canonical" pointing to the parameter-less URL. Add a URL-parameter rule classifying srsltid as tracking, not a content variant.

Secondary findings (would schedule for weeks 3–6)

Core Web Vitals risk: 101 of 120 images missing width/height

Before looking at specific attributes, the public field data makes the problem concrete. Google's Core Web Vitals Summary of this origin on phones as of 2026-04-11 (CrUX Vis) shows zoviz.com failing the CWV assessment at origin level on mobile. In other words, the CWV problem is not a one-page outlier. It is site-wide and already visible in the real-user data Google uses for ranking.

CrUX Vis chart for zoviz.com origin on mobile showing the share of users rated Poor (top, red), Needs Improvement (middle, amber), and Good (bottom, green) over the period 2025-06-22 to 2026-04-18. The Poor band dominates, Needs Improvement is slowly shrinking toward Poor, and the Good band sits near zero.
CrUX Vis, p75 distribution of user experiences for zoviz.com on mobile, 2025-06-22 to 2026-04-18. The vast majority of real-user sessions fall into the Poor band, a smaller share into Needs Improvement, and almost none into Good. The shape is stable across ten months, which rules out a one-off regression and points at a persistent, structural CWV problem.
Poor Needs Improvement Good

The homepage-level cause is easy to spot: 101 of 120 images have no width attribute and 110 of 120 have no height. Without intrinsic dimensions, the browser reserves no space before load, so content jumps as images lazy-load, directly inflating CLS and producing visible jitter during first paint. Combined with the 4-hop redirect chain in issue #02, LCP also drifts in the wrong direction. Fix: add width and height to every <img>, or set aspect-ratio in CSS. Trivial template change with a measurable CWV impact.

Heading hierarchy skips levels

The homepage jumps from <h2>Logo designs that match your industry</h2> directly to <h4>Real Estate logo</h4>. Breaks screen-reader navigation and dilutes topical structure. Change h4s to h3s.

Case-sensitive 404s

/About and /Pricing return hard 404s. Low-impact, but a soft 301 to lowercase catches typos and copy-paste errors from email and docs.

01b · Sample page audit

Zoviz /logo-maker vs. the 17 GEO/LLMO principles

One page audited against a GEO (Generative Engine Optimization) framework to show how the content layer scores in an AI-search world. The technical hygiene is decent; the content layer reads as a marketing brochure, not a searchable, chunkable topical resource. The single most telling finding: zero reasoning-reflective tokens ("because", "therefore", "as a result") across 1,993 words of body copy. Every claim is asserted without explanation. That is exactly the pattern AI models penalize as reward-hacked copy.

Principle
Observation
Score
01
Reasoning authority over keyword density: claims like "non-template" and "unique" go unsupported
Fail
02
Long-form logical analysis: 1,993 words of feature-list prose, no trade-off analysis
Fail
03
Atomic content via semantic HTML: 2 <section>, 0 <article>
Partial
04
Query-to-chunk relevance: no H2 is phrased as a user query
Fail
05
Front-load chunks with their topic: most paragraphs open with "Zoviz…" rather than the topical entity
Partial
06
Reasoning-reflective tokens: zero because, therefore, consequently, so that
Fail
07
Intent optimization: covers only "make a logo"; misses "what is a good logo", "text vs icon", industry intents
Fail
08
Cover alternative queries: 11 FAQs vs. 15+ typical of top-ranking pages
Partial
09
E-E-A-T for commercial queries: no press mentions on page, AggregateRating in schema only
Fail
10
Graph-like interlinking: 175 internal links (good volume) but most point at other product pages, not topical sub-articles
Partial
11
Structured data: Product, HowTo, FAQPage, AggregateRating present; missing BreadcrumbList, Review, Article, WebSite
Partial
12
Fine-grained categories: no industry or style subcategory pages linked from /logo-maker
Fail
13
Semantic variations: "logo maker" heavy, no LSI expansion (wordmark, monogram, emblem, logotype)
Partial
14
Evergreen relevance: generic enough, but no lastModified signal or visible refresh cadence
Partial
15
Isolate depth content from commercial: 21 CTAs on a single page; depth mixed with sales pitches
Fail
16
Author-centric SEO: no author on this page or any blog post checked
Fail
17
Multi-turn reasoning pathways: FAQ answers are dead-ends, no "see also" links
Fail

Tally · 10 fails · 7 partials · 0 passes out of 17

02 · Programmatic page strategy

Three page patterns to move from 90K to 250K

Head terms like name generator (526K GV, KD 86) and business name generator (183K GV, KD 84) are owned by Namelix, Shopify, and Looka. The real opening is splitting the generic page into many specific pages (by business sub-niche and by language), where KD drops to 0–15 while demand stays meaningful. All three recommendations below fit Zoviz's existing product (a multilingual name/logo generator already used in 100+ languages and scripts), so the marginal build cost is low.

1
Business sub-niche name generators
/[business-type]-name-generator

43 distinct business types have search demand with keyword difficulty of 0–15. This is the single highest-leverage pattern because it maps directly onto Zoviz's core product. A user searching "bakery name generator" is a textbook buyer. The SERP for most of these is dominated by Shopify and Namelix with thin tool pages; a page with (a) a working generator, (b) 20+ example names in the niche, (c) a naming guide specific to that business type, and (d) related industry logo links back to /logo-ideas/[industry] will outperform them on depth.

Pages to build
43
Combined GV
115,350
Avg KD
~3

Top 10 targets by global monthly volume

Sub-nichePrimary keywordGVTraffic potentialKD
Band / Musicband name generator21,00021,0006
Instagraminstagram name generator17,00052,00013
Podcastpodcast name generator15,00016,0005
TikToktiktok name generator7,80032,0003
Book publishingbook name generator7,70024,00013
Restaurantrestaurant name generator7,2008,1003
Farmfarm name generator7,00013,0000
Clothing brandclothing brand name generator4,8002,9008
Food truckfood truck name generator4,6006000
DJdj name generator4,4006,0001

Full list (43 niches) available on request. Remaining 33 sit at KD 0–15 with combined GV ≈ 20,000.

2
Language & culture name generators
/[language]-name-generator

A parallel dimension with even larger combined demand: 119 language/culture keywords at KD ≤ 15 totaling ~152K monthly searches. This pattern maps cleanly onto Zoviz's positioning: the platform already supports 100+ languages and scripts, so a /japanese-name-generator page is a native product surface, not a bolt-on. Intent is split (some visitors are founders, many are fiction writers, gamers, or worldbuilders), so conversion rates will be lower than Type 1, but at this scale the top-of-funnel value is substantial and the audience overlaps naturally with Zoviz's creative-tools cross-sell (logo, branding, AI image).

Pages to build
119
Combined GV
152,250
Avg KD
~2

Top 10 targets by global monthly volume

Culture / languagePrimary keywordGVTraffic potentialKD
Japanesejapanese name generator42,00070,0004
Germangerman name generator7,10013,0004
Russianrussian name generator6,90015,0002
Frenchfrench name generator6,0007,9000
Norse / Vikingviking name generator5,80017,0004
Greekgreek name generator5,1002,1001
Italianitalian name generator3,9005,0000
Spanishspanish name generator3,4002,9002
Arabicarabic name generator3,3003,7001
Britishbritish name generator2,8001,3001

Secondary expansion: gender-modifier children like /japanese-name-generator/male, /chinese-name-generator/female add another ~15,000 GV across ~30 pages.

3
Industry-specific logo ideas pages
/logo-ideas/[industry]

Zoviz already ships the pattern (/logo-ideas/restaurant). The data shows 21 additional industry pages at KD 0–2: near-trivial to rank, near-zero competition. Total extra volume is smaller than Types 1 and 2 (~19K combined) but the conversion intent is the highest of the three: someone searching "bakery logo ideas" is in the middle of the purchase funnel for a logo tool. This is also the pattern most defensible against AI-search disintermediation. The page shows 40+ real logo examples plus the generator, which a raw LLM response cannot replace.

Pages to build
21
Combined GV
19,250
Avg KD
<1

Top 10 targets by global monthly volume

IndustryPrimary keywordGVTraffic potentialKD
Clothing brandclothing brand logo ideas2,1005,4002
Cafecafe logo ideas2,0003,3000
Bakerybakery logo ideas1,8002,7000
Photographyphotography logo ideas1,4005000
Podcastpodcast logo ideas1,3002,8000
Cleaningcleaning logo ideas1,0002,4000
Real estatereal estate logo ideas1,0004,3000
Coffee shopcoffee logo ideas9001,4000
Landscapinglandscaping logo ideas8001,6000
Bandband logo ideas8005001

Combined opportunity sizing

Global monthly volume unlocked per pattern at keyword difficulty ≤ 15.

Recommended sprint-one scope

A pragmatic first quarter: ship the top 10 of Type 1 and the top 10 of Type 2 (20 pages) on a shared template with a rigorous content spec (one genuinely useful naming guide per page, localized testimonials, and schema that matches the DOM, avoiding the issue flagged in #01 above). Combined theoretical ceiling is ~180,000 global monthly searches, roughly double current organic traffic, before the Type 3 expansion and before any halo effect from the technical fixes.

03 · Brief case study

Wallgold: from zero organic presence to category leadership in twelve months

Responding directly to the brief's third request: a project where I significantly grew organic traffic, with the starting point, the strategy, and the results in specific numbers. The screenshot is from Ahrefs because I no longer have Google Search Console access for the Wallgold property, but the shape of the curve and the ranking outcomes are consistent with what GSC showed while I was there.

Context

Wallgold is an Iranian gold-trading and precious-metals platform. When I joined in April 2025, the product had effectively zero organic visibility in an already crowded market (MiliGold, Talasea, Hamrashgold, Taline, Goldika). SEO tickets sat at the bottom of a general engineering backlog and were regularly deprioritized. There was no Product SEO function.

Role
SEO Lead, first hire for Product SEO
Period
Apr 2025 to present
Market
Iran, gold trading and precious metals
Stack
WordPress, custom product surface

The starting point

A flat line. The Ahrefs estimate for monthly organic clicks hovered at or near zero from the launch of tracking through the end of October 2025. Competitor sites were already indexing and ranking for the category's highest-intent transactional keywords. The core problem was not a lack of content ideas, it was an execution bottleneck: the business had SEO needs but no dedicated surface to convert those needs into shipped product changes.

The strategy: Product-Led SEO, not SEO-as-a-service

The decision I pushed for was structural rather than tactical. Instead of chasing keywords or running an audit-and-ticket cycle against the engineering team, I built a dedicated Product SEO function whose output was product changes, not recommendations. That function stood on three pillars.

PILLAR 01

Velocity

Decoupled the Product SEO workflow from the general engineering roadmap. Instead of SEO tickets waiting in a shared backlog for months, the Product SEO team had its own design, dev, and deployment capacity. Time-to-market on an SEO change dropped from quarters to days.

PILLAR 02

Technical ownership

Built an SEO-First architecture owned end-to-end by the Product SEO team: a Senior SEO Specialist leading a Technical Team (Senior WordPress dev + Technical Infrastructure Consultant), an Editorial team (gold market trader + Content Manager), a Product designer, and an off-site SEO consultant. Every new feature shipped with SEO in the design, not bolted on after.

PILLAR 03

Marketing enablement

Positioned Product SEO as the technical backbone for Marketing. Built the architecture for the Anjoman Ashbah (Ghost Association) community hub, the landing-page infrastructure for the Irancell and Japan-lottery campaigns, and the raffle systems for the Ghayesi and Japan live lottery shows (which needed to stay up under peak traffic).

Key innovationberppy — internal AI automation layer

Instead of hiring more specialists, I built berppy — a proprietary internal tool that replaced about 160 hours of monthly specialist work.

  • berppy Core fully automates research and requirements-gathering for every single ticket
  • berppy QA runs 24/7 continuous quality control on every tag, every piece of content, and every ticket before it reaches production

The real point is not "we use AI."
It's cost efficiency (one tool equals one less headcount) plus de-risking (almost zero deployment errors on the live site).

This is exactly what let a small Product SEO team ship at the velocity shown above.

Results

The Ahrefs organic traffic curve tells the clearest version of the story. A flat line from April through October 2025, the first slow rise through November and December as the earliest shipped changes began to index, a breakout spike in late February 2026 when the Japan-lottery campaign landing-page infrastructure compounded with the earlier technical work, and a stable run-rate between 7,000 and 8,000 monthly organic clicks thereafter.

Ahrefs organic traffic chart for wallgold showing traffic starting at near zero from 21 April 2025 through October 2025, a gradual rise through November 2025 to January 2026 reaching about 3,000 monthly clicks, a sharp spike around 27 February 2026 peaking at approximately 12,000 monthly clicks, a correction, and a recovery to around 8,000 monthly clicks by 20 April 2026.
Ahrefs, estimated monthly organic traffic for wallgold, 21 Apr 2025 to 20 Apr 2026. The first green marker at 27 Feb 2026 coincides with the Japan-lottery campaign launch that Product SEO shipped the infrastructure for. The second marker is the report date.
Starting traffic
~0
Apr 2025 baseline
Peak traffic
~12K
27 Feb 2026, Ahrefs est.
Current run-rate
~8K
Apr 2026, post-correction
Rank #1 keywords
11
high-intent transactional

The ranking picture is where the strategy really shows. Across eleven of the category's highest-value transactional keywords (the "buy/sell water-gold" cluster in Persian), Wallgold sits at Rank 1 on Google Iran. The nearest competitor, MiliGold, is usually at 2 or 3 on the same terms. Taline, the weakest competitor in the set, bounces between 11 and 23. Ranking the entire priority keyword set at position 1 against a field of five established competitors is the part of the result I am most proud of, because it is the part that came from the product-led structure rather than from any specific content piece.

Rank tracker screenshot showing eleven Persian-language keywords in the melted-gold trading category. The first rank column is Wallgold, holding position 1 on every keyword. The adjacent columns show the corresponding positions for Mili Gold (ranging from 2 to 8), Talasea (4 to 13), Hamrahgold (3 to 5), Taline (11 to 23), and Goldika (2 to 9).
Rank tracker view for eleven transactional keywords in the Persian melted-gold cluster (خرید طلا آبشده, خرید و فروش طلا آبشده, فروش طلا آب شده, and nine related variants). Wallgold holds Rank 1 on every keyword in the set. The nearest competitor, MiliGold, sits between 2 and 8; Hamrahgold between 3 and 5; Taline between 11 and 23. All rankings are on Google Iran, mobile.

Closing note

Happy to walk through any of this in more detail. Thank you for the opportunity. The problem is a good one.

Omid Eslami · Apr 2026