Website2026-08-21
Golden Pets Hotel — a hotel for small dog breeds in Belgrade
A dog boarding house that has been operating for years had its site frozen in 2019, on a page builder that has since been shut down due to a security breach. We had to create a new site, transfer everything that Google has known for years and not add a single form at the same time — the owner specifically asked that nothing be reduced to automation.
- Client
- Golden Pets Hotel
- Activity
- Pension for small breed dogs, care and transport
- City
- Belgrade
- Type
- Multi-page site with price list and gallery
- Technologies
- PHP 8.3 · no database · WebP · Schema.org
- Status
- Live site, content and mail with us
- Technology
- PHP 8.3 · Bez baze podataka · WebP i srcset · Schema.org
Problem and context
What does Golden Pets Hotel do
Golden Pets Hotel is a boarding house for small breed dogs in Belgrade, in the neighborhood The Jerkovic brothers. Dogs do not stay in boxes, but in a house and a fenced yard suitable for small breeds, with freedom of movement throughout the day. Reception and collection take place during working hours, from 9 a.m. to 9 p.m., and supervision of the dogs lasts 24 hours.
The boarding house is registered with the relevant republican authorities, so payment is also possible via account. The team is qualified to care for animals in boarding houses and shelters at the Faculty of Veterinary Medicine in Belgrade, and the practicing veterinarian, Dr. Vet. honey Nebojša Milivojević performs examinations and light therapy at the request of the owner, while the dog is on leave. A medical report is required for a stay longer than three days, and it is done 365 days a year, including holidays.
Dogs up to fifteen kilograms are accepted. Accommodation includes haircuts and bathing by arrangement, daily basic hygiene and transportation of the dog from the home address to the boarding house and back. Articles about the guesthouse were recorded for the National Daily TV Pink and the show "Novo jutro" — that part of history lived only on social media until now and got its place on the site.
What was the transition from
The site we found was WordPress frozen in 2019: core 4.9.26, WooCommerce 3.5, Yoast 11, WooCommerce and a theme bought on a template exchange that was written for a plumbing company and then repurposed for a guesthouse.
The problem was not the age, but that the site could not be updated. The entire page layout was built in the KingComposer builder, which was shut down by wordpress.org in February 2022 due to a security breach — no more downloads or makers. If removed, pages remain as plain text with tags; if it remains, there is also a hole that no one is patching up. That's why "update everything" was not an option even on paper, no matter how it looks from the administration.
Along with that, there was also a store that no one used. The demo products from the theme — t-shirt, sweatshirt, cap, belt — were in the database and were properly reported to Google through the store's sitemap. A dog boarding house whose indexed pages bear the names of items from someone else's template is not a problem that can be solved with better texts.
Another domain from the same owner, goldenpets.rs, was not an ordinary redirect. That's where all of the older WordPress lived: the homepage did redirect, but the internal pages still returned content. Two live sites with the same texts means a duplicate for the search engine and a double attack surface, so that domain had to come into play as well.
Invitation instead of form
The first thing the owner asked for was that nothing be reduced to automatics. No online reservations, no calendar with free appointments, no request waiting somewhere for approval. A man who leaves a dog with someone wants to hear the voice on another page first, and the boarding house wants to ask about the breed, age, habits and dates before confirming anything.
That is why there is no contact form on the site. It was removed along with the code that sent the mail, and on the contact page there are channels that people use anyway: call, Viber, WhatsApp and Instagram. There is a floating call button with a Viber shortcut next to it throughout the site, while there is no button in the header — and that was an express request.
When the only conversion is a call, the phone number is the most sensitive information on the site. Condition found: every tel: link called a number without the last digit. The printed text was correct, so nothing was visible to the naked eye — the error was only revealed by a call that did not go through. For a business like this, it's the single most expensive mistake that can happen on a site.
The second rule is one number on the whole site. The older number, which is still in the directories today, was deleted everywhere at the owner's request — together with the constants that held it, so that it would not return automatically during a later change.
Site structure and content
The site has a homepage and four pages — about the guesthouse, gallery, news and contact — with individual news pages and a privacy policy. Nothing more. The guesthouse has one service and one location, so every additional side would be an empty corridor.
The homepage is arranged in the order of the questions the dog owner asks: what is this place, what does the dog do there all day, what else can be arranged, how much it costs, what it looks like and how to contact me. Just below the introductory section is a strip with four things that are checked most often — dog insurance during the stay, stay without kennels, 24-hour vet and registered hotel with bill payment.
The page About Us has a longer text about the house and the yard, about the team adapting to the rhythm of the dog instead of the other way around, and about inviting the owner to come on a tour with the dog before booking anything. There is also a section "They wrote about us" with a newspaper clipping, which before that stood in the middle of the gallery and spoiled it.
The news was transferred from the old site, and something unpleasant appeared there: the publication dates were wrong, one was on the wrong article, and two texts claimed things that are not in the source — among other things, that the crew visited a television studio, while the source says that the presenters visited a guesthouse. The dates have been corrected from the RSS records of the old site, and the texts have been rewritten based on what is supported. A site that claims falsely is worse than a site that claims nothing.
A price list that answers before anyone asks
Prices are on the homepage, in three packages and one discount section. The standard package is marked as the most requested, the second one adds food from the hotel, the third one is kindergarten — day care while the owner is at work, with a monthly price and the possibility of shorter terms by agreement. A discount is agreed for a longer stay and for two dogs from the same home, and holidays are not charged more expensively. The latter is the information that people are looking for in December, when the competition is more expensive.
Transporting a dog has its own price, which starts from the amount specified on the website and still depends on the part of the city. It is written like that on purpose: the boarding house does not have a street table and will never have one, but the initial number prevents the conversation from starting from scratch.
A small design error that shows why the price list is not just text: the price unit was nailed down in the code, so the monthly price of the kindergarten was displayed as a daily price. The number is correct, the meaning is wrong, and on the most expensive package. Now each package carries its own unit.
Published prices are a decision, not an omission. The guesthouse takes calls all day and any call that starts with the question "how much does it cost" wastes time on both sides. Whoever calls after reading the table, calls because the price suits him.
Photos, gallery and sign
The client sent twenty-eight of his photos. Sixteen of them entered the gallery and each one has a dog. The request was clear — no empty rooms or beds, because the boarding house is not sold by its interior, but by how the dogs look when they are there.
A smaller version is displayed in the grid, and a click opens a larger one in the image viewer. Each photo also has a narrow version for small screens, so the phone takes what it really needs instead of the full image. After that, the entire grid of sixteen images weighs about 210 kilobytes — before that, nine images took twice as much.
AVIF was tried and rejected. In these photos — older, grainy, phone shots — AVIF came out bigger than WebP. The format that is better on average was not better here, so it was the measurement that decided, not the rule from the instructions.
The sign arrived as a photo of the printed logo, with a moiré pattern across the entire field. The processing went in steps: removing the pattern, extracting the dark mark from the base and composite to an even yellow circle. The logo, favicon, icons to add to the phone's home screen and the color of the browser theme are derived from it. If one day the vector arrives, it will be sharper; until then, this is the most that could be extracted from that one photo.
Technical performance
The new site is hand written PHP 8.3. No WordPress, no plugins, no page builder and no database. The whole site is two files with a common layer, one file for each page and one style file.
The content is separate from the display, in one file with data: name and slogan, facility address and company headquarters, registration number and PIB, telephone, working hours, network profiles, introductory slides, price list packages, additional services and news. Changing the price is changing one line, not asking for a number of ten pages.
Why no database: content changes rarely and is edited by one person. The database here would be one more system that can go down and one more backup that has to be made. In this way, the entire site is a folder that is copied in seconds, and each change of text is seen as a difference in an ordinary text file.
The address of the object and the headquarters of the company are separated in the code, with a comment as to why: the headquarters goes exclusively in the legal block of the footer, while the contact data and the schema contain the address of the object. The building's street has since been renamed, so next to the new name is the old one — maps still show the old one, and people are still looking for it.
One pitfall from server configuration is worth noting. Adding a single header inside a block for PHP silently overrode all inherited security headers from the parent block — the rule is that headers are not appended but replaced at the level at which they are referenced. The solution is to re-enable the security header set in that particular block. The site works the same, so the error is not visible until the headers are measured.
One hundred and thirty nine addresses that should not have disappeared
The old site was in the index for years and had 139 known URLs. It is the only asset that a move to a new site can destroy in one day, and the damage is only visible after several months.
That's why the new pages were built on the old paths — about the guesthouse, gallery, news and contact kept the addresses they already had, so those addresses didn't even have to be redirected. Versions with the extension .php permanently lead to clean.
A server-level redirect map was created for 82 legacy URLs that have no peers. A minor pitfall: long keys in that map require an increased separator size, otherwise the server refuses to start with an error that doesn't mention any addresses.
Seventy-six URLs did not receive a redirect but a 410 status — demo products, an empty multilingual branch, a category with no content, and old system infrastructure. The difference is in the message: the redirect says "moved here" and the 410 says "this no longer exists, remove from index". Pushing everything else to the homepage is the most common mistake in such transitions and the browser understands it as noise.
Old sitemaps lead to a new one. After the migration, all addresses were checked individually, on the live domain, and all responded as intended. New pages were also reported through IndexNow, so indexing started on the same day.
The site contains LocalBusiness data with address, working hours, phone, social security number and PIB, price range and network profiles, and subpages and BreadcrumbList. For a local business, that record is what connects the site to the profile on the maps.
Speed, accessibility and line through the scroll
Three loading errors were found and fixed: the loading announcement was targeting a different address than the one the browser actually selects, so the intro image was downloaded twice; all four intro slides loaded instantly, even though they are viewed one at a time; and on the subpages, the largest image was marked as delayed, which slowed down the very thing by which display speed is measured.
Accessibility is done as part of the job, not as an add-on. Inactive slides and a closed menu were excluded from the keyboard row, as invisible elements grabbed the focus; button contrast has been raised from 3.16 to 5.16 to one; removal of the focus outline is replaced by a visible label; image viewer retains focus while open; and tags for tabs without associated panels were replaced with a plain group, because they promised the screen reader behavior that doesn't exist.
At a width of 390 pixels, the menu button extended 23 pixels off the screen, so the menu could not be opened on one of the most common phone formats. For a site where the majority of visitors come from a phone, it was a dead navigation, and it is never visible in a computer browser.
The visual signature of the site is a thin line that winds through the sections and is rendered as you scroll, with a dot at the head. Her pace is intentionally uneven—she slows down before each section and catches up between them, so she follows the reading rather than running ahead of it. Below 1100 pixels it shuts down, as well as for visitors who requested less movement on the screen in the system.
No cookies, no consent, with a legal part
The site does not make any requests outside of its server. No analytics, social pixels, embedded maps, external fonts, video player, or bot checking. Facebook and the map are simple links, not embedded frames that pull visitor data.
The result is that there are no cookies, so there is no consent window. It is written in the privacy policy, openly: there is nothing to agree to. A banner on a site that doesn't set any cookies is a nuisance without a purpose, yet it's there on most sites because it's copied from others.
The privacy policy is written for what the boarding house actually collects — owner's name, phone and email, information about the dog and its habits, vaccination record and medical report when needed. It also states how much data is stored, to whom it is forwarded (to the veterinarian in case of emergency intervention and to the accounting department when an invoice is requested) and how deletion is requested. The identity number and PIB are at the bottom, as the Law on Electronic Commerce requires from anyone who offers a service through the website.
Outcome
What the client received
A maintainable website. No abandoned page builder, no plugins waiting for an update that will never arrive, no unused store generating years of crawl errors.
Along with the site, the domain and email were migrated as well. The boarding house mailbox with several hundred messages was transferred in its entirety, and the client did not have to change the password or set up the phone — the old login continued to work. For someone who reads business mail from one device and doesn't like settings, it's the difference between a smooth migration and a day of lost email access.
Practically, now it looks like this: the price is changed in one line, a new article is added and is immediately in the list and in the sitemap, the gallery is updated with new photos in the same format, and the site’s phone link dials the correct number. Everything the old site had in the index is still in place, those URLs now lead to pages that work well on a phone.
What was left off the site was left on purpose. No reservations, no chat windows, no pop-up notifications. The guesthouse still works by phone, and the website helps callers understand what awaits them.
FAQ
Frequently asked questions
Why does the site have no online reservations?
Because the owner didn't want them. Before accepting a dog, the boarding house must ask about the breed, age, habits and health record, and this is not solved by a calendar with free appointments. The site therefore leads to a call, Viber and WhatsApp, and there the conversation ends in a minute.
Why a new site and not a repair of the existing WordPress?
Because the existing one could not be updated. The entire page layout was built in a builder that was officially shut down due to a security flaw — without it, the pages fall apart, and with it, a hole is left. In addition, the theme was written for another activity, so the appearance could not be improved without rewriting.
Who changes the prices and adds news?
We change the content, because the site deliberately does not have an admin panel. Prices, opening hours and news are in one place in the code and are changed in one line. For a site with several pages and a price list that is touched once a year, the panel would be more work to maintain than it would bring benefits.
What happened to the positions of the old site on Google?
The new pages were placed at the same addresses where the old ones were, so the most important paths did not even have to be redirected. A redirect map was created for old URLs without peers, and a status was set for garbage from the old system that tells the search engine that it is no longer there. After the switch, each address was checked individually.
What happened to the other guest house domain?
There was another live WordPress on it with the same texts — only the homepage was redirecting, and the internal pages still worked. Now that entire domain leads to one site, eliminating a duplicate index and a neglected system to maintain.
Why is there no question about cookies on the site?
Because the site does not set any cookies or send any requests outside of its server — no analytics, pixels, external fonts, and embedded maps. When there is nothing to follow, there is nothing to agree to, so the banner would be just a distraction.
Next step
Have a project that needs to work better?
Send me your goal and current situation. I will reply with a concrete scope proposal.
Start a project