Klimatronik 016
a website for air conditioner installation and servicing in Leskovac
The technician is out on jobs all day, and work reaches him by phone, not by email. That's why this site has no contact form: every path through it ends at a phone number or a Viber message. The rest of the work was making the content worth that call: five service pages that explain exactly what gets done, and a gallery where the jobs can be seen.
- Multi-page website
- Leskovac
- August 2026
- 13 min read
- PHP 8.5
- Nginx
- JSON-LD schema
- Consent Mode v2
- Customer
- Klimatronik 016 (MARKO ČUPIĆ PR, Leskovac)
- Industry
- Air conditioner installation, servicing and sales
- Area
- Leskovac and the Jablanica District
- Type
- Multi-page website, 17 pages
- Contact channel
- Phone and Viber, no contact form
- Technologies
- PHP 8.5 · Nginx · JSON-LD · Consent Mode v2
- Website
- klimatronik.rs
- Status
- Live site, actively maintained

01 / 11
What Klimatronik 016 does
Klimatronik 016 installs, services and cleans air conditioners in Leskovac and throughout the Jablanica District. Behind the name is the trade business MARKO ČUPIĆ PR, active since June 2019, with a shop in Leskovac and a branded vehicle out on jobs. By his own account, the technician has eighteen years in the trade.
The work splits into five things people ask for all the time: installing split and multi-split systems, servicing and fault diagnostics, cleaning and annual maintenance, refrigerant recharge, and heat pumps. On top of that come units of all the usual brands: Daikin, Mitsubishi Electric, LG, Samsung, Toshiba, Gree, Haier and Midea. He also services units that weren't bought from him, both in and out of warranty.
The service area is Leskovac, then Vlasotince, Lebane, Bojnik, Grdelica, Vučje, Predejane, Crna Trava and Medveđa. For the site, that matters more than it sounds: someone from Vlasotince doesn't search for “AC Jablanica District” but for “AC Vlasotince”, and the site needs a page that answers him in his own words.
Working hours are Monday to Saturday, 8 a.m. to 4 p.m., closed on Sundays. Even that one sentence turned out to be one of the bigger problems on the site; more on that below.

02 / 11
What needed solving
The site existed and worked. The problem wasn't that something was broken, but a string of things you can't see until you open the files. The work came down to four areas:
- The channel to the customer was wrong. The site offered a contact form and email, but in this trade work comes in by phone: someone with a broken AC calls, they don't write. An inquiry that goes to an inbox instead of a phone is an inquiry that waits until someone else answers it.
- The service pages were empty. The five service pages had between 75 and 123 words each, just enough to say the service exists and not a word about what actually gets done.
- The site contradicted itself. Working hours were written three different ways, the town pages promised no travel surcharge, and the price list charged for travel.
- Silent technical errors. From a redirect that drops the path to a font missing Serbian characters: things nobody reports, because nobody recognizes them.
None of these called for a redesign. The look of the site stayed the same: blue, the same structure, the same order of sections. What changed was whatever decides whether the phone will ring.

