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.
- Kiválasztja a legrégebben kiszolgált oldalt és annak következő kulcsszavát, prioritás és kategóriaforgatás szerint.
- Beolvassa az oldal kategóriáit, megjelent cikkeit és ajánlatait a CMS-ből, hogy a cikk ezekre építsen, és ezekre linkeljen.
- Vázlatot kér egy kisebb modelltől, alacsony hőmérsékleten.
- Megírja a cikket egy nagyobb modellel, a vázlat alapján.
- Ellenőrzi a cikket, és ha kell, újraíratja.
- 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.
