Een Podcastgast-directory bouwen: 137 profielen, één database
Vertaling naar Nederlands
De meeste podcast-gastendirectories zijn SaaS-platforms. Ze zijn prima voor algemene discovery, maar vallen uit elkaar wanneer je iets specifiek nodig hebt -- zoals een curated, branded directory gekoppeld aan het eigen ecosysteem van je podcast. Dit was precies het probleem dat WP Legends tegenkwam. Ze hadden 137 WordPress-experts die in hun show waren verschenen, en ze wilden een doorzoekbare, filterbare database waar luisteraars (en mogelijke sponsors) deze gasten konden browsen op expertise, aflevering en onderwerp. Geen vermelding van derden. Hun eigen ding, op hun eigen domein, onder hun eigen merk.
We hebben het gebouwd. Hier is hoe, waarom en wat we anders zouden doen.

Inhoudsopgave
- Het probleem met bestaande podcast-gastendirectories
- WP Legends: De projectbrief
- Architectuurbeslissingen
- Datamodellering voor gastprofielen
- Implementatie van zoeken en filteren
- Prestatie- en schaalbaarheidszaken
- Directoryplatforms en benaderingen vergelijken
- Wat we hebben geleerd bij het bouwen hiervan
- Veelgestelde vragen
Het probleem met bestaande podcast-gastendirectories
Voordat we ingaan op het bouwen, helpt het te begrijpen waarom WP Legends niet gewoon een bestaand platform gebruikte. Er zijn er veel van:
- PodcastGuests.com heeft meer dan 42.000 gebruikers en heeft sinds 2020 meer dan 19.000 interviews gefaciliteerd
- PodMatch maakt gebruik van AI-gestuurde matching met een dating-app-stijl interface en heeft sterke traction in de podcastingcommunity
- Rephonic indexeert meer dan 3 miljoen podcasts met luisteraarsdemografie en downloadramingen
- MatchMaker.fm bediend een community van meer dan 25.000 leden
- RadioGuestList.com voert sinds 2008 een reverse-model uit (hosts posten verzoeken, gasten solliciteren)
Deze platforms lossen een echt probleem op: hosts verbinden met gasten die ze nog nooit hebben ontmoet. Maar WP Legends had een ander behoefte. Ze hadden al 137 mensen geïnterviewd. Ze wilden deze gasten tonen -- hun expertise, hun afleveringsverschijningen, hun beschikbaarheid voor andere shows -- op een manier die op de WP Legends-site zelf woonde.
Denk eraan als minder een matchmaking tool en meer als een alumni directory. Branded, doorzoekbaar en sterk geïntegreerd met de bestaande inhoud van de podcast.
Geen off-the-shelf platform geeft je dat. Niet zonder je domeinautoriteit, je designsysteem of je data-eigendom op te offeren.
WP Legends: De projectbrief
WP Legends is een podcast gericht op het WordPress-ecosysteem -- ontwikkelaars, agency-eigenaren, plugin-creators, thema-ontwerpers, communitygenoten. Na drie jaar afleveringen hadden ze een indrukwekkende rij gasten maar geen goede manier om die rij aan bezoekers te tonen.
De brief was eenvoudig:
- Een doorzoekbare directory van alle 137 gastprofielen
- Filterbaar op expertisegebied (development, design, business, community, enz.)
- Elk profiel linkt naar de aflevering(en) waarop ze verschenen
- Gastprofielen bevatten bio, headshot, social links en expertisegebieden
- Snel. Echt snel. Geen loading spinners voor een directory van deze grootte.
- SEO-vriendelijk -- elk gastprofiel moet zijn eigen indexeerbare pagina zijn
- Gemakkelijk voor het WP Legends-team om nieuwe gasten toe te voegen wanneer afleveringen worden gepubliceerd
Het budget was bescheiden. De timeline was strak. Dat gaat meestal zo.
Waarom geen WordPress-plugin?
Terechte vraag. WP Legends was al op WordPress, dus waarom geen gebruik van iets zoals GravityForms + een custom post type, of een directory plugin zoals Business Directory Plugin?
We hebben het overwogen. Maar de WordPress-plugin route had drie problemen:
- Prestatie -- Client-side search op WordPress met 137+ profielen en meerdere taxonomy filters wordt snel traag, vooral op gedeelde hosting
- Designflexibiliteit -- De meeste directory plugins leggen hun eigen markup en styling op. WP Legends had een specifieke design language die ze wilden behouden
- Toekomstige schaal -- Ze waren van plan uit te breiden tot meer dan 137 profielen. De architectuur moest 500+ zonder degradatie aankunnen
We gingen in plaats daarvan headless.