03 / 11
A website with no contact form
The biggest decision was to remove the contact form and the business email from the site. Not to move them further down the page, but to delete them.
The reason is mundane. The client is a technician who is out on jobs all day. A form on the site creates an obligation nobody fulfills: the visitor sends an inquiry, waits for an answer, doesn't get one and calls someone else. A site that says plainly that you reach him by phone is more honest, and works better, than one that promises a reply that will never come.
Instead of a form, the contact page has a box that says “Calling is fastest”: the number in large type, a Viber message button for anyone getting in touch outside working hours, and a list of five things to have ready before calling: which service is needed, the brand and capacity of the unit if it's already bought, the floor and whether work from a lift is needed, roughly how many meters there are between the indoor and outdoor units, and the location. That list isn't decoration. It turns a “how much is an AC” call into one the technician can answer with a price, without a second round of back-and-forth.
On phones, a bar with the number and Viber stays at the bottom of the screen, the navigation has the number as a button, and the nine buttons that used to lead to the form now lead to a call or a Viber message.
Removing the email was a job in itself. The address appeared in ten places: in the footer, in three meta descriptions, on both legal pages, in an FAQ answer, and in the structured data that search engines and AI assistants read. Had it stayed only there, an assistant would still advise filling in a contact form that no longer exists on the site. So the privacy policy was rewritten: the site now has no input fields at all, and the text says so.
04 / 11
Structure: from the home page to five service pages
The site has seventeen pages, and all except the two legal ones are on clean URLs, without file extensions. The structure is deliberately shallow: any service is one click from the home page.
The backbone is the service pages: air conditioner installation, servicing, cleaning and maintenance, refrigerant recharge, and heat pumps. Above them sits an overview page of all services. Then come brands, the work gallery, about us, frequently asked questions and contact.
Two pages exist purely for search: the AC Vlasotince page and AC Lebane page. Both towns are about twenty kilometers from Leskovac, and people there look for a technician by the name of their town, not the district. Those two pages used to be ninety-five percent the same text, which to a search engine is one page, not two. Now each is written separately: it lists the services for its own town and says what to prepare before calling.
There's also a page that sells nothing: advice on buying an AC, with five decisions to make before buying, from intended use and room details to the energy label with SEER and SCOP values and an installation plan. It catches people who haven't bought a unit yet, a month before they'll need it installed. When it comes to buying, they already know who to call.
05 / 11
The price list and two contradictions
The price list page had a table with approximate ranges for installation, removal, servicing, cleaning, refrigerant recharge and emergency call-outs, and below it six things that move the price: line length beyond the standard five meters, unit type, extra work such as drilling through a wall or a bracket for the outdoor unit, the property's location, urgency and season.
A range instead of an exact figure was a deliberate choice. An installation on the ground floor of a house and one on the fourth floor from a truck-mounted lift are not the same job, so a single price would be either a lie or an inflated safety margin. A range with the list of factors gave visitors what they came for, a ballpark figure, and left the technician to name the exact price once he had seen the property. In September 2026 the price list was taken off the site along with every mention of prices, and the old URL leads to the services page. Scope and price are now agreed in conversation.
This is where a contradiction surfaced that had been on the site for months: the town pages said there was no travel surcharge, while the price list charged for call-outs outside Leskovac. The second was of the same kind: the price list offered weekend emergency call-outs, while the footer said the business was closed on Sundays. Both were brought in line with the price list and with how the business actually works.
Before that, the working hours appeared in three versions in three places on the same page: in the top bar, in the footer and on the contact page. Now they're the same everywhere, including the structured data Google shows next to search results. A visitor who sees three different sets of hours doesn't conclude that the site is sloppy; they conclude that the business is.
06 / 11
Content written firsthand
The five service pages were expanded from 75–123 words to about a thousand words each. That isn't padding for length. It's the only way for a page to answer the question the visitor came with in the first place.
The installation page now explains how the spots for the indoor and outdoor units are chosen, how the copper pipes are routed and insulated, why the condensate hose needs a constant downward slope and that a small pump goes in where there isn't one, and when work on a higher floor is done from a lift. It also explains that the system is vacuumed before it's started up, how the job goes step by step, and what a standard installation with up to five meters of line includes and what is agreed separately.
Text like that does two things at once. It shows someone choosing a technician that whoever wrote it knows the job. And it gives the search engine a reason to show the page for searches other than “AC installation Leskovac”, such as “how long does AC installation take” or “why is my AC dripping from the indoor unit”.
Each of the five pages got a title with the location in it, nine to eleven topical sections and five questions with answers at the bottom. None of them gives a price: each says what a standard job includes and what is agreed separately.
The brands page was the worst: ninety-three words and not a single link. Today it's a short list of the brands the technician comes across on jobs and of what's worth comparing before buying: capacity, SEER and SCOP, noise, warranty terms and service availability, with a link to the guide on choosing an AC.
07 / 11
Letters that didn't show and 402 kilobytes of icons
This is the kind of finding that makes it worth opening the files rather than just looking at the site.
The site uses Poppins, hosted locally instead of from Google's servers. That local font had been subset to 217 characters, and the subset physically didn't contain the letters č, ć, š, ž and đ, nor did the character range declared to the browser cover them. The result: all the Serbian-specific letters across the site were drawn in Arial. The word “čišćenje” was half Poppins and half Arial, on every page, for months. Nobody reports that, because the eye notices that something sticks out but can't name what.
The fix was a fresh subset of the font from the full source file, with the code points for the Serbian letters listed explicitly. As a side bonus, the new files came out smaller than the old ones.
Right next to it sat another burden: a 402-kilobyte icon set for the sixty-one icons actually in use. The whole family was loading for a handful of arrows, phones and check marks, including a part the site never even called. It was cut down to 10.7 kilobytes, a ninety-seven percent drop, by pulling the classes in use straight from the markup, mapping them to code points and regenerating the font with minimal CSS.
The sum of those two changes can't be seen on fast office internet. It shows on the first visit to the site from a phone, on the kind of connection people in and around Leskovac actually use.
08 / 11
Speed, gallery and accessibility
After the fixes, measurement on the server shows the home page on mobile with a performance score of 100 instead of the earlier 92, and a largest contentful paint of 1.3 seconds instead of 2.7. Fifteen of sixteen pages score 100 for performance, accessibility and best practices. The gallery scores 99, because it's a gallery.
The gallery was also the hardest part. The job photos are the most valuable thing the business has (outdoor units on a facade, a multi-split with four units, an installation from a truck-mounted lift on an upper floor, the warehouse and the workshop), but together they weighed 2.64 megabytes. Now they weigh 881 kilobytes: the page loads 520-pixel thumbnails with descriptors for different screen widths, and the original opens only when the visitor clicks the image. Filters by job type and the full-screen viewer also work with a keyboard, which wasn't the case before.
About ten spots had a contrast of just 2.71 to 1; accessibility has since been raised to a full score on every page. The dropdown menu opened only on mouse hover, the back-to-top button was a plain div without a button role, and there was no way to skip to the main content. That isn't an academic issue: it affects both someone with weaker eyesight and someone looking at the site on a phone, in the sun, in front of the building where the AC is to be installed.
Analytics is set up to respect the visitor's choice: until cookies are accepted, the tracking code doesn't even load. It needed taming as well: when it loaded right away, it knocked almost thirty points off the mobile performance score. Now it loads only after the visitor accepts cookies, so it doesn't steal time from the first render.
Finally, the simplest thing was checked too: all seventy-eight internal links and files on the site return a valid response, without a single dead one.
09 / 11
SEO, schema and what had to come off
The site carries thirty-six blocks of structured data, and none of them is invalid. The home page presents itself as an HVACBusiness with its address, coordinates, working hours and the list of places it covers. Each service page has its own Service, the pages with questions their own FAQPage, the gallery an image list, and every subpage a breadcrumb trail back to the home page.
Three things had to be fixed or removed:
- Made-up reviews. The site had two signed testimonials and an average rating of five out of five from three votes, with not a single real review behind them. That breaks Google's structured data rules and can lead to losing eligibility for rich results, or to manual actions. It was removed and replaced with things that can be verified: photos of the work and details about the business.
- A reference that doesn't exist. Ten pages pointed to the business details through an identifier that didn't exist on that page. Search engines don't join those identifiers across URLs, so to them ten pages had no service provider. A shortened but complete entry was added everywhere.
- A type that doesn't exist. The price list used a type name that doesn't exist in the schema.org vocabulary, so no search engine even read it. It was replaced with a valid one.
The image for sharing on social networks was a 900 by 1200 pixel portrait but declared as 1200 by 630, so every shared link looked broken. A proper card was made with the branded vehicle and the phone number. The link to the Facebook page pointed to a temporary sharing URL instead of the page itself, so that was fixed as well.
Along the way it also turned out that the IndexNow key, which notifies search engines of changes on the site, had disappeared in a server cleanup and returned an error from June to mid-August. A dead key raises no alarm; you only discover it with a pass like this through the whole site.
10 / 11
What happens to the site after delivery
A site left to itself isn't a finished job. This one goes through regular checks, and a few things found during those checks say more than any promise about maintenance.
The certificate expired once, and the site was unreachable for three days. The cause wasn't a missed deadline but a certificate left without its auto-renewal configuration: where the configuration should have been, there was an empty file. After the fix, a daily check was added that sends an email if any certificate on the server has less than two weeks left.
Another time, the site looked dead to only some visitors. A DNS record sent IPv6 traffic to an address where the server wasn't listening for this domain, so those visitors hit someone else's certificate and got a browser warning. Customers of one mobile carrier saw an error; everyone else saw a perfectly working site. A report like that from a client sounds like “it doesn't work for me but it works for my neighbor”, and it can't be solved without checking from the outside.
The third finding is the most mundane and the most expensive: the phone number in the Viber links and in the structured data had one zero too many. The button looked right and the click worked, it just didn't reach anyone. It was corrected to the number the business actually uses.
Then there are things you don't notice with the naked eye: the redirect from www was dropping the path, so every such link to a subpage ended up on the home page; URLs with a trailing slash returned a hard error instead of a redirect; and backup copies of PHP files sat in the web root, from where the server could, at the wrong moment, serve them as plain text. All three have been fixed, and the client would never have reported any of them.
11 / 11
What the client ends up with
A seventeen-page website that does one job, making the phone ring, and leads to that call from every page and every device.
In practice it looks like this: someone from Vlasotince finds the page for his town, sees which services apply and what to prepare before calling, looks in the work gallery to see what an installation from a lift on the fourth floor looks like, and calls. If it's Sunday, he sends a Viber message and gets an answer on Monday morning, instead of a promise nobody will keep.
No monthly platform subscription, no plugins that fall apart at the next update, no admin panel opened twice a year. The code and content live on the server and can be copied and moved, and every change comes with a backup made first.
One thing remains that doesn't depend on the site and is worth saying out loud: the business still has no Google Maps profile. For a technician whose only channel is the phone, that's the biggest missed source of calls and the first thing to do after the website.
Numbers
Measured, not promised.
On a phone
The same site, in your hand.
Most visitors come from phones, so the layout, buttons and images are arranged for the small screen first.

