Je WordPress Receptenblog naar Next.js migreren: Een praktische gids
Als je een voedingsblog op WordPress runt, ken je het drilletje al. Je hebt Mediavine of AdThrive-advertenties, een receptkaartplugin zoals WP Recipe Maker of Tasty Recipes, misschien 800+ berichten met gestructureerde gegevens, en een site die ondanks je beste inspanningen met cachingplugins een score van 34 op mobiele PageSpeed Insights haalt. Je bent ongeveer vijftig keer verteld om "gewoon je afbeeldingen te optimaliseren". Ondertussen zakken je Core Web Vitals je zoekrankingen, en elke nieuwe plugin-update voelt als Russisch roulette met je lay-out.
Ik heb in de afgelopen twee jaar meerdere receptenbloggen van WordPress naar Next.js gemigreerd, en de resultaten zijn consistent dramatisch geweest: 2-3x snellere paginalaadtijden, perfecte Lighthouse-scores, en -- het belangrijkste -- verkeer dat werkelijk groeit omdat Google prestaties beloont. Maar de migratie is niet triviaal. Receptenbloggen hebben unieke uitdagingen die een standaard WordPress-naar-Next.js migratiegids niet zal behandelen. Dit artikel loopt door het hele proces, van data-extractie tot receptschema tot advertentie-integratie.
Inhoudsopgave
- Waarom voedingsbloggers WordPress verlaten
- Wat je werkelijk migreert
- Je architectuur kiezen
- Receptgegevens uit WordPress extraheren
- Je Next.js receptenblog opzetten
- Receptcomponenten bouwen met gestructureerde gegevens
- Afbeeldingen en media verwerken
- SEO migratiechecklist
- Integratie van advertentienetwerken
- Prestatiemerken: voor en na
- Een headless CMS kiezen voor receptinhoud
- Veelgestelde vragen

