Bata Stanković — sajt knjigovodstvene agencije iz Lebana
Knjigovodstvena agencija ne prodaje ništa preko interneta. Njen posetilac hoće da vidi da firma stvarno postoji, da nađe broj telefona i da postavi jedno pitanje. Sajt je napravljen oko te tri stvari, a onda je otkriveno da forma na njemu mesecima nije slala nijednu poruku.
- Klijent
- BATA STANKOVIĆ PR — Agencija za knjigovodstvo Lebane
- Delatnost
- Knjigovodstvo i računovodstvo, šifra 6920
- Područje
- Lebane, Leskovac, Bojnik, Medveđa, Jablanički okrug
- Tip
- Jednostrani sajt sa dodatnim stranama za pretragu
- Tehnologije
- PHP 8.3 · Nginx keš · SMTP · Consent Mode v2
- Sajt
- batastankovic.com
- Status
- Živ sajt, u aktivnom održavanju
U ovom tekstu
- Čime se agencija bavi
- Šta je trebalo rešiti
- Naslovna: sve na jednom skrolu
- Forma koja se mesecima tiho nije slala
- Put od forme do sandučeta
- Tvrdnje koje sajt ne sme da nosi
- Brzina i ono što je kočilo prvi ekran
- SEO: dijakritika, schema i ono što je bilo pogrešno
- Kada je jedna strana postala uska
- Zamka sa čistim adresama
- Šta klijent na kraju ima
Čime se agencija bavi
Bata Stanković PR je knjigovodstvena agencija iz Lebana. Registrovana je 4. novembra 2014. godine, pod šifrom delatnosti 6920 — računovodstveni, knjigovodstveni i revizorski poslovi. Radi za preduzetnike, paušalce, zanatske radnje, trgovine, ugostitelje i mala privredna društva sa područja Lebana, Leskovca, Bojnika, Medveđe i ostatka Jablaničkog okruga.
Posao je onaj koji se ne vidi dok ne zakasni: KPO knjiga paušalcu, poslovne knjige preduzetniku, PDV evidencija, obračun zarada i prijave radnika, poreske prijave, završni račun i predaja Agenciji za privredne registre, registracija firme u APR-u. Ceo pregled usluga stoji na sajtu, a svaka veća usluga ima svoju stranu sa detaljima.
Klijent knjigovođe ne bira po dizajnu. Bira po tome da li veruje da će rokovi biti ispoštovani i da li može da dobije čoveka na telefon kad mu stigne rešenje koje ne razume. Sajt je zato pravljen kao dokaz da agencija postoji, radi i ima ime, a ne kao brošura.
Šta je trebalo rešiti
U Jablaničkom okrugu skoro nijedna knjigovodstvena agencija nema pravi sajt. Postoje kao red u katalogu koji je neko treći popunio, sa telefonom koji možda više ne važi. To je istovremeno i prilika i obaveza: ko prvi stane sa proverljivim podacima, taj se i pamti.
Zadatak je bio sveden na četiri stvari:
- Broj telefona pre svega ostalog. Najveći deo poseta dolazi sa telefona, često usred nekog roka. Poziv mora da bude na dohvat palca, na svakoj strani.
- Podaci koji se mogu proveriti. PIB, matični broj, šifra delatnosti, datum osnivanja i područje rada — to je ono što konkurencija u katalozima nema, a čoveku koji predaje svoje papire znači više od bilo kog prideva.
- Forma koja stvarno stiže. Poruka poslata sa sajta mora da završi u sandučetu agencije, a ako slanje padne, posetilac mora to da vidi.
- Da se agencija nađe u pretrazi. Najpre za Lebane, gde je kancelarija, a zatim i za Leskovac, gde je najveći deo tržišta.
Peti uslov nije bio izgovoren, ali je podrazumevan: sajt ne sme da nosi mesečni trošak platforme i ne sme da zavisi od dodataka koji se sami ažuriraju i sami se kvare.
Naslovna: sve na jednom skrolu
Sajt je u srži jedna strana. Meni ne vodi na druge adrese nego pomera stranu na svoju sekciju, sa pomerajem od osamdeset piksela da naslov ne završi ispod fiksne trake. Redosled sekcija prati redosled pitanja koja posetilac postavlja.
Prvi ekran nosi ime agencije, rečenicu čime se bavi i dva dugmeta: broj telefona i besplatnu konsultaciju. Sa desne strane stoji digitron koji sabira u dinarima, sa karticama za fakture, račune, izveštaje i kalkulacije — jedina dekoracija na sajtu, i to takva da odmah kaže o čemu je reč.
Ispod idu šest usluga sa nabrojanim stavkama u svakoj, pa šest razloga za saradnju, pa brojači sa godinom osnivanja, brojem godina rada, radnim vremenom i šifrom delatnosti. Zatim dolazi blok o agenciji sa punim registarskim podacima, pa kontakt sa formom, telefonom, adresom elektronske pošte i radnim vremenom.
Preko cele strane, u donjem desnom uglu, stoji plutajuće dugme za poziv. Nije originalno, ali je jedini element koji radi isto na svakoj poziciji skrola: čovek koji je već odlučio ne mora da traži nazad do vrha.
Forma koja se mesecima tiho nije slala
Ovo je nalaz zbog koga je ceo prolaz kroz sajt i imao smisla.
U stilovima je stajalo .custom-checkbox input[type="checkbox"] { display: none }. Polje pod tim pravilom je bilo obavezno — saglasnost sa uslovima korišćenja. Posetilac koji tu kućicu ne bi štiklirao kliknuo bi na „Pošalji poruku" i ne bi se desilo ništa. Bez mrežnog zahteva, bez crvenog okvira, bez poruke.
Razlog je u pravilima samog pregledača: kada validacija padne, pregledač pokušava da fokusira polje koje je oborilo formu. Polje sa display: none ne može da se fokusira, pa se ceo postupak slanja prekida bez ijedne vidljive posledice. U konzoli je stajala tačno jedna rečenica koju niko nikada nije video, jer konzolu na tuđem sajtu ne otvara niko: An invalid form control with name=privacy is not focusable.
Popravka je bila mala. Polje ostaje u toku strane, samo nevidljivo — position: absolute, opacity: 0, dvadeset sa dvadeset piksela — pa i dalje može da se fokusira, a susedni selektori koji crtaju lepu kućicu nastavljaju da rade kao pre.
Pouka je opštija od ovog sajta i vredi je pamtiti: obavezno polje sakriveno sa display: none je tiho oboreno slanje. Sajt izgleda ispravno, forma izgleda ispravno, a poruke jednostavno ne stižu.
Put od forme do sandučeta
Kad je forma proradila, na red je došlo ono što se dešava posle klika. Poruka ide na server, pa preko SMTP-a u sanduče agencije. Na tom putu je bilo još nekoliko mesta na kojima se lead mogao izgubiti.
Adresa pošiljaoca se čistila od opasnih znakova pre nego što bi bila upisana kao adresa za odgovor. Za većinu ljudi to ne menja ništa, ali adresa sa apostrofom u imenu tako postaje neispravna i obara slanje pre nego što je i počelo — posetilac dobije „Greška pri slanju", a poruka nestane. Sada se rade sirove vrednosti, a čišćenje ide tek pri ispisu u telo poruke.
Zaštita forme se učitavala uz proveru koja je popuštala u pogrešnom smeru: ako fajl sa zaštitom iz bilo kog razloga nije bio čitljiv, cela provera se tiho preskakala, a poruka je svejedno išla. Sada takav slučaj vraća grešku i telefon, umesto da propusti sve.
Uz to: provera porekla zahteva je postojala u kodu ali je niko nije pozivao, pa je uključena; skinuto je zaglavlje koje je dozvoljavalo slanje sa bilo kog sajta; vraćena je provera sertifikata na vezi ka pošti; vrsta usluge se sada bira iz zatvorene liste, jer je pre toga bot mogao da upiše proizvoljan tekst u polje koje završava u mejlu; a pad slanja vraća pravu grešku umesto tihe potvrde.
Na kraju je forma dobila i method i action u samom HTML-u, plus rezervni ispis sa brojem telefona za slučaj da skripta ne proradi. Bez toga bi pad skripte poslao ime, telefon i poruku u adresnu liniju.
Tvrdnje koje sajt ne sme da nosi
Deo posla na ovakvom sajtu nije kod nego brisanje. Sajt knjigovođe se čita kao izjava, pa svaka rečenica mora da izdrži proveru.
Među uslugama je stajala revizija. U Srbiji reviziju sme da obavlja samo društvo sa dozvolom Ministarstva finansija — preduzetnička agencija sa šifrom 6920 to ne sme da nudi, ma koliko srodno zvučalo. Kartica je zamenjena završnim računom, a revizija je uklonjena i iz padajuće liste u formi, i iz futera, i iz podataka za pretraživače.
Na drugom mestu je pisalo „podrška 24/7", a u istom fajlu je radno vreme za pretraživače bilo osam do šesnaest, radnim danima. Dve tvrdnje su se gledale preko strane. Ostalo je ono što je tačno.
Blok sa brojačima je stajao dva puta na istoj strani. Drugi je zamenjen sekcijom „Podaci o agenciji": pun naziv, PIB, matični broj, šifra delatnosti sa punim opisom, datum osnivanja i područje rada. To je jedini deo sajta koji konkurencija ne može da prekopira, jer nije stvar teksta nego registra.
Pravni tekstovi su postojali u dve verzije koje su se razišle — jedna u iskačućim prozorima unutar naslovne, druga kao zasebne strane, sa datumom izmene iz prethodne godine. Prozori su obrisani, linkovi vode na prave strane, a strana sa uslovima nosi tačan datum.
Brzina i ono što je kočilo prvi ekran
Sajt se nije otvarao sporo zbog slika ni zbog servera, nego zbog jednog pravila u skripti: cela strana je držana na nultoj providnosti dok se ne učita sve, do poslednje ikonice. Najveći element prvog ekrana time nije mogao da se pojavi pre kraja učitavanja. Blok je uklonjen, i vreme do najvećeg elementa je palo sa 1045 na 448 milisekundi, mereno u pravom pregledaču na desktopu.
Skripta je sa 31 kilobajta svedena na 20. Iz nje je izbačena mrtva adresa iz razvoja koja je stajala u javnom fajlu, dve nestišane osluškivača skrola svedena su na jedan sa odloženim izvršavanjem, a 215 linija stilova koje su se ubacivale iz skripte posle glavnog fajla preseljene su u stilove — jer su u starom rasporedu gazile pravilo za posetioce koji su u sistemu isključili animacije.
Na strani servera nije bilo nijednog pravila za keširanje statike: stilovi, skripta i ikonice su se proveravali pri svakoj poseti. Sada nose otisak vremena izmene u adresi i keširaju se godinu dana, slike mesec dana, a same strane trideset minuta. Uz to je ispravljen uslov koji je isključivao keš za sav saobraćaj sa oznakama kampanja u adresi — dakle za svakog posetioca koji dolazi sa oglasa ili iz mejla.
Posle svega, mereno na živom sajtu: odziv servera 76 ms, prvi ispis 316 ms, najveći element 448 ms, pomeranje sadržaja 0,0117. Nula grešaka u konzoli, nula grešaka u proveri koda, bez horizontalnog prelivanja na 390, 768 i 1440 piksela, ocena A+ za sertifikat.
SEO: dijakritika, schema i ono što je bilo pogrešno
Sajt je nosio spisak od dvadeset četiri ključne fraze u zaglavlju, u kome se reč knjigovođa ponavljala dvanaest puta. To pretraživači ignorišu od pre petnaest godina, ali čoveku koji gleda izvorni kod govori sve. Obrisano.
Ozbiljniji problem je bila dijakritika. Na osamnaest mesta — u naslovu, u podacima za deljenje, u podacima za pretraživače i u vidljivom tekstu — pisalo je „knjigovodja" umesto „knjigovođa". To nije kozmetika: to su za pretragu dve različite reči, a agencija je htela onu pravu.
Naslov strane je sa 78 znakova sveden na 50, tako da se u rezultatu pretrage vidi ceo. Slika za deljenje je vraćala grešku 404, pa je napravljena nova u punom formatu.
Podaci za pretraživače su bili najzanimljiviji. Tip je bio ispravan — knjigovodstvena usluga — ali je naziv firme bio zamenjen ključnom frazom, a u polje za PDV broj je bio upisan matični broj, što su dve različite stvari. Sada naziv nosi pravo ime firme, PDV broj je PDV broj, matični broj stoji u svom polju, a dodati su i područje rada po gradovima, radno vreme po danima, logotip i slika. Uklonjena je i veza koja je pokazivala sama na sebe.
Na kraju: pravila za robote su bila spala na tri reda, pa su vraćena zajedno sa izričitom dozvolom za veštačku inteligenciju; dodat je opis sajta za jezičke modele; mapa sajta je uskladila adrese sa kanonskim oblikom, jer se do tada razlikovala za jednu kosu crtu.
Kada je jedna strana postala uska
Merenje je pokazalo ono što se i slutilo: za upit „knjigovođa Lebane" sajt se pojavljivao, a za „knjigovodstvo Lebane usluge" i za bilo šta vezano za Leskovac nije. Jedna strana ne može da rangira za deset različitih namera, a Leskovac je veći deo tržišta od Lebana. Vlasnik je odlučio da se ide na sve, uključujući i cenovnik.
Sajt je sa tri adrese narastao na dvanaest: pregled usluga, pet posebnih strana po vrsti klijenta, cenovnik, strana za Leskovac i strana sa pitanjima i odgovorima. Zajednički okvir je izdvojen u tri fajla za zaglavlje, meni i futer, a svaka strana zadaje samo svoj naslov, opis, kanonsku adresu i mrvice — a mrvice se same pretvaraju u podatke za pretraživače.
Pravilo pisanja je bilo strogo: svaka tvrdnja o roku, stopi ili limitu nosi u kodu komentar sa adresom propisa i datumom provere. Takvih komentara ima oko devedeset, i vode na propise, poresku upravu, APR i portal elektronskih faktura. Sadržaj o poreskim rokovima koji nema izvor je odgovornost koju niko ne želi.
Cenovnik je napravljen bez ijednog izmišljenog iznosa. Tabela objašnjava od čega cena zavisi — broj dokumenata, sistem PDV-a, broj zaposlenih, delatnost, devizno poslovanje — a svaka stavka stoji na „na upit" dok vlasnik ne upiše svoje cene. Dok ih nema, sajt ni pretraživačima ne prijavljuje cene, jer bi to bila tvrdnja koja ne stoji.
Na strani pitanja i odgovori stoji dvadeset pitanja koja klijenti stvarno postavljaju. Tekst i podaci za pretraživače grade se iz istog niza u kodu, pa ne mogu da se raziđu — čest propust na sajtovima gde se ta dva pišu odvojeno.
Strana knjigovodstvo u Leskovcu namerno nije lažna gradska strana: izričito piše da je kancelarija u Lebanu, a Leskovac je područje rada, ne druga poslovnica. Druga adresa u podacima za pretraživače bi bila kratkoročna dobit i dugoročan problem.
Zamka sa čistim adresama
Nove strane su dobile čiste adrese bez nastavka .php. Prirodna pomisao je da se stara adresa sa nastavkom trajno preusmeri na novu. Ta pomisao je oborila pregled usluga na nekoliko minuta.
Server je čistu adresu interno prepisivao u fajl sa nastavkom, i to zastavicom koja ponovo pokreće biranje pravila. Zbog toga je pravilo koje preusmerava adrese sa nastavkom hvatalo sopstveni interni zahtev: strana je vodila na fajl, fajl nazad na stranu, i tako u krug dok server ne odustane.
Rešenje nije bilo pametnije pravilo nego nijedno. Duplikat sa nastavkom se rešava kanonskom adresom u zaglavlju strane, a nijedan link na sajtu ne vodi na fajl sa nastavkom, pa duplikat u praksi ni ne postoji. Ako bi preusmerenje ipak bilo neophodno, uslov mora da gleda adresu koju je poslao pregledač, a ne onu koju je server u međuvremenu sam prepisao.
Uz to ide i detalj koji košta sat vremena traženja: pošto strane imaju keš od trideset minuta, posle svake izmene na serveru keš mora da se obriše. Inače se testira stanje od pre pola sata i deluje kao da izmena nije primenjena.
Šta klijent na kraju ima
Sajt koji je njegov. Plaćaju se domen i hosting, ništa drugo — nema pretplate platformi, nema licenci za dodatke, nema mesečnog troška koji raste kad sajt poraste. Kod i sadržaj stoje u repozitorijumu i mogu se preseliti u celini.
Praktično: dvanaest adresa od kojih svaka ima svoj naslov, opis i kanonsku adresu; brojevi telefona koji se biraju jednim dodirom sa svake strane; forma koja radi i čija poruka stiže u sanduče agencije, a ne u prazno; podaci o firmi koji se poklapaju sa registrom; i tekstovi o propisima koji imaju izvor iza svake tvrdnje.
Ono što je namerno ostavljeno vlasniku, jer nije stvar koda: iznosi u cenovniku. Tabela stoji spremna i čeka njegove brojke — do tada je pošteno da piše „na upit", a ne izmišljena cifra koju bi neko poredio sa tuđom.
Sajt je i dalje u aktivnom održavanju. Svaka izmena ide na živom sajtu, uz rezervnu kopiju pre nego što se bilo šta dodirne, i uz proveru u pravom pregledaču posle. Kod knjigovođe je rok deo posla — isto važi i za onoga ko mu održava sajt.
Sajt u slikama
Bata Stanković PR
Knjigovodstvo za paušalce, preduzetnike i mala privredna društva iz Lebana, Leskovca i Jablaničkog okruga.
batastankovic.comČesto postavljana pitanja
Zašto knjigovodstvenoj agenciji sajt, kad klijenti dolaze preko preporuke?
Zašto u cenovniku nema iznosa?
Ko piše tekstove o poreskim rokovima i propisima?
Može li vlasnik sam da menja sadržaj?
Zašto nije WordPress?
Da li se sajt pojavljuje u pretrazi?
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.