Kako koristiti Markdown za izradu statičnih stranica i blog postova

Kako koristiti Markdown za izradu statičnih stranica i blog postovaKako koristiti Markdown za izradu statičnih stranica i blog postova

28. lis. 2025. - 8 min

Roko Ponjarac

Roko Ponjarac

Software Engineer


Sadržaj svoje web stranice možete mijenjati bez mijenjanja React komponenti. Datoteke pišete u običnom tekstu. Sustav se brine o strukturi, renderiranju i SEO-u. Ova metoda čini sadržaj brzim, dosljednim i jednostavnim za rast.

Ovaj članak govori o tome kako koristimo Markdown za izradu statičnih stranica i blog postova na našim projektima. Proces ima strogu strukturu koja održava sadržaj jednakim kroz jezike i postavke.

Zašto koristiti Markdown?

Uz Markdown, imate potpunu kontrolu nad svojim sadržajem uz vrlo malo sintakse. Koncentrirate se na pisanje. Sustav se brine o parsiranju, generiranju HTML-a i metapodacima.

Važne prednosti za vas:

  • Mijenjate sadržaj bez korištenja frontend koda.
  • Koristite Git za verziranje sadržaja.
  • Podržavate više od jednog jezika i imate jasnu strukturu datoteka.
  • Održavate brzu izradu obradom na strani poslužitelja.

Tijekom vremena izrade (build time) ili renderiranja na poslužitelju (server rendering), poslužitelj obrađuje sve markdown datoteke.

Pregled sustava

Za rad pipelinea za markdown potreban je mali broj biblioteka.

BibliotekaFunkcija
GraymatterČita metapodatke iz blog postova.
RemarkObrađuje sintaksu za markdown.
Remark-gfmDodaje precrtavanje, tablice i popise zadataka.
remark-rehypePretvara markdown u HTML.
rehype-rawOmogućuje korištenje ugrađenog HTML-a (inline HTML).
rehype-stringifyGenerira konačni HTML.

Pišete u Markdownu. Sustav vraća čist HTML.

Struktura direktorija

Sve datoteke se nalaze u src/files.

Statične stranice su u sljedećim mapama:

  • src/files/static/en
  • src/files/static/hr

Blog postovi: src/files/blog/en i src/files/blog/hr

Postoji mapa za svaki jezik. Postoji verzija svake stranice ili posta na oba jezika. Za imena datoteka koristi se kebab case. Zajednički slugovi su ono o čemu ovisi prebacivanje jezika.

Ovaj izgled održava usmjeravanje (routing), SEO i prijevode sinkroniziranima.

Statične stranice

Statične stranice sadrže pravne dokumente, politike i druge opće informacije. U tim datotekama postoji samo markdown. Nema bloka metapodataka na vrhu.

Cijela datoteka se pretvara u HTML.

Koristite naslove, popise, tablice, blokove koda, poveznice, slike i ugrađeni HTML. GitHub-stil Markdown je i dalje u potpunosti podržan.

Izrada statične stranice

Prvi korak. Izradite datoteke koje su iste za svaki jezik. Primjer:

  • src/files/static/en/terms-of-service.md
  • src/files/static/hr/terms-of-service.md

Imena datoteka moraju biti ista na svim jezicima.

Drugi korak. U App Routeru dodajte rutu za stranicu. Koristeći lokalitet, tip i ime datoteke, ruta dobiva sadržaj kroz getPage. Stranica daje 404 pogrešku ako datoteka ne postoji.

import { getPage } from '@/lib/page';

const TermsOfService = async ({ params }: PageProps) => {
  const { locale } = await params;
  const content = await getPage(locale, 'static', 'terms-of-service');

  if (!content) {
    notFound();
  }

  return (
    <Layout>
      <StaticPage content={content} />
    </Layout>
  );
};

Treći korak. Dodajte metapodatke za SEO. Naslov i opis postavljate u datotekama za prijevod. Postoji drugačija verzija za svaki jezik.

Četvrti korak: Dodajte putanje koje su specifične za vašu lokaciju. Postavljate konfiguraciju usmjeravanja za mapiranje engleskih i hrvatskih URL-ova. Ovaj korak čini stvari jasnijima za korisnike i pomaže kod SEO-a.

Stranica se automatski pojavljuje na oba jezika nakon postavljanja.

Blog postovi

YAML frontmatter dodaje se markdownu u blog postovima. Ovaj blok postavlja metapodatke za SEO, usmjeravanje i stranice s popisima.

Svaki blog post ima:

  • Slug
  • Naslov
  • Putanja do naslovne slike
  • Datum objave
  • Kategorija
  • Oznaka za istaknuto (Featured Flag)
  • Ime autora
  • Izborni avatar za autora