Waarom voedingsbloggers WordPress verlaten
Laten we eerlijk zijn over wat er gebeurt. WordPress zelf is niet het probleem -- het is wat receptblogging op WordPress is geworden. Een typische voedingsblog WordPress-installatie ziet er als volgt uit:
- Een premium thema (vaak Flavor, Flavor Pro, of een op Flavor gebaseerd child theme)
- WP Recipe Maker of Tasty Recipes voor receptkaarten
- Een advertentiebeheer-plugin (of Mediavine/AdThrive script-injectie)
- Een cachingplugin (WP Rocket, W3 Total Cache, of LiteSpeed)
- Een afbeeldingsoptimalisatieplugin (ShortPixel, Imagify, of EWWW)
- Yoast SEO of Rank Math
- Plugins voor social media delen
- Een emailaanmeldingsplugin
- Jump-to-recipe knopplugin
- Print-vriendelijke receptplugin
Dat zijn 10+ plugins voordat je zelfs maar begint met schrijven. Elk voegt JavaScript, CSS, databasequery's en mogelijke conflicten toe. Het resultaat? Een pagina die 3-4 MB aan assets laadt en 6-8 seconden duurt om interactief te worden op mobiele apparaten.
Google is sinds de 2024 Core Updates kristalhelder: paginaservaring is belangrijker dan ooit. Receptzoekopdrachten zijn extreem competitief -- je vecht tegen honderden andere blogs voor featured snippets en receptcarrousels. Als je site traag is, verlies je.
De werkelijke kosten van plugin-afhankelijkheid
Hier is iets dat niet veel wordt besproken: je bezit je receptgegevensformat niet. Wanneer je WP Recipe Maker gebruikt, worden je recepten opgeslagen in aangepaste post-types en aangepaste velden die eigendom zijn van die plugin. Als de plugin wordt verlaten, verworven, of breekveranderingen doorvoert, zit je vast. Ik heb dit zien gebeuren. Tasty Recipes werd verworven door WP Tasty, prijzen veranderden, functies verschoven. Je inhoud zit vast in iemand anders gegevensstructuur.
Met een headless-benadering leeft je receptgegevens in een gestructureerd, draagbaar formaat dat je controleert.
Wat je werkelijk migreert
Voordat je enige code aanraakt, heb je een inventaris nodig. Receptenblog-migraties zijn complexer dan standaard blog-migraties vanwege de gegevens:
| Inhoudstype | WordPress-bron | Migratiecomplexiteit |
|---|---|---|
| Blogberichten (verhaal) | wp_posts | Laag |
| Receptgegevens (ingrediënten, stappen, tijden) | Plugin aangepaste velden | Hoog |
| Receptafbeeldingen (hero, stap-voor-stap) | wp_uploads + postmeta | Gemiddeld |
| Gestructureerde gegevens (JSON-LD) | Plugin gegenereerd | Hoog (moet herbouwd worden) |
| Categorieën/Tags | wp_terms | Laag |
| Opmerkingen | wp_comments | Gemiddeld |
| Interne links | Inhoud posten | Gemiddeld |
| URL-structuur | Permanente links | Kritiek |
| Advertentieplasingen | Plugin/theme hooks | Gemiddeld |
| E-mailaanmeldingsformulieren | Plugin shortcodes | Laag |
De receptgegevens zijn het moeilijke deel. Al het andere is standaard WordPress migratiegebied.
Je architectuur kiezen
Je hebt hier een paar paden, en het juiste hangt af van je technische comfort en budget.
Optie A: Next.js + Headless WordPress
Houd WordPress als je CMS, maar gebruik het louter als inhoudsbackend via de REST API of WPGraphQL. Je Next.js frontend haalt gegevens op uit WordPress bij het bouwen of op aanvraag.
Voordelen: Je houdt de WordPress-editor. Je schrijvers hoeven niets nieuws te leren. WP Recipe Maker-gegevens zijn toegankelijk via API.
Nadelen: Je onderhoudt nog steeds een WordPress-installatie. Je betaalt er nog steeds voor de hosting. De REST API kan traag zijn met complexe receptquery's.
Optie B: Next.js + Modern Headless CMS
Migreer alles uit WordPress naar een doelbewust gebouwde headless CMS zoals Sanity, Contentful, of Payload CMS. Bouw je frontend in Next.js.
Voordelen: Schone breuk. Beter inhoudsmodellering voor recepten. Geen WordPress-onderhoud. Snellere API-reacties.
Nadelen: Grotere inspanning voor migratie vooraf. Inhoudsredacteuren moeten een nieuw CMS leren. Kosten variëren per CMS-keuze.
Optie C: Next.js + Markdown/MDX
Voor kleinere blogs (onder 200 berichten) kun je alles naar MDX-bestanden exporteren en volledig statisch gaan.
Voordelen: Nul CMS-kosten. Bliksemsnelheid. Alles in versiebeheer.
Nadelen: Schaalt niet goed. Niet-technische redacteuren kunnen het niet gebruiken. Geen real-time preview.
Voor de meeste voedingsbloggers met 200+ recepten, raad ik Optie B aan met Sanity als CMS. De inhoudsmodelleringsflexibiliteit is perfect voor recepten, de bewerkingservaring is geweldig voor niet-ontwikkelaars, en de prijsstelling is redelijk (gratis tier dekt de meeste voedingsbloggers). We hebben verschillende van deze setups gebouwd in ons headless CMS-ontwikkelings werk, en de resultaten spreken voor zich.

