Ajánlatot kérek
Munkák
  • Oldalhálózat és tartalommotor
  • Titoktartás alatt
20267 perces olvasmány

Márkaoldal-hálózat

47 márkaoldal egy kódbázisból és egy közös CMS-ből, egy tartalommotorral, amely kulcsszóból cikkpiszkozatot ír, és egy Telegram-bottal.

Röviden

  • Egy Next.js-kódbázis és egy Strapi CMS szolgál ki 47 márkaoldalt, mindegyiket a saját domainjén, a kérés címéből felismerve.
  • A tartalommotor kulcsszóból vázlatot, majd cikket ír, ellenőrzi, és piszkozatként tölti fel, cikkenként nagyjából 0,02 USD-ért.
  • Egy cikk csak a minőségkapukon át jut tovább, és minden cikk szerkesztői jóváhagyással jelenik meg.
  • Egy Telegram-bot ugyanazoknak a márkáknak az ajánlatait egyetlen, helyben frissülő üzenetben vezeti végig.

Egy kódbázis, egy CMS és egy tartalommotor visz 47 márkaoldalt, és minden cikk szerkesztői jóváhagyással jelenik meg.

Számokban

  • 47

    márkaoldal fut egy kódbázisból, mindegyik saját domainnel

  • 63

    komponens épül a közös CMS-ben, 13 tartalomtípushoz

  • 33

    csomópont dolgozik a tartalommotor n8n-folyamatában

  • 0,02

    USD nagyjából egy cikk modellköltsége egy menetben

Kiindulás

A hálózat egymárkás oldalakból áll. Minden partnermárkának saját oldala van, saját domainnel, és az oldal arra a keresésre válaszol, amely a márka nevével indul: ajánlatokra, értékelésekre és útmutatókra. Összesen 47 ilyen oldal fut egy rendszerből.

A platform nem nálunk indult. Az alapját 2025 novemberében egy másik fejlesztő rakta le, az első felületét 2026 elején egy harmadik építette. 2026 februárjában vettük át, és újraépítettük: a 121 commitból 97 a miénk, 33 munkanapon. A tartalommotort és a Telegram-botot mi írtuk.

Három rész dolgozik együtt. A platform szolgálja ki az oldalakat. A tartalommotor ugyanabba a CMS-be ír cikkpiszkozatot, és a CMS adataiból dolgozik. A bot ugyanazoknak a márkáknak az ajánlatait viszi Telegramra.

Bérlők egy kódbázisban

Egy kérés útja a domain felismerésével kezdődik. A rendszer a kérés címét kisbetűsíti, levágja a portot és a „www.” előtagot, majd lekéri a hozzá tartozó oldalt a CMS-ből, kérésenként egyszer. Ha a válasz üres, egyszer, gyorsítótár nélkül újrapróbálja, hogy egy hidegen induló CMS ne hozzon üres oldalt. Ismeretlen domainre egy üres váz érkezik, egyik márka arculata nélkül.

A CMS oldallistája belső tokent és kötelező domainszűrőt kér, így kívülről senki nem tudja kilistázni a bérlőket. A gyorsítótár kulcsában benne van a bérlő szűrője, az újraérvényesítés címkéi a bérlő azonosítójával kezdődnek, így két oldal gyorsítótára soha nem keveredik. A CMS egy webhookkal bérlőnként és tartalmanként érvényteleníti, ami változott. A médiafájlok minden bérlő saját domainjén át érkeznek, és egy ütemezett feladat ötpercenként közzéteszi az időzített piszkozatokat.

A tartalommodell 13 tartalomtípusból és 63 komponensből áll. Egy márkaoldal beállításai 67 mezőben élnek, az oldalak dinamikus zónákból épülnek, és a megjelenítő 35 szekciótípust ismer. A jogi szövegek közös sablonok, oldalankénti változókkal.

Az arculatot is a CMS adja. A márka színei mellett 4 lekerekítés, 3 térköz, 5 betűkészlet, 3 lábléc és 4 belépő animáció közül lehet választani, ez a színek előtt 720 elrendezés. Csak a kiválasztott sablon betűfájljai töltődhetnek le, és a főcím betűje sablononként előre töltődik.

Átirányítás a peremen

