Medica Centar — sajt ginekološko-akušerske ordinacije iz Niša
Ordinacija koja radi od 2002. godine imala je stari statički sajt sa sadržajem vrednijim od samog sajta: dugačke stručne tekstove, arhivu radova i snimke. Trebalo je preneti sve to bez ijedne izgubljene adrese, složiti oko toga pedeset pet stranica usluga u tri oblasti i dati ordinaciji panel da sadržaj dalje vodi sama.
- Klijent
- Medica Centar
- Delatnost
- Ginekologija, akušerstvo i laserska kozmetologija
- Grad
- Niš
- Tip
- Višestrani sajt sa admin panelom
- Tehnologije
- PHP 8.3 · JSON · AVIF · Schema.org
- Sajt
- medicacentar.info
- Status
- Živ sajt, ordinacija sama uređuje sadržaj
U ovom tekstu
- Čime se Medica Centar bavi
- Sa čega se prelazilo
- Struktura: tri oblasti, pedeset pet stranica usluga
- Sadržaj kao podaci, ne kao pedeset pet kopija istog fajla
- Kako sajt izgleda i gde je bilo teško
- Brzina i slike
- Selidba i mreža preusmerenja
- Upit-forma, telefon i kupon
- SEO, schema i vidljivost
- Panel: ordinacija sama menja sadržaj
- Šta klijent na kraju ima
Čime se Medica Centar bavi
Medica Centar je privatna ginekološko-akušerska ordinacija u Nišu, u Novosadskoj 1/c. Radi od 2002. godine i, po sopstvenim podacima, okuplja između sedam i deset lekara specijalista — ginekologije i akušerstva, dermatologije i radiologije.
Posao je podeljen u tri oblasti: ginekologija, vođenje trudnoće i laserska kozmetologija. Ordinacija navodi da radi kolposkopom, 4D ultrazvučnim aparatom, histeroskopskim stubom i radiotalasnim nožem, uz nekoliko lasera — CO2 hirurški i frakcioni, Nd:YAG, diodni 808 nm i aleksandritni — pa HIFU i IPL uređaj. Taj spisak aparata je i razlog zašto sajt ima toliko strana: skoro svaki uređaj pokriva bar jednu uslugu o kojoj pacijentkinje traže objašnjenje pre nego što se jave.
Ordinacija sarađuje sa nekoliko osiguravajućih kuća, a cenovnik drži kao PDF. Termin se dogovara telefonom ili u ordinaciji — sajt ne pokušava da bude sistem za zakazivanje, i to je bila svesna odluka, ne propust.
Sa čega se prelazilo
Stari sajt je bio skup statičkih .html strana. Nije bio prilagođen telefonu, struktura je bila ravna, a izgled na nivou vremena u kome je nastao. Ali je nosio nešto što se ne napravi za dve nedelje: dugačke stručne tekstove koje je pisao lekar ordinacije, arhivu od 94 rada u PDF-u i 11 video snimaka.
To je promenilo zadatak. Nije trebalo napraviti nov sajt pa preneti nekoliko strana, nego preneti postojeći sadržaj bez ijedne izgubljene adrese i oko njega sagraditi sajt koji radi na telefonu. Google je stari sajt poznavao godinama; svaka adresa koja padne u 404 je izbrisana istorija, a taj gubitak se ne vidi odmah nego kroz nekoliko meseci.
Drugi deo posla nema veze sa kodom. Sajt ordinacije ne sme da zvuči kao prodavnica. Nema uzvičnika, nema obećanja, nema pritiska da se zakaže odmah. Ton je morao da bude miran, a sadržaj informativan — žena koja traži objašnjenje pre pregleda treba da nađe objašnjenje, a ne oglas. Ta odluka je oblikovala i raspored i tipografiju, ne samo tekst.
Struktura: tri oblasti, pedeset pet stranica usluga
Sajt ima tri glavne strane, po jednu za svaku oblast, i ispod njih katalog usluga: 25 strana u ginekologiji, 10 u trudnoći i 20 u kozmetologiji. Uz njih idu strana o ordinaciji, kontakt, akcije, stručni tekstovi i pravni deo — ukupno blizu sedamdeset adresa.
Hub strana kao što je ginekologija nije spisak linkova nego mreža kartica sa po jednom rečenicom koja kaže šta se na toj strani nalazi. Te rečenice su pisane ručno, jedna po jedna. Prva verzija ih je mašinski presekla nasred rečenice sa tri tačke i to se videlo na svih pedeset pet kartica — a upravo je taj jedan red ono što posetilac čita pre nego što odluči da li da klikne.
Svaka usluga ima sopstvenu stranu sa istim kosturom: šta je to, kako pregled ili tretman izgleda, kako se pripremiti i pitanja koja se najčešće postavljaju. Duže strane, kao 4D ultrazvuk u trudnoći, imaju i po petnaestak odeljaka, pa nose bočnu navigaciju kroz odeljke i traku napretka čitanja. Strane su međusobno povezane poljem related, tako da posetilac sa jedne usluge ulazi u srodne umesto da se vraća u meni.
Sadržaj kao podaci, ne kao pedeset pet kopija istog fajla
Sajt je pisan u PHP-u 8.3, bez frameworka, bez WordPress-a i bez ijednog dodatka. Nema ni bazu podataka.
Ceo prikaz drži šest zajedničkih delova — zaglavlje, podnožje, funkcije, šablon hub strane i šablon strane usluge. Sadržaj stoji odvojeno, u JSON fajlovima: po jedan svc.json za svaku uslugu, hub.json za svaku oblast, pa nekoliko fajlova za naslovnu, podatke ordinacije i strane koje ne spadaju ni u jednu ni u drugu grupu.
Praktična posledica je da se izmena šablona vidi na svih pedeset pet strana odjednom, a izmena teksta ne dira kod. Kada je trebalo dodati dugme sa PDF cenovnikom na hub strane, dodato je jedno polje u hub.json i jedan blok u šablonu — ne pedeset pet puta ručno.
Zašto bez baze: sadržaj se menja retko i menja ga jedan čovek. Baza bi tu bila jedan sistem više koji može da padne i jedan backup više koji mora da se pravi. Ovako ceo sajt staje u folder koji se prekopira u sekundi, svaka verzija sadržaja je običan tekstualni fajl, a razlika između dve verzije se vidi golim okom. Ako sadržaj jednog dana preraste ovaj oblik, prelazak na bazu je izmena sloja za čitanje, ne nov sajt.
Kako sajt izgleda i gde je bilo teško
Klijent je birao između tri pripremljene teme i izabrao svetlu. Prva verzija palete je imala četiri akcenta, po jedan za svaku oblast; povratna informacija je bila kratka — previše boja. Sada je akcenat jedan, prigušeni teal na toplim neutralima, i koristi se štedljivo: naslovi, tanke linije, traka sa pozivom na kraju strane. Za tekst se koristi tamnija nijansa istog tona, zbog kontrasta.
Kroz sve strane ide tanka linija-vodilja koja se crta dok se skroluje, uz otkrivanje sadržaja na skrol i brojače na naslovnoj. Tu je bilo najviše prepravki. Linija živi u praznini pored teksta, pa je uslov za izlazak iz kontejnera morao da bude „ima li uopšte praznine", a ne širina prozora — na tačno 1200 piksela kontejner dodiruje ivicu ekrana, praznine nema i linija upadne pravo u tekst.
Gora zamka je bila maska za otkrivanje reč po reč. Omotač sa overflow: hidden visok je koliko jedan red teksta, a reč unutar njega nosi punu visinu reda — pa se seku produžeci slova i kvačice na š, ć i đ. To je sekao svaki podeljeni naslov na sajtu, na srpskom se vidi odmah, a u konzoli nema nikakve greške. Maska je izbačena: reč se sada otkriva prozirnošću i sitnim pomerajem, izgleda mirnije i nema šta da seče.
Brzina i slike
Sve fotografije su u AVIF formatu, najveća je 52 KB, a ceo sajt nosi oko 1,2 MB slika. Slika u vrhu naslovne ima podignut prioritet učitavanja, fontovi se učitavaju unapred, a dimenzije slika se upisuju u HTML da se raspored ne pomera dok se učitavaju.
Merenje na pravim posetiocima, iz Chrome UX izveštaja, daje LCP 1,45 s, INP 89 ms i CLS 0, uz TTFB 461 ms i 94% učitavanja u zelenoj zoni. Laboratorijski test iste strane pokazuje oko četiri sekunde, ali to je simulacija spore mreže i slabog telefona — brojka koja služi da se nađu uska grla, ne da se predstavi kao stvarnost. Kad se te dve stvari pomešaju, popravlja se ono što nikoga ne boli, a sajt pri tom postane komplikovaniji.
Logo je zatečen kao PNG od 300×80 piksela, premalo za zaglavlje na današnjem ekranu. Precrtan je u SVG, po slojevima boje, uz zajedničko zaglađivanje granica — bez toga se na spojevima slojeva vide bele pukotine kojih na originalu nema.
Selidba i mreža preusmerenja
Sajt ne stoji na našem serveru. Postavljen je na hosting koji klijent sam plaća, na njegov nalog, i tako je i zamišljeno: ordinacija ima svoj domen, svoj hosting i pun pristup svemu.
Selidba je bila najosetljiviji deo posla. Stari sajt je prvo sačuvan netaknut u zasebnom folderu, pa je napravljena mreža od 69 preusmerenja koja pokriva svaku staru .html adresu. Provera nije bila na oko — skripta je prošla svih 69 i tražila i status i tačno odredište. Arhiva sa 94 stručna rada i 11 snimaka vraćena je na iste adrese na kojima je i bila, da ne padne u 404.
Analitika i verifikacija vlasništva u Search Console-u preneti su sa starog sajta; bez toga se gubi i istorija i vlasništvo nad domenom u Google alatima. Stare mape sajta su namerno ostavljene žive još neko vreme, jer Google preko njih najbrže pokupi nova preusmerenja.
Zamka koju vredi zapisati: kontakt forma je na našem serveru koristila zajednički zaštitni modul kojeg na tuđem hostingu nema, pa bi svaki poslati upit vraćao grešku — a to je vrsta kvara koju niko ne primeti dok se neko ne požali da se ne javljate. Rešeno je lokalnom kopijom modula uz lanac rezervnih putanja. Forma je zatim testirana tako da klijent ne dobije probni upit: primalac se privremeno prepiše na naš mejl, pošalje se poruka, pa se vrati original. Potpis pošiljaoca je prošao proveru, dakle upiti stižu i ne završavaju u nepoželjnoj pošti.
Upit-forma, telefon i kupon
Na sajtu ordinacije forma ne sme da bude anketa. Ova traži ime, telefon, neobaveznu adresu e-pošte i poruku, uz saglasnost za kontakt koja vodi na politiku privatnosti. Iznad polja stoji rečenica koju je tražila ordinacija: molimo vas da u poruci ne navodite medicinske detalje. To je i jedina prava mera zaštite podataka koja se u formu može ugraditi — ne prikupljati ono što ne mora da se prikupi.
Ispod je skriveno polje koje pravi posetilac nikada ne vidi; boti ga popune i time se odaju. Telefon je svuda ispred forme, jer se termin ovde dogovara u par minuta razgovora. Brojeva je tri, i kozmetologija ima svoj — na svakoj strani se nudi onaj koji pripada toj oblasti, pa niko ne zove centralu da bi bio prebačen dalje.
Na strani sa akcijama radi generator kupona: bira se paket, upiše se ime, dobije se broj u obliku MC-####### i kupon se odštampa. Cenovnik nije strana nego PDF, isto kao na starom sajtu — cene se menjaju, a PDF se zameni jednim fajlom, bez dodirivanja sajta i bez ijedne izmene koda. Adresa, mapa i radno vreme stoje na strani sa kontaktom, a radno vreme se povlači iz podešavanja, pa se menja na jednom mestu i menja se svuda.
SEO, schema i vidljivost
Sajt nosi MedicalClinic schema podatke sa adresom, koordinatama, linkom na mapu, radnim vremenom, područjem koje pokriva i vezama ka društvenim mrežama. Uz to ide BreadcrumbList na 68 strana i FAQPage na 53 — pitanja nisu izmišljena zbog schema podataka, nego su uzeta iz 178 pitanja koja su već bila napisana na stranama usluga.
Prolaz kroz meta podatke je izvukao tri stvari koje su same sebi radile o glavi. Naslovi su na 66 od 69 strana bili udvojeni, u obliku „Medica Centar — Medica Centar", jer je šablon dodavao ime sajta i onda kada je ono već bilo u naslovu. Dvadeset tri strane nisu imale sliku za deljenje na mrežama. Mapa sajta je imala dva odvojena kvara: upisivala je današnji datum na svih 69 adresa pri svakoj izmeni, i pravila se samo kada se dirala sekcija sa uslugama. Sada datum dolazi iz vremena izmene same strane, a mapa se obnavlja pri svakom upisu iz panela, bez obzira odakle dolazi.
Dodata je i izričita politika za AI čitače u robots.txt, pa llms.txt sa spiskom svih usluga — ne zato što je to danas obavezno, nego zato što je bolje da odluka bude klijentova nego tuđa. Svaka sekcija, kao kozmetologija, ima svoj naslov, opis i kanonsku adresu, kao i svaka usluga u njoj.
Panel: ordinacija sama menja sadržaj
Posle isporuke je napravljen panel na /admin/ kojim se uređuje ceo sadržaj: naslovna, sve tri oblasti, svaka usluga pojedinačno uz dodavanje i brisanje, strana o ordinaciji, akcije, kupon, podaci ordinacije, meni i slike. Ni ovde nema baze — panel upisuje u iste JSON fajlove iz kojih sajt čita, pa nema dva izvora istine koja se razilaze.
Ono što se ne vidi: sesija traje dva sata, svaki upis ima CSRF zaštitu, pet promašenih prijava u petnaest minuta zaključava pristup, lozinka se čuva kao heš, a folder sa podacima je zatvoren za direktan pristup preko brauzera. Pre svakog upisa pravi se kopija fajla i čuva se poslednjih 25 po fajlu, upis je atomičan, a svaka izmena ide u dnevnik.
Provera panela je izvedena tako da ne može da prođe slučajno: kroz svaku sekciju je poslat obrazac bez ijedne izmene, pa je HTML strane upoređen pre i posle. Ako je bajt u bajt isti, mapiranje polja iz obrasca u JSON pa u šablon je ispravno. Prošlo je svih deset sekcija.
Panel se i koristi, što je najbolji dokaz da je upotrebljiv. Vlasnik je sam prepravio blok sa istaknutim uslugama i tekst napisao svojim rečima. Zbog toga se pred svaku našu izmenu prvo povuče živo stanje i uporedi sa našim — inače bi se tuđa izmena tiho pregazila, a to je greška koja se otkriva tek kad neko primeti da je njegov tekst nestao.
Šta klijent na kraju ima
Sajt na sopstvenom hostingu, sa sopstvenim domenom i punim pristupom. Nema mesečne pretplate platformi, nema dodataka koji se raspadnu pri sledećem ažuriranju i nema nikoga između ordinacije i njenog sadržaja.
Praktično, to izgleda ovako: nova usluga se doda kroz panel i istog trenutka je na hub strani, u mapi sajta i u unutrašnjem povezivanju. Cena se menja zamenom jednog PDF-a. Radno vreme i telefoni se menjaju na jednom mestu. Stare adrese sa prethodnog sajta i dalje rade, kao i arhiva radova i snimaka koja je na njima stajala godinama.
Ostaje i posao koji se ne završava isporukom. Domen je nov, pa je profil spoljnih linkova skoro prazan — to se gradi sporo i zavisi od toga koliko se ordinacija sama pojavljuje u lokalnim izvorima i imenicima. Sadržaja ima dovoljno da ima šta da se rangira; ostatak je vreme i strpljenje.
Sajt u slikama
Medica Centar
Ginekologija, vođenje trudnoće i laserska kozmetologija na jednom mestu u Nišu, od 2002. godine.
medicacentar.infoČesto postavljana pitanja
Zašto sajt ordinacije nema online zakazivanje?
Može li ordinacija sama da menja tekstove, usluge i cene?
Šta se desilo sa starim adresama i sa arhivom radova?
Zašto PHP i JSON, a ne WordPress?
Koliko je sajt brz na telefonu?
Može li se sajt proširiti novim uslugama?
Treba vam ovakav sajt?
Recite mi čime se bavite i šta sajt treba da uradi za vas — dobijate fiksnu ponudu i rok, u pisanoj formi.