Questions
What clients ask.
Why doesn't the site have a contact form?
Because the owner doesn't check email. A form would collect inquiries nobody would open, while the visitor would think a reply was on its way. Instead, every page offers a call and a Viber message, along with a list of details to have ready so a price can be given right away.
So how does an inquiry come in outside working hours?
Through a Viber message. The contact page and the bar at the bottom of the screen on phones have a Viber button, with a note that the reply comes during the next working hours. The business is closed on Sundays, and the site says so everywhere working hours are mentioned.
Why are there no prices on the site anymore?
A price list with approximate ranges was on the site until September 2026, when all prices were taken down, and the old price list URL now leads to the services page. An installation on the ground floor and one from a lift on the fourth floor are not the same job, so the scope and the price are agreed in conversation.
Can the owner edit the content on their own?
No, and that's intentional. A site this size changes a few times a year, before the season or when a service is added. An admin panel for that pace costs more than it's worth, so changes go through us, with a backup before each one.
Is the site on WordPress?
No. It's written in PHP, with no platform and no plugins to update. For a site with a fixed number of pages, that means fewer moving parts, a smaller attack surface and no monthly subscription.
What happens to the site after delivery?
It goes through regular checks: certificate, speed, dead links, structured data and behavior on phones. Those checks turned up an expired certificate, a wrong number in the Viber links and a redirect that was dropping the path, three things the client would never have reported, because they can't be seen from his side.
Related projects
From the same field.

Zlaja 2015
Detailing 016