Egy oldalhálózatban sok a régi cím, ezért az átirányítás a peremen fut. A köztes réteg 2000 bejegyzéses gyorsítótárat tart tízperces élettartammal, és a találatot és a hiányt is megjegyzi. A lekérdezés 400 ezredmásodperces korlátot kap (korábban 1500 volt), és ha lejár, az oldal átirányítás nélkül megy tovább. A réteg védett a nyitott átirányítás és a hurok ellen, és egy indexelt, egylépéses lekérdezéssel dolgozik.

Az ajánlatlista a szerveren

A márkák ajánlatai szűrhetők, rendezhetők és lapozhatók, és mindez a szerveren történik, az URL paramétereiből. Ugyanez a folyamat számolja ki a fejléc előző és következő linkjét. A böngészőben futó szűrősáv 1418 sorról körülbelül 500-ra fogyott, és már csak az URL-t cseréli.

Kereshetőség bérlőnként

Minden oldalnak saját sitemapje, robots.txt-je, RSS- és Atom-csatornája és llms.txt-je van. A lekérdezési paraméteres és a lapozott változatok noindex, follow jelzést kapnak, az oldal és a megosztás nyelvét a domain végződéséből számoljuk. A strukturált adat leírja a cikket, az ajánlatot, az útmutatót, a gyakori kérdéseket, a gyűjtőoldalt és a morzsamenüt is.

A sebességen is dolgoztunk. A nyitókép a React 19 előtöltésével indul, a képkomponenssel összehangolva, ami nagyjából 110 ezredmásodperc betöltési késést vett el. A később megjelenő rétegek halasztva töltődnek, ez nagyjából 82 kB kezdeti JavaScriptet spórolt meg. A körülbelül 213 kB-os HTML-tisztító könyvtár a szerveren maradt.

A tartalommotor

A motor egy n8n-folyamat 33 csomóponttal és 43 kapcsolattal. Ebből 9 hibaág, amely egy helyreállító ágba fut, a kódcsomópontokban pedig körülbelül 2856 sor JavaScript dolgozik. A folyamat hatóránként indul, egyszerre egy példányban.

Egy cikk útja így halad.

  1. Kiválasztja a legrégebben kiszolgált oldalt és annak következő kulcsszavát, prioritás és kategóriaforgatás szerint.
  2. Beolvassa az oldal kategóriáit, megjelent cikkeit és ajánlatait a CMS-ből, hogy a cikk ezekre építsen, és ezekre linkeljen.
  3. Vázlatot kér egy kisebb modelltől, alacsony hőmérsékleten.
  4. Megírja a cikket egy nagyobb modellel, a vázlat alapján.
  5. Ellenőrzi a cikket, és ha kell, újraíratja.
  6. Piszkozatként feltölti a CMS-be, és visszaírja az állapotot.

A költséget a motor a valós tokenhasználatból számolja, cikkenként. Egy menetben ez nagyjából 0,02 USD, korábban, egy másik modellel nagyjából 0,05 volt.

Minden oldalnak saját hangja van. A 47 persona öt formalitási szint, hat humorszint, négy mondatstílus és négy nyitásstílus közül áll össze. A kulcsszavak 15 piac exportjaiból jönnek, a keresési volument piacokon át összeadva, és volumen szerint három prioritási szintre bontva. A 47 kulcsszólistában 17 700 sor vár feldolgozásra.

Számok csak forrásból

A cikk számai az oldal saját adataiból jönnek. A motor a CMS-ben tárolt ajánlatokból átlagot, minimumot, maximumot és darabszámot számol, és kötelezően ezeket adja a modellnek. Ha egy szám hiányzik, a modellnek azt kell írnia, hogy a pontos érték márkánként eltér. Összehasonlító táblázat csak az ajánlatok valódi mezőiből készülhet.

A külső linkeknek HTTPS-en kell lenniük, engedélyezett domainvégződéssel és belső hálózati cím nélkül, és egy élő, ötmásodperces lekérdezésen is át kell menniük. A halott link a cikk megírása előtt kiesik.

Minőségkapuk

Ha a vázlat nem értelmezhető, a motor egy második hívással újrakéri. A cikket újraíratja, ha a megjelenő szöveg 1400 szónál rövidebb, ha kettőnél kevesebb forrásra hivatkozik, ha egyetlen megnevezett forrás sincs benne, vagy ha a modell a tokenkeret miatt állt meg. Ha a cikk 600 szónál rövidebb, vagy a kategóriája ismeretlen, a cikk elbukik.