Sustav izračunava procijenjeno vrijeme čitanja na temelju duljine sadržaja.

Pravila za Frontmatter

Front matter se nalazi na vrhu datoteke. Tri crtice (---) označavaju početak i kraj. Polja moraju biti upisana točno. Neispravne kategorije ili polja koja nedostaju uzrokuju neuspjeh izrade (builds to fail). Postoje samo četiri kategorije: frontend, backend, design i business. Slug je isti za obje jezične verzije istog posta.

---
title: Naslov mog blog posta
slug: my-blog-post-title
image: /images/blog/my-post-cover.webp
date: 2025-01-15
category: category-name
featured: false
author:
  name: Ivan Horvat
  avatar: /images/avatars/ivan.webp
---

Izrada blog posta

Prvi korak. Napravite naslovnu fotografiju. Fotografija treba imati rezoluciju od 1200 puta 630 piksela. Gdje: public/images/blog. Imenujte datoteku.

Drugi korak: Napravite markdown datoteke za svaki jezik. Lokacija: src/files/blog/en / src/files/blog/hr Slug bi trebao odgovarati imenu datoteke.

Treći korak. Napišite tekst. Koristite naslove za organiziranje posta. Popisi, tablice i blokovi koda mogu biti od pomoći. Provjerite jesu li vaši odlomci sažeti i fokusirani.

Četvrti korak. Uključite avatare za autore koji nisu obavezni. Stavite slike u public/images/avatars. U front matteru pokažite na putanju.

Peti korak: Provedite test.

  1. Uključite razvojni poslužitelj (dev server).
  2. Pogledajte popis blogova.
  3. Idite na stranicu posta.
  4. Provjerite oba jezika.
  5. Provjerite slike i vrijeme koje je potrebno za čitanje.

Stranice s često postavljanim pitanjima (FAQ)

Postoji strogi markdown obrazac za FAQ stranice.

  • Naslovi s jednom hash oznakom (#) pokazuju što su grupe.
  • Pitanja su definirana naslovima s dvostrukom hash oznakom (##).
  • Odgovor je sve ispod pitanja do sljedećeg naslova.

Sustav automatski raščlanjuje grupe i pitanja. Odgovori se mogu u potpunosti formatirati s markdownom.

Ova struktura pruža dijelove harmonike (accordion parts) s potrebnim sadržajem bez potrebe za bilo kakvim dodatnim postavljanjem.

API za sadržaj

Sav pristup markdownu ide kroz pomoćne funkcije.

FunkcijaVraća
getPageHTML za statičnu stranicu.
getBlogPostsPopis metapodataka postova.
getBlogPostCijeli post sa svim sadržajem.
// Dohvati HTML za statičnu stranicu
const content = await getPage('en', 'static', 'privacy-policy');

// Dohvati sve blog postove
const posts = getBlogPosts('en');

// Dohvati pojedinačni blog post po slugu
const post = await getBlogPost('en', 'my-blog-post-slug');

Nikada ne biste trebali dirati logiku sustava datoteka u komponentama.

Kontrolni popis za sadržaj

Za statične stranice:

  • Postoje oba jezika.
  • Postoje načini da se dođe do njih (rute).
  • Postoje metapodaci.
  • Putanja su korisne.
  • Stranice se prikazuju.

Za blog postove:

  • Postoji naslovna slika.
  • Ispunjen je front matter.
  • Slug se podudara na oba jezika.
  • Kategorija je važeća.
  • Post se prikazuje na popisu.
  • Stranica posta se učitava u redu.

Česti problemi

  • Ako postovi nedostaju na blogu, obično je to zato što su u pogrešnoj mapi ili imaju nevažeći front matter.
  • Ako vidite pogreške slugova, to znači da postoje problemi s YAML sintaksom.
  • Često netočne putanje ili imena datoteka dovode do problema sa slikama.
  • Nakon izmjena, lokalizirane rute moraju se ponovno pokrenuti na poslužitelju.

Ukratko

Ovaj markdown sustav olakšava rad s kodom i sadržajem. Sadržaj pišete samo jednom. Sustav se brine o arhitekturi, renderiranju i lokalizaciji. Stvari objavljujete brže. Sadržaj ostaje isti. Skaliranje sadržaja je i dalje lako.

Spremni za razgovor?

Pošaljite kratki uvod kako bismo dogovorili uvodni poziv. Poziv se fokusira na vaše izazove i ciljeve te ocrtava prve korake prema pravom digitalnom rješenju.

Kako koristiti Markdown za izradu statičnih stranica i blog postova | Workspace