Architectuurbeslissingen
De stack die we hebben gebruikt:
- WordPress als headless CMS -- WP Legends was al comfortabel met de WordPress admin. Geen reden om dat eruit te trekken. We hebben het ingesteld als een content backend alleen, met WPGraphQL om de data beschikbaar te maken.
- Next.js frontend -- Voor de directorypagina's, zoekinterface en individuele gastprofielen. Server-side rendering voor SEO, client-side filtering voor snelheid.
- Algolia voor zoeken -- 137 profielen hebben Algolia niet nodig. Maar de instant search UX en gefacetteerde filtering maakten de ervaring premium aanvoelen. En op deze schaal zit je comfortabel in de gratis tier.
Dit is het soort project waar een headless CMS-benadering echt schijnt. Het content team werkt in een interface die ze al kennen (WordPress admin), en het frontend team heeft volledige controle over presentatie en prestatie.
Waarom Next.js boven Astro?
We hebben dit uitgezocht. Voor een voornamelijk content-gestuurde directory zou Astro een sterke keuze zijn geweest -- kleinere JavaScript bundles, uitstekende statische generatie en geweldige prestatie uit de doos.
Maar de interactieve zoek- en filtervereisten duwden ons naar Next.js. De directory listingpagina had real-time filtering nodig zonder pagina reload, en Next.js's hybride rendering model (statische pagina's voor individuele profielen, dynamische rendering voor zoeken) was een schonere match.
Als de directory puur browse-gebaseerd zou zijn zonder zoeken, zou Astro gewonnen hebben.
Datamodellering voor gastprofielen
Het correct krijgen van het datamodel was kritiek. Dit is wat elk gastprofiel bevat:
type GuestProfile {
id: ID!
name: String!
slug: String!
bio: String!
headshot: MediaItem
expertise: [ExpertiseArea!]!
socialLinks: SocialLinks
episodes: [Episode!]!
website: String
availableForGuesting: Boolean
location: String
company: String
role: String
featuredQuote: String
}
type ExpertiseArea {
name: String!
slug: String!
}
type SocialLinks {
twitter: String
linkedin: String
github: String
mastodon: String
}
type Episode {
title: String!
slug: String!
publishedDate: DateTime!
episodeNumber: Int!
}
In WordPress vertaalde dit naar:
- Een custom post type genaamd
podcast_guest - Een custom taxonomy genaamd
expertise_areamet termen zoals "Plugin Development", "Agency Operations", "Theme Design", "Community Building", "WordPress Core", "WooCommerce", "Performance Optimization" - ACF (Advanced Custom Fields) voor gestructureerde data -- social links, bedrijf, rol, featured quote, beschikbaarheidstoggle
- Een relationship field die gasten verbindt met afleveringen (die een ander custom post type waren)
De WPGraphQL + ACF integratie maakte dit allemaal netjes beschikbaar. Eén GraphQL query haalt je alles wat je nodig hebt voor een profielpagina.
query GetGuest($slug: String!) {
guestBy(slug: $slug) {
title
guestFields {
bio
company
role
website
availableForGuesting
featuredQuote
socialLinks {
twitter
linkedin
github
}
}
expertiseAreas {
nodes {
name
slug
}
}
featuredImage {
node {
sourceUrl
altText
}
}
relatedEpisodes {
nodes {
title
slug
date
}
}
}
}
Implementatie van zoeken en filteren
Dit is waar het project interessant werd. 137 profielen is niet veel data, maar de UX verwachtingen waren hoog. Het WP Legends team wilde het soort onmiddellijk, gefacetteerd zoeken dat je ziet op e-commerce sites -- typ een trefwoord, klik een categorie, zie resultaten onmiddellijk bijwerken.
Algolia-integratie
We synchroniseerden WordPress-inhoud naar Algolia met behulp van een custom sync script dat wordt uitgevoerd op post publish/update hooks. Elk gastprofiel wordt een Algolia record met doorzoekbare attributen:
const guestRecord = {
objectID: guest.id,
name: guest.title,
bio: guest.guestFields.bio,
company: guest.guestFields.company,
role: guest.guestFields.role,
expertise: guest.expertiseAreas.nodes.map(e => e.name),
episodeCount: guest.relatedEpisodes.nodes.length,
available: guest.guestFields.availableForGuesting,
headshot: guest.featuredImage?.node?.sourceUrl,
slug: guest.slug,
};
Op de frontend gebruikten we Algolia's InstantSearch React library met custom widgets:
import { InstantSearch, SearchBox, RefinementList, Hits } from 'react-instantsearch';
import { algoliasearch } from 'algoliasearch';
const searchClient = algoliasearch('APP_ID', 'SEARCH_KEY');
export default function GuestDirectory() {
return (
<InstantSearch searchClient={searchClient} indexName="podcast_guests">
<SearchBox placeholder="Search guests by name, topic, or expertise..." />
<RefinementList attribute="expertise" />
<Hits hitComponent={GuestCard} />
</InstantSearch>
);
}
Zoekresultaten worden bijgewerkt in minder dan 50ms. Voor 137 records is dit eerlijk gezegd overkill -- maar het UX verschil tussen Algolia's instant results en een traditioneel form-submit zoeken is dag en nacht.
Kunt u Algolia overslaan?
Absoluut. Voor 137 profielen kunt u alle data laden bij het bouwen en client-side filteren doen met iets zoals Fuse.js of zelfs een eenvoudig Array.filter(). We hebben dit eerst ook geprototypeerd.
De reden dat we toch voor Algolia kozen: het WP Legends team wilde typotolerantie, synonymmatching (zoeken op "ecommerce" moet "WooCommerce" matchen) en de mogelijkheid om resultaten te wegen op afleveringsaantal. Dit goed vanaf nul doen is meer werk dan gewoon Algolia's gratis tier gebruiken.
Op 137 records zit u comfortabel in Algolia's gratis plan (10.000 zoekverzoeken/maand, 10.000 records).
Prestatie- en schaalbaarheidszaken
Statische generatie voor profielpagina's
Elk van de 137 gastprofielen wordt statisch gegenereerd bij het bouwen met behulp van Next.js generateStaticParams. Dit betekent:
- Elk gastprofiel laadt in minder dan 200ms (geen server-side berekening op verzoektijd)
- Elke pagina is volledig indexeerbaar door zoekmachines
- Core Web Vitals zijn uitstekend -- LCP onder 1.2s, CLS van 0, FID onder 50ms
export async function generateStaticParams() {
const guests = await getAllGuestSlugs();
return guests.map((guest) => ({
slug: guest.slug,
}));
}
ISR voor frisse data
We gebruiken Incremental Static Regeneration met een 60-seconden revalidatievenster. Wanneer het WP Legends team een nieuw gast toevoegt in WordPress, worden de directorypagina en nieuwe profielpagina binnen een minuut opnieuw gegenereerd -- geen handmatige deploymenten nodig.
Wat zit er in 500+ profielen?
De architectuur verwerkt dit zonder wijzigingen. Algolia schaalt naar miljoenen records op betaalde plannen. Statische generatie in Next.js verwerkt duizenden pagina's routinematig. De WordPress admin met ACF werkt prima op deze schaal. Het enige wat u zou willen toevoegen op 500+ is paginering of infinite scroll op de directory listing, wat InstantSearch uit de doos afhandelt.
Directoryplatforms en benaderingen vergelijken
Hier is hoe de custom-built benadering zich verhhoudt tot het gebruik van bestaande platforms:
| Factor | SaaS Directory (PodMatch, etc.) | WordPress Plugin | Custom Headless Build |
|---|---|---|---|
| Installatie tijd | Minuten | Uren | Dagen tot weken |
| Maandelijkse kosten | Gratis–$50/ma | Gratis–$100 (plugin licentie) | Alleen hosting ($0–20/ma) |
| Merkcontrole | Minimaal | Matig | Compleet |
| SEO voordeel | Geen (woont op hun domein) | Volledig | Volledig |
| Data-eigendom | Beperkt (hun platform) | Volledig | Volledig |
| Zoekkaliteit | Goed (hun technologie) | Basis tot matig | Uitstekend (Algolia, enz.) |
| Design flexibiliteit | Laag | Laag tot matig | Onbeperkt |
| Content team UX | Aparte login, aparte interface | WordPress admin | WordPress admin |
| Schaal tot 500+ profielen | Ja | Degradeert | Ja |
| Onderhoudsbelasting | Geen (SaaS handelt het af) | Plugin updates, conflicten | Frontend + CMS updates |
De eerlijke waarheid: als u alleen maar wilt worden ontdekt als podcast gast, meld u aan voor PodMatch of PodcastGuests.com. Ze zijn gratis en ze werken. Maar als u de directory wilt bezitten -- als het een kernonderdeel van uw merk en contentstrategie is -- is de custom build het waard.
Wat we hebben geleerd bij het bouwen hiervan
Contentmigratie was het moeilijkste deel
De technische bouw duurde ongeveer twee weken. Migratie van 137 gastprofielen -- correct headshots verzamelen, huidige bio's, nauwkeurige social links, expertise tags verifiëren -- duurde drie weken. De les: budget meer tijd in voor content dan voor code. Altijd.
De "Available for Guesting" toggle was geniaal
Dit was een late toevoeging. Elk gastprofiel heeft een boolean veld: "Beschikbaar voor andere podcasts?" Gasten die zich inschrijven krijgen een subtiel badge op hun profiel. Dit transformeerde de directory van een retrospectief archief in een live resource. Andere podcast hosts begonnen het te gebruiken om WordPress gasten te vinden.
Die enige functie stuurde meer verkeer naar de directory dan alles anders.
Schema Markup is belangrijk
We voegden Person schema markup toe aan elke gastprofielpagina:
{
"@context": "https://schema.org",
"@type": "Person",
"name": "Guest Name",
"jobTitle": "Role",
"worksFor": {
"@type": "Organization",
"name": "Company"
},
"url": "https://wplegends.com/guests/guest-slug",
"sameAs": [
"https://twitter.com/handle",
"https://linkedin.com/in/handle"
]
}
Binnen twee maanden verschenen verschillende gastprofielen in Google's knowledge panels voor naamzoeken. Dat is een tastbaar SEO voordeel dat geen third-party directory platform kan leveren.
Over-engineer uw taxonomie niet
We begonnen met 23 expertisecategorieën. Dat was veel te veel. Met slechts 137 profielen hadden de meeste categorieën minder dan 5 items -- wat filteren voelt kapot. We consolideerden tot 8 brede categorieën, en de UX verbeterde onmiddellijk.
Een goed vuistregel: elke filteroptie moet minstens 10 resultaten retourneren om bruikbaar te voelen. Pas uw taxonomie dienovereenkomstig aan.
Resultaten na zes maanden
De cijfers die WP Legends met ons deelden nadat de directory zes maanden live was:
- Directory pagina's maken 34% van het organische verkeer naar de site uit
- Gemiddelde tijd in directory: 3 minuten 42 seconden -- mensen bladeren echt
- 47 inbound links van andere WordPress blogs die specifieke gastprofielen refereren
- 12 gastboekingsverzoeken kwamen via de directory van andere podcast hosts
- Core Web Vitals: alle pagina's slagen op zowel mobiel als desktop
Dat is een content asset die toeneemt. Elke nieuwe aflevering voegt een nieuwe indexeerbare pagina aan de directory toe.
Veelgestelde vragen
Hoeveel kost het om een custom podcast guest directory te bouwen? Voor een project als dit -- 137 profielen, doorzoekbaar en filterbaar, headless WordPress met een Next.js frontend -- kijkt u naar bouwkosten in het bereik van $8.000–$15.000 afhankelijk van design complexiteit en content migratiebehoeften. Doorlopende hostingkosten zijn minimaal: Vercel's gratis tier handelt de frontend af, en beheerde WordPress hosting kost $20–50/maand. Controleer onze pricing pagina voor huidige headless projectramingen.
Kan ik een gastdirectory bouwen met alleen WordPress en geen headless setup? Ja, maar met trade-offs. Een custom post type met ACF en een directory plugin zoals FacetWP voor filteren werkt prima voor kleinere directories (onder 50 profielen). Voorbij dat, begint u WordPress's front-end prestatiebeperkingen te bestrijden, vooral op gedeelde hosting. De headless benadering kost meer vooruit maar schaalt veel beter.
Wat is de beste zoekoplossing voor een kleine directory (onder 200 records)? Voor onder 200 records hebt u drie solide opties: Algolia's gratis tier (10.000 zoekverzoeken/maand), client-side zoeken met Fuse.js (nul kosten, werkt offline), of Meilisearch self-hosted (open source, snel). Algolia geeft u de beste out-of-the-box UX met typotolerantie en gefacetteerd filteren. Fuse.js is het eenvoudigst om te implementeren als u geen fuzzy matching nodig hebt.
Hoe zorg ik ervoor dat podcast gasten hun eigen profieldata indienen? De WP Legends benadering was slim: ze stuurden elke vorige gast een korte vorm (gebouwd met Gravity Forms) waarin om een huidige bio, headshot, social links en expertisegebieden werd gevraagd. De formulierinzendingen voederden direct in WordPress als concept gastprofielen voor het team om te beoordelen. Ongeveer 80% van de gasten reageerde binnen twee vervolgmails. Mensen willen over het algemeen vermeld worden -- het is gratis promotie voor hen.
Zou ik een SaaS platform zoals PodMatch in plaats van mijn eigen directory moeten bouwen? Het hangt van uw doel af. Als u nieuwe gasten voor uw show wilt vinden, zijn PodMatch en PodcastGuests.com uitstekend en meestal gratis. Als u uw bestaande gasten als een content asset op uw eigen domein wilt tonen, hebt u een custom build nodig. Ze lossen verschillende problemen op. Veel podcasters gebruiken beide.
Hoe handelt u SEO voor individuele gastprofielpagina's af? Elke profielpagina krijgt een unieke title tag ("Guest Name -- WordPress Expert | WP Legends"), meta description getrokken uit hun bio, Person schema markup en een Open Graph afbeelding met hun headshot. De combinatie van gestructureerde data en unieke inhoud op elke pagina maakt ze indexeerbaar en competitief voor op naam gebaseerde zoeken. We hebben gastprofielen zien ranken op pagina één voor de gast's naam binnen 4-8 weken.
Wat is de beste headless CMS voor een podcast directory? WordPress met WPGraphQL is moeilijk te verslaan als uw team al WordPress kent. De content modellering met Custom Post Types en ACF is flexibel, en het ecosysteem is massief. Als u opnieuw begint en geen WordPress expertise hebt, zijn Sanity of Contentful sterke alternatieven met betere developer experience voor gestructureerde inhoud. We behandelen de opties in diepte op onze headless CMS development pagina.
Hoe houdt u gastprofielen in de loop van de tijd bijgewerkt? Dit is het onglorious gedeelte. We hebben een eenvoudige jaarlijkse revisie workflow gebouwd: eenmaal per jaar stuurt het systeem elke gast een e-mail met een link om hun profielinformatie bij te werken. Ongeveer 60% reageert. Voor de rest doet het WP Legends team een snelle handmatige controle -- verifieer dat het bedrijf en de rol nog steeds nauwkeurig zijn, werk gebroken social links bij. Het kost ongeveer 2 uur per kwartaal voor 137 profielen. Niet nul onderhoud, maar beheersbaar.