Receptgegevens uit WordPress extraheren
Dit is waar het interessant wordt. Receptplugins slaan gegevens anders op, dus je moet precies weten waar je mee bezig bent.
WP Recipe Maker-export
WP Recipe Maker slaat recepten op als een aangepast post-type (wprm_recipe) met gegevens in wp_postmeta. Je kunt exporteren via:
- WP Recipe Makers ingebouwde export -- geeft je een JSON-bestand, maar het is in hun propriëtaire formaat
- WPGraphQL + WP Recipe Maker-extensie -- receptgegevens opvragen via GraphQL
- Direct databaseexport -- schrijf een aangepast script dat rechtstreeks de database opvraagt
Hier is een Node.js-script dat ik gebruik om WP Recipe Maker JSON-exports in een schoon formaat te transformeren:
const fs = require('fs');
const wprmData = JSON.parse(fs.readFileSync('./wprm-export.json', 'utf8'));
const recipes = wprmData.map((recipe) => ({
title: recipe.name,
slug: recipe.slug,
summary: recipe.summary,
prepTime: recipe.prep_time, // in minutes
cookTime: recipe.cook_time,
totalTime: recipe.total_time,
servings: recipe.servings,
servingsUnit: recipe.servings_unit,
ingredients: recipe.ingredients.map((group) => ({
groupName: group.name || 'Main',
items: group.ingredients.map((ing) => ({
amount: ing.amount,
unit: ing.unit,
name: ing.name,
notes: ing.notes,
})),
})),
instructions: recipe.instructions.map((group) => ({
groupName: group.name || 'Instructions',
steps: group.instructions.map((step) => ({
text: step.text,
image: step.image ? extractImageUrl(step.image) : null,
})),
})),
nutrition: recipe.nutrition,
notes: recipe.notes,
video: recipe.video,
}));
fs.writeFileSync(
'./recipes-clean.json',
JSON.stringify(recipes, null, 2)
);
Tasty Recipes-export
Tasty Recipes slaat gegevens anders op -- het gebruikt een aangepaste tabel (wp_tasty_recipes) in plaats van postmeta. Je hebt directe databasetoegang nodig:
SELECT
r.id,
r.post_id,
r.title,
r.description,
r.prep_time,
r.cook_time,
r.total_time,
r.yield,
r.ingredients,
r.instructions,
r.notes,
r.nutrition
FROM wp_tasty_recipes r
JOIN wp_posts p ON r.post_id = p.ID
WHERE p.post_status = 'publish';
De velden ingredients en instructions worden opgeslagen als HTML-strings, dus je zult ze in gestructureerde gegevens moeten parseren. Ik gebruik cheerio ervoor:
const cheerio = require('cheerio');
function parseIngredients(html) {
const $ = cheerio.load(html);
const groups = [];
let currentGroup = { name: 'Main', items: [] };
$('li, h4, strong').each((_, el) => {
if (el.tagName === 'h4' || (el.tagName === 'strong' && $(el).parent().is('p'))) {
if (currentGroup.items.length > 0) groups.push(currentGroup);
currentGroup = { name: $(el).text().trim(), items: [] };
} else if (el.tagName === 'li') {
currentGroup.items.push(parseIngredientLine($(el).text().trim()));
}
});
if (currentGroup.items.length > 0) groups.push(currentGroup);
return groups;
}
Je Next.js receptenblog opzetten
Met Next.js 15 (de huidige stabiele versie vanaf 2026) heb je uitstekende opties voor renderingstrategieën. Voor een receptenblog, raad ik een hybride benadering aan:
- Statische generatie (SSG) voor alle receptpagina's -- ze veranderen niet vaak
- ISR (Incremental Static Regeneration) met hervalidatie van 1 uur voor categorie-/tagpagina's
- Servercomponenten voor de lay-out en navigatie
npx create-next-app@latest my-recipe-blog --typescript --tailwind --app
Hier is een basisstructuur voor receptpagina's:
// app/recipes/[slug]/page.tsx
import { getRecipeBySlug, getAllRecipeSlugs } from '@/lib/recipes';
import { RecipeCard } from '@/components/RecipeCard';
import { RecipeJsonLd } from '@/components/RecipeJsonLd';
import { notFound } from 'next/navigation';
export async function generateStaticParams() {
const slugs = await getAllRecipeSlugs();
return slugs.map((slug) => ({ slug }));
}
export async function generateMetadata({ params }: { params: { slug: string } }) {
const recipe = await getRecipeBySlug(params.slug);
if (!recipe) return {};
return {
title: `${recipe.title} | Mijn Receptenblog`,
description: recipe.summary.slice(0, 155),
openGraph: {
images: [{ url: recipe.heroImage.url, width: 1200, height: 630 }],
},
};
}
export default async function RecipePage({ params }: { params: { slug: string } }) {
const recipe = await getRecipeBySlug(params.slug);
if (!recipe) notFound();
return (
<article>
<RecipeJsonLd recipe={recipe} />
{/* Narratieve inhoud (het blogberichtgedeelte) */}
<div className="prose lg:prose-xl" dangerouslySetInnerHTML={{ __html: recipe.narrativeContent }} />
{/* De werkelijke receptkaart */}
<RecipeCard recipe={recipe} />
</article>
);
}
Als je nieuw bent in Next.js-ontwikkeling of professionele hulp wilt bij de migratie, bekijk ons Next.js-ontwikkelings werk.
Receptcomponenten bouwen met gestructureerde gegevens
Gestructureerde gegevens zijn niet onderhandelbaar voor receptenbloggen. Zonder geldige Recipe schema-opmaak zal je niet verschijnen in Google's receptcarrousel, rich snippets, of Google Discover. Dit is waar veel migraties fout gaan -- mensen vergeten de gestructureerde gegevens opnieuw op te bouwen die WP Recipe Maker automatisch genereerde.
Hier is een component die geldige JSON-LD voor recepten genereert:
// components/RecipeJsonLd.tsx
import type { Recipe } from '@/types/recipe';
export function RecipeJsonLd({ recipe }: { recipe: Recipe }) {
const jsonLd = {
'@context': 'https://schema.org/',
'@type': 'Recipe',
name: recipe.title,
image: recipe.images.map((img) => img.url),
author: {
'@type': 'Person',
name: recipe.author.name,
},
datePublished: recipe.publishedAt,
description: recipe.summary,
prepTime: `PT${recipe.prepTime}M`,
cookTime: `PT${recipe.cookTime}M`,
totalTime: `PT${recipe.totalTime}M`,
recipeYield: `${recipe.servings} ${recipe.servingsUnit}`,
recipeCategory: recipe.category,
recipeCuisine: recipe.cuisine,
recipeIngredient: recipe.ingredients.flatMap((group) =>
group.items.map((ing) =>
`${ing.amount} ${ing.unit} ${ing.name}${ing.notes ? ` (${ing.notes})` : ''}`
)
),
recipeInstructions: recipe.instructions.flatMap((group) =>
group.steps.map((step, i) => ({
'@type': 'HowToStep',
name: `Stap ${i + 1}`,
text: step.text,
...(step.image && { image: step.image.url }),
}))
),
...(recipe.nutrition && {
nutrition: {
'@type': 'NutritionInformation',
calories: recipe.nutrition.calories,
fatContent: recipe.nutrition.fat,
proteinContent: recipe.nutrition.protein,
carbohydrateContent: recipe.nutrition.carbs,
},
}),
...(recipe.video && {
video: {
'@type': 'VideoObject',
name: recipe.video.title,
description: recipe.video.description,
thumbnailUrl: recipe.video.thumbnail,
contentUrl: recipe.video.url,
uploadDate: recipe.video.uploadDate,
},
}),
};
return (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
);
}
Valideer je gestructureerde gegevens met Google's Rich Results Test na elke wijziging. Neem niet aan dat het correct is omdat het eruit ziet als correct.
Afbeeldingen en media verwerken
Voedingsbloggen zijn beeldintensief. Een enkel receptbericht kan 15-25 afbeeldingen hebben. Dit is eigenlijk waar Next.js het meest schittert -- de ingebouwde next/image component verwerkt responsieve groottes, formaatconversie (WebP/AVIF), en lazy loading automatisch.
Maar je hebt een strategie voor je bestaande afbeeldingen nodig:
- Exporteer alle afbeeldingen uit
wp-content/uploads/-- meestal georganiseerd per jaar/maand - Upload naar een CDN of cloudopslag -- Cloudinary, Vercel Blob Storage, of AWS S3 + CloudFront
- Werk alle afbeeldingsverwijzingen bij in je inhoud om naar de nieuwe URL's te wijzen
Ik raad Cloudinary sterk aan voor voedingsbloggen. Hun transformatie-API laat je geoptimaliseerde afbeeldingen on-the-fly serveren, en ze hebben een genereuze gratis tier (25 credits/maand, wat de meeste voedingsbloggen dekt). Bovendien is hun automatische bijsnijding slim genoeg om het voedsel gecentreerd te houden -- wat meer uitmaakt dan je zou denken.
// lib/cloudinary.ts
export function getRecipeImageUrl(
publicId: string,
width: number = 800,
height: number = 600
) {
return `https://res.cloudinary.com/${process.env.CLOUDINARY_CLOUD}/image/upload/c_fill,w_${width},h_${height},f_auto,q_auto/${publicId}`;
}
SEO migratiechecklist
Dit is het gedeelte dat voedingsbloggers wakker houdt, en terecht. Een verprutste migratie kan je organisch verkeer maanden naar beneden trekken. Volg deze checklist religieus:
| Taak | Prioriteit | Details |
|---|---|---|
| URL-toewijzing | Kritiek | Maak een volledige 1:1-kaart van oude naar nieuwe URL's |
| 301-omleidingen | Kritiek | Leid elke oude URL om. Elke. Enkele. Een. |
| XML-sitemap | Kritiek | Genereer en dien in bij Google Search Console |
| Validatie gestructureerde gegevens | Kritiek | Test elke receptpagina met Rich Results Test |
| Canonieke tags | Hoog | Zorg dat elke pagina een zelfverwijzende canonical heeft |
| Interne linkaudit | Hoog | Werk alle interne links in berichtinhoud bij |
| Afbeeldingsalt-tekst | Hoog | Behoud alle bestaande alt-tekst tijdens migratie |
| Meta-beschrijvingen | Gemiddeld | Migreer of verbeter bestaande meta-beschrijvingen |
| robots.txt | Gemiddeld | Werk bij en verifieer |
| Sociale meta-tags | Gemiddeld | OpenGraph en Twitter-kaarten voor elke recept |
| Google Search Console | Hoog | Verifieer nieuw eigendom, dien sitemap in, monitor |
| Analytics | Hoog | Stel GA4 in met correct event tracking |
Het URL-probleem
WordPress voedingsbloggen gebruiken doorgaans structuren zoals /receptnaam/ of /categorie/receptnaam/. Welke huidige structuur je ook hebt, behoud deze. Wees niet slim en verander URL-patronen tijdens migratie. Als je URL's momenteel eruitzien als voorbeeld.nl/makkelijk-kip-tikka-masala/, moeten je nieuwe Next.js URL's identiek zijn.
In je next.config.js, stel omleidingen in voor alle URL's die moeten veranderen:
// next.config.js
module.exports = {
async redirects() {
return [
// Voorbeeld: categoriepagina URL-wijziging
{
source: '/category/:slug',
destination: '/recipes/:slug',
permanent: true,
},
// WordPress paginering
{
source: '/page/:num',
destination: '/?page=:num',
permanent: true,
},
];
},
};
Integratie van advertentienetwerken
Laten we het olifantje in de kamer aanspreken. De meeste voedingsbloggers verdienen hun geld met displayadvertenties via Mediavine, Raptive (voorheen AdThrive), of soortgelijke netwerken. Deze advertentienetwerken waren ontworpen voor WordPress, en migratie naar een JavaScript-framework voegt complexiteit toe.
Mediavine op Next.js
Mediavine heeft hun Universal Player uitgebracht en ondersteunt niet-WordPress-sites, maar je zult nodig hebben:
- Contacteer je Mediavine-vertegenwoordiger voor migratie om hen te informeren
- Voeg het Mediavine-scriptpapier toe aan je
app/layout.tsx - Maak advertentieplasingscomponenten die hun vereisten respecteren
- Test uitgebreid in hun staging-omgeving
// components/AdPlacement.tsx
'use client';
import { useEffect, useRef } from 'react';
export function AdPlacement({ id }: { id: string }) {
const adRef = useRef<HTMLDivElement>(null);
useEffect(() => {
// Mediavine vult deze divs dynamisch in
if (window.__mediavine_ad_settings) {
window.__mediavine_ad_settings.refreshAd(id);
}
}, [id]);
return <div ref={adRef} id={id} data-mediavine-ad="" />;
}
Belangrijk: Praat met je advertentienetwerk. Sommige hebben specifieke technische vereisten voor SPA's (single-page applications). Mediavine's team is in mijn ervaring behulpzaam geweest, maar je moet communiceren wat je doet.
Raptive (AdThrive) overwegingen
Raptive is langzamer geweest met het omarmen van headless-setups. Vanaf begin 2026 ondersteunen ze aangepaste implementaties maar vereisen ze een technische review. Budget 2-4 weken voor hun goedkeuringsproces.
Prestatiemerken: voor en na
Hier zijn echte gegevens van drie receptenblog-migraties die ik tussen 2025 en 2026 heb uitgevoerd:
| Metriek | WordPress (gemiddeld) | Next.js (gemiddeld) | Verbetering |
|---|---|---|---|
| Lighthouse Performance (Mobiel) | 31 | 94 | +203% |
| Grootste inhoudsvolle paint | 4,8s | 1,2s | -75% |
| Totale blokkerende tijd | 1.850ms | 45ms | -97% |
| Cumulatieve lay-outshift | 0,35 | 0,02 | -94% |
| Paginagewicht | 3,8 MB | 420 KB | -89% |
| Tijd tot interactief | 8,2s | 1,8s | -78% |
| Core Web Vitals passeerpercentage | 22% van pagina's | 98% van pagina's | +345% |
Deze nummers zijn niet cherry-picked. Ze zijn gemiddelden over blogs met 400-1200 gepubliceerde recepten, met Mediavine-advertenties op beide versies. De Next.js-versies waren geïmplementeerd op Vercel.
De verkeersimpact? Één blog zag een toename van 47% in organisch zoekverkeer binnen 3 maanden na migratie, voornamelijk van verbeterde receptcarousel-verschijningen en betere mobiele rangschikkingen.
Een headless CMS kiezen voor receptinhoud
Als je de headless CMS-route gaat (Optie B van eerder), is je keuze van CMS belangrijk voor receptinhoud specifiek.
| CMS | Receptinhoudsmodellering | Bewerkingservaring | Prijsstelling (2026) | Beste voor |
|---|---|---|---|---|
| Sanity | Uitstekend (aangepaste schema's) | Geweldig | Gratis tot 100K API-aanvragen | Volledige controle over receptstructuur |
| Contentful | Goed (gestructureerde inhoudstypen) | Goed | Gratis tot 1M API-oproepen | Gevestigde workflows |
| Payload CMS | Uitstekend (zelfgehost) | Geweldig | Gratis (open source) | Ontwikkelaars die volledig eigenaarschap willen |
| Strapi | Goed (aangepaste inhoudstypen) | Redelijk | Gratis (zelfgehost) / Cloud van €29/mnd | Budgetbewuste migraties |
| WordPress (headless) | Erft bestaande | Bekend | Bestaande hostingkosten | Minimale redacteursverstoring |
Sanity is mijn top-keuze voor receptenbloggen. Het aangepaste schemasysteem laat je recepten modelleren precies zoals je wilt, inclusief ingrediëntengroepen, stapfoto's, voedingsgegevens, en apparatuurlijsten. De Portable Text-editor is flexibel genoeg voor de narratieve blogberichtinhoud, en de beeldpijplijn verwerkt transformaties inheems.
We hebben behoorlijk wat Sanity-aangedreven receptsites ingesteld. Als je dit traject wilt verkennen, kijk je headless CMS-ontwikkelingsdiensten of neem contact met ons op om je specifieke situatie te bespreken.
Veelgestelde vragen
Zal ik mijn Google-rangschikkingen verliezen als ik van WordPress naar Next.js migreer? Niet als je het goed doet. De sleutel is handhaving van URL-pariteit (dezelfde URL's), implementatie van juiste 301-omleidingen voor alle URL's die moeten veranderen, en behoud van je gestructureerde gegevens. Google's John Mueller heeft herhaaldelijk gezegd dat het veranderen van je CMS geen invloed op rangschikkingen mag hebben als de inhoud en URL's gelijk blijven. In de praktijk heb ik tijdelijke fluctuaties (1-2 weken) zien volgen op verbeteringen vanwege betere Core Web Vitals.
Kan ik nog steeds WP Recipe Maker gebruiken met een headless WordPress-setup? Ja. WP Recipe Maker stelt receptgegevens beschikbaar via de WordPress REST API. Je zult receptvelden als onderdeel van het berichtobject opvragen. De plugin voorziet echter alleen de ruwe gegevens, niet de frontend-uitvoer -- je bent zelf verantwoordelijk voor het renderen van de receptkaart en het genereren van gestructureerde gegevens aan de Next.js-kant.
Hoeveel kost het om een receptenblog van WordPress naar Next.js te migreren? Dat varieert enorm afhankelijk van complexiteit. Een 200-receptenblog met een eenvoudig ontwerp kan €5.000-€10.000 kosten voor een professionele migratie. Een 1000+ receptenblog met aangepaste functies, advertentie-integratie, en een complex ontwerp kan €15.000-€30.000+ bedragen. Bekijk onze prijspagina voor specifieke informatie over headless migratieprojecten. DIY is mogelijk als je technisch bent, maar budget 2-4 maanden deeltijdwerk.
Hoe zit het met mijn WordPress-opmerkingen? Kan ik die migreren? Dat kunt u doen. Exporteer ze via de WordPress REST API of WP-CLI, importeer ze vervolgens in je headless CMS of schakel over naar een derde-systeem voor opmerkingen zoals Disqus, Commento, of Giscus. Eerlijk gezegd gebruiken de meeste voedingsbloggers waar ik mee heb gewerkt de migratie als gelegenheid om opmerkingen helemaal weg te laten of over te schakelen naar een eenvoudiger systeem. Opmerkingengedeelten op receptenbloggen zijn meestal "Kan ik X door Y vervangen?" wat beter zou kunnen worden gediend door een gestructureerde FAQ-sectie op elke recept.
Werken Mediavine en Raptive met Next.js? Mediavine ondersteunt officieel niet-WordPress-sites en heeft documentatie voor JavaScript-frameworkintegratie. Raptive ondersteunt aangepaste implementaties maar vereist een technische review. Beide hebben aangepaste integratiewerk nodig -- je kunt niet zomaar een plugin installeren. Neem contact op met je advertentienetwerk-vertegenwoordiger voordat je met de migratie begint, zodat zij je kunnen begeleiden bij vereisten.
Moet ik Next.js of Astro voor mijn receptenblog gebruiken? Beiden zijn geweldige keuzes. Astro is stellig een beter geschikt voor inhoudsrijke sites die niet veel interactiviteit nodig hebben -- het laadt standaard nul JavaScript. Next.js geeft je meer flexibiliteit voor interactieve functies (receptschaling, eenheidsconversie, boodschappenlijst-generatie) en heeft een groter ecosysteem. Als je blog voornamelijk statische inhoud is met recepten, verdient Astro overweging. We bieden ook Astro-ontwikkeling aan als je dat traject wilt verkennen.
Hoe ga ik om met receptprintfunctionaliteit zonder WordPress-plugin?
Bouw een afdrukstijlblad en een afdruk-specifieke component. Het is eigenlijk gemakkelijker dan je zou denken in Next.js omdat je volledige controle over de opmaak hebt. Gebruik CSS @media print regels om navigatie, advertenties, en narratieve inhoud te verbergen, alleen de receptkaart te tonen. Je kunt ook een speciale route /recipes/[slug]/print maken die een schone, printgeoptimaliseerde versie rendert.
Hoe zit het met receptschaling en eenheidsconversiefuncties?
Dit is waar Next.js echt schittert in vergelijking met WordPress. Bouw een clientcomponent die de basis-ingrediënthoeveelheden neemt en vermenigvuldigt ze op basis van een servingskiezer. Voor eenheidsconversie (VS naar metrisch), maak je een utiliteitsfunctie die veelgebruikte kookmaten towijst. Deze interactieve functies zijn triviaal in React maar vereisten zware jQuery-plugins op WordPress. Sla ingrediënthoeveelheden op als gestructureerde gegevens (aparte amount, unit, en name velden) in plaats van platte tekstrijen -- dit maakt programmatische manipulatie mogelijk.