Mellettük körülbelül húsz figyelmeztetés fut.

  • Ellenőrzi, hogy a kulcsszó benne van-e a címben és a leírásban, és hogy az URL nem ütközik-e egy másikkal.
  • Megnézi, van-e legalább három alcím, gyakori kérdés, táblázat vagy lépésenkénti útmutató.
  • Kiszűr 25 közhelyet, 7 kitalált első személyű állítást és 40 tiltott fordulatot 8 kategóriában, és jelzi, ha a kulcsszó hiányzik vagy túl sűrű.
  • Méri a mondathosszak szórását, a bekezdések eloszlását és a kötőszavak változatosságát.
  • Megnézi, hogy a hálózat többi oldalán nincs-e már ugyanilyen cikk.

A keresési szándék dönti el a cikk hosszát.

Szándék Cél Elfogadott
Navigációs kb. 550 szó 300–800 szó
Tranzakciós kb. 1100 szó 600–1600 szó
Informatív kb. 1500 szó 800–2200 szó

Minden cikk egy 40–60 szavas, kiemelt találatra szánt bekezdéssel indul. A cikkben 2–3 belső link van, mindegyik egy megjelent cikkre mutat, és egyik sem önmagára. Egy lefedettségi lista, legfeljebb 20 azonos kategóriájú cikkel, segít, hogy két cikk ne versenyezzen ugyanarra a kifejezésre.

Minden cikk piszkozatként kerül a CMS-be, és szerkesztő hagyja jóvá. A kitalált első személyű állításokat, például hogy a szerző személyesen kipróbált valamit, a motor hibának jelöli.

Állapot adatbázis nélkül

A motor állapota fájlokban él, ezért zárakkal és atomi átnevezéssel írjuk. A beragadt „feldolgozás alatt” sorokat egy óra után visszaállítja, a helyreállító ág pedig mindig hibásnak jelöli a kulcsszót, és továbblép a következő oldalra. A hibaüzenetekből a tokeneket kitörli. A titkok csak környezeti változóból jönnek, a TLS-ellenőrzés be van kapcsolva, és a fájlútvonalakat a mappából való kitörés ellen is ellenőrzi.

A Telegram-bot

A bot egyetlen üzenetben vezeti végig a felhasználót a kategóriától az ajánlaton át a kattintásig. Minden lépés ugyanazt az üzenetet szerkeszti, a szöveg és a kép között mind a négy átmenetet kezelve, és ha a szerkesztés nem megy, töröl és újraküld. Egy felhasználó gombnyomásait üzenetenként 1,5 másodperces zár védi a dupla koppintástól.

A körüzenet 35 ezredmásodperces szünetekkel megy, betartja a Telegram várakozási kérését, és törli azokat, akik letiltották a botot. Minden este 19 órakor kiemel és kitűz egy napi ajánlatot, ismétlés nélkül forgatva. A bot beágyazott módban más beszélgetésekben is megosztható, és mélylinkkel egy kategóriára vagy ajánlatra nyílik. Körülbelül 21 óra alatt készült el, 11 commitban, és egy későbbi változtatással kivettük belőle a hamis sürgetést.

A modell megírja a cikket, a motor pedig ellenőrzi, hogy van-e forrása, nincs-e benne kitalált állítás, és nem ismétli-e a hálózat egy másik cikkét.

Amit ebből Önnek érdemes tudni

Ha több oldalt vinne egy rendszerből, vagy nagy mennyiségben gyártana tartalmat, a minőségkapuk és a szerkesztői jóváhagyás a legfontosabb rész. Az AI-automatizációról külön oldalon írunk, a munka menetéről pedig az Így dolgozunk oldalon.

Adatlap

Típus
Oldalhálózat és tartalommotor
Szerepünk
Átvétel és újraépítés, tartalommotor, bot
Év
2026
Nyelv
Angol
Technika
  • Next.js
  • React
  • TypeScript
  • Strapi
  • Postgres
  • Docker
  • n8n
  • OpenAI
  • Node.js
  • Telegram

Ilyet építünk Önnek is

AI-automatizáció

Ahol ma valaki kézzel másol adatot az e-mailből a CRM-be vagy a táblázatból a riportba, ott automatizálunk. A meglévő rendszereire építünk, és ott használunk AI-t, ahol szöveget kell érteni vagy írni.