Illustrative case study

A fictional business. The figures are a modelled scenario, not a client result.

On air · Case studyGaidata AudioPodcast network, 14 shows · SofiaCreative & Media · 7 months

How a Bulgarian podcast network made 900 episodes findable in search

Gaidata Audio runs 14 shows out of a studio in Sofia. Search could hear none of them. We gave 912 episodes a voice Google could read, then rode the faders for 7 months.

Master out · headline

+1,240%

indexed episode pages

Indexed episode pages: 64 → 857

Programme · ep. 0001 → 0912REC
00:00transcribed · chaptered · indexed∞
VU LVU R

Mobile LCP

5.1s → 2.0s

  • 01Под Витоша
  • 02Малки бизнеси
  • 03Кодът на Балкана
  • 04Нощна смяна
  • 05Футбол без филтър
  • 06Кафе с наука
  • 07Balkan Code
  • 08Майки на линия
  • 09Градът
  • 10Звукова история
  • 11Стартъп Час
  • 12Пътят на виното
  • 13Без цензура
  • 14Детски приказки

IN 01The challenge · no signal

Nine hundred episodes, and search heard silence.

Episodes lived as embedded players with no text, slow pages and no structured data, so Google indexed almost nothing beyond show homepages.

Every episode was an embedded player with a title above it. To a crawler that is a page with no words, three megabytes of script and nothing to rank for. Only the 14 show homepages and a handful of trailers made it into the index, so the network's deep back catalogue, years of interviews in Bulgarian and English, earned no listens from search at all.

What the crawler heard · /episode/0412

Еп. 412: Как се прави стартъп в София

14.03 · Стартъп Час

<iframe> third-party player · 1.9 MB
words
38
schema
0
mobile LCP
5.1s

IN 02Diagnosis · line check

Eight faults on the line, from indexation to internal routing.

  • GA-01IndexFAIL

    Episode indexation

    64 of 912 episode URLs indexed; 790 "Crawled, currently not indexed"

  • GA-02ContentFAIL

    Words per episode page

    Median 38 words: a title, a date and an iframe player

  • GA-03SchemaFAIL

    Structured data

    No PodcastSeries or PodcastEpisode markup; RSS feeds not linked from pages

  • GA-04SpeedFAIL

    Mobile LCP (p75)

    5.1 s: 1.9 MB player bundle on every page, 2.4 MB PNG cover art

  • GA-05SpeedWARN

    Layout shift

    CLS 0.31: the player iframe loads with no reserved height

  • GA-06LinksFAIL

    Orphaned episodes

    71% reachable only through a JavaScript infinite scroll

  • GA-07IndexWARN

    Duplicate URLs

    /episode/, ?ep= and AMP variants: three URLs per episode, no canonical

  • GA-08ContentWARN

    Guests and topics

    410 named guests and 60 recurring topics, zero pages for either

FXThe strategy · insert rack

Four processors, patched in series on every episode page.

Built on our Signal plan (Technical SEO): fix what search can see and crawl first, then give it something worth ranking.

SLOT 1 · SCH-14

Podcast schema

Told search engines what every page actually is.

  • PodcastSeries markup on all 14 show hubs, PodcastEpisode on every episode with duration, date, season and an AudioObject for the file.
  • Each page links its RSS feed with rel="alternate", so the feed and the page reinforce each other.
  • BreadcrumbList from network to show to season to episode.
Series
Episodes
Feeds

SLOT 2 · TXT-900

Transcript indexing

Turned audio nobody could crawl into text everybody can search.

  • Bulgarian speech-to-text for all 912 episodes, then a human edit of names, places and brand terms.
  • Transcripts rendered server-side in HTML, chaptered with timestamped H2s that seek the player.
  • A 160-word summary and guest list above the fold, written for the searcher, not the feed.
Coverage
Edit pass
Chapters

SLOT 3 · CWV-2

Core Web Vitals

Took the weight off the page before the first byte of audio.

  • A click-to-load player facade replaced the 1.9 MB embed; the real player loads on intent.
  • Cover art re-encoded to AVIF and WebP at three sizes (2.4 MB to 38 KB), with reserved dimensions.
  • Episode pages statically generated, so the transcript is in the first HTML response.
LCP
CLS
JS

SLOT 4 · LNK-410

Internal linking

Routed every episode back into the network.

  • 410 guest pages and 60 topic hubs, each listing every episode the guest or topic appears in.
  • Paginated HTML season archives replaced infinite scroll, so no episode is more than three clicks deep.
  • Previous, next and three topic-matched episodes on every page.
Guests
Topics
Archive

ARRThe session · 7 months

The arrangement, bar by bar.

  1. M196 indexed

    Line check

    Crawl and log analysis, canonical rules for the three URL variants, transcript pilot on 40 episodes.

  2. M2210 indexed

    Gain staging

    Player facade and image pipeline ship; mobile LCP falls from 5.1 s to 3.4 s. Duplicates consolidated.

  3. M3380 indexed

    First takes

    Podcast schema across all 14 shows; HTML archives replace infinite scroll; 300 transcripts live.

  4. M4540 indexed

    Overdubs

    410 guest pages and 60 topic hubs; 600 transcripts live; sitemaps split per show.

  5. M5690 indexed

    Full session

    All 912 episodes transcribed and chaptered; long-tail queries start landing on mid-episode moments.

  6. M6790 indexed

    Mix

    Topic-matched related episodes on every page; listens from search attributed through the player.

  7. M7857 indexed

    Master

    55 trailers and reposts set to noindex; final speed pass holds LCP at 2.0 s on mobile.

MIXResults · the final mix

Four channels, all riding green.

Scroll the desk into view and the faders ride from the baseline to month 7. Scrub the transport to stop on any month, or solo a channel.

  • Indexed episode pages 64 → 857
  • Organic listens +186%
  • Mobile LCP 5.1s → 2.0s
  • Keywords from transcripts 3,400
CH 01

Indexed episode pages

pages

Indexed episode pages: 64 → 857. At M7: 857 pages.

INDEX
CH 02

Organic listens

% organic

Organic listens: +186%. At M7: +186 % organic.

LISTENS
CH 03

Mobile LCP

s mobile

Mobile LCP: 5.1s → 2.0s. At M7: 2.0 s mobile.

LCP
CH 04

Keywords from transcripts

from transcripts

Keywords from transcripts: 3,400. At M7: 3,400 from transcripts.

KEYWORDS

Modelled scenario for a fictional business — not a client result. Rankings and traffic are never guaranteed; see our Terms.

Cue sheet · rankings, Google.bg mobile

QueryLanding showM0M7Vol/mo
как да започна бизнесМалки бизнеси—74,400
приказки за заспиванеДетски приказки7232,400
подкаст за предприемачиСтартъп Час—31,900
изкуствен интелект българияКодът на Балкана—51,300
история на софияПод Витоша484880
bulgarian podcast in englishBalkan Code612720
футбол анализ подкастФутбол без филтър—1590
gaidata podcastNetwork hub21320

“—” means outside the top 100. Keywords from transcripts: 3,400 queries now reach an episode via its transcript; organic listens +186%.

Playback · “история на софия”

Before · #48

gaidata.bg › pod-vitosha

Под Витоша | Gaidata Audio

Подкаст за града. Слушайте всички епизоди.

After · #4

gaidata.bg › pod-vitosha › 87

Еп. 87: Тайните под Ларгото — Под Витоша

Археологът разказва за античната Сердика под центъра на София… 48 мин

00:00 Въведение12:40 Сердика31:15 Метрото

Your catalogue, on air

Get a plan like this

If your best work sits behind a player, a PDF or a JavaScript wall, Signal makes it something search can hear.

← All case studies