Website QA & Design Review

demo.oxyliving.com.tr · Oxyliving (Tesan Global Mühendislik A.Ş.) · agency delivery review
Reviewed and independently re-verified on 10 July 2026 · Desktop 1440×900 and mobile 390×844 · Playwright (Chrome), Lighthouse 13.4, axe-core 4.10, curl status checks, sitemap and link crawl

1. Executive summary

My recommendation: don't accept this delivery yet.

The design itself is good work. The product pages sell, the FAQ is real content rather than filler, and the visual language holds together across 30+ pages. Someone cared about this.

The finishing is another story. The main Products page is empty. The mobile menu links to pages that don't exist, so a phone user can't actually reach three of the seven chamber models. The old theme's demo shop is still running, cart and all, selling a ₺125 backpack next to medical oxygen chambers. The homepage hero still contains the template's "personal fitness coach" text. Ten image files were never uploaded, which breaks sections on the Solutions page and product pages and throws errors on every page of the site.

And one thing matters more than all of that for your goals: the site currently tells Google and every major AI crawler to go away. Some of this is normal for a staging domain, but part of it is a Cloudflare setting that will follow the site to production unless someone turns it off. If AI assistants and search results are the point, item 4 in the checklist is the one to watch.

Every finding below was tested twice: once during the review, then again in a separate verification pass with fresh requests. Two of my initial conclusions didn't survive re-testing, which I've noted where relevant (the booking calendar works, and the raw-shortcode bug is one specific page rather than every 404). Everything else reproduced.

6
Critical findings
10
High findings
9
Medium findings
5
Low findings
18
Broken internal links
10
Missing media files (404)
Contents
1. Executive summary
2. Lighthouse scorecard
3. Critical findings
4. High findings
5. Medium findings
6. Low findings
7. Page-by-page QA matrix
8. Speed and performance
9. SEO and AI-assistant discoverability
10. Accessibility
11. What works well
12. Acceptance checklist for the agency

2. Lighthouse scorecard

Page / devicePerformanceSEOAccessibilityBest practicesFCPLCPCLS
Homepage — mobile434285965.3 s22.7 s0.175
Homepage — desktop680.9 s4.2 s0.063
Cezeri product — mobile5958874.0 s7.9 s0.093

Reasonable acceptance targets: performance 80+ on mobile and 90+ on desktop, LCP under 2.5 s, CLS under 0.1, SEO 90+ once the staging blocks come off. The SEO score is low mainly because of the deliberate noindex on this demo domain, but the underlying problems in section 9 won't fix themselves at launch.

3. Critical findings

C1 — The main Products page is empty

CRITICAL   Page: /products/, the "Products" destination in the header and the "View all models" link in the mega-menu

There is no product grid on the products page. No heading, no text, nothing. The page shows one "Made to order" banner, and that banner sits on top of the footer columns. The page structure contains ten authored sections; all of them render empty. A buyer who clicks "Products" lands on what looks like a page that failed to load.

Products hub page showing only a CTA banner overlapping the footer
/products/ in full. One banner, a collision with the footer, and nothing else.
Counted product links and words inside <main> on a fresh fetch: 0 links, 0 words, 0 H1s. Screenshot taken after a full scroll pass to rule out lazy-loading.
Rebuild the page with the model range (the mega-menu's grouping into single-person, multi-person and institutional would translate well), and find out why ten sections render blank. Until then, /products/ could redirect somewhere that works.

C2 — The mobile menu links to pages that don't exist

CRITICAL   Affects every page. The mobile menu is a separately maintained block with its own URLs, and they're stale.

Seven dead links, tested one by one: /cezeri-oxygen-chamber/, /farabi-oxygen-chamber/, /taragay-oxygen-chamber/, /solutions/wellness-spa/, /solutions/clinics/, the "Explore Cezeri" button, and "Book a demo" pointing at /demo/. All return 404. On a phone, the menu is the only navigation there is. Three chamber models, two solution pages and the demo booking page are unreachable from it.

There's a second cost: this menu block ships in the HTML of every page, desktop included, so crawlers see sitewide links to 404s.

Pulled every link from the rendered mobile menu block in the DOM, then requested each URL fresh with curl. All seven return 404. Re-ran the same check in the verification pass; same result.
Point the mobile menu at the same WordPress menu the desktop nav uses, one source of truth. Then walk every item on an actual phone.

C3 — The theme's demo shop is still live

CRITICAL   /shop/, /cart/, 32 demo products, 21 demo portfolio pages, 13 demo categories. All in the public sitemap.

The Uncode theme's sample store shipped with the site. "Lloyd Wright Chair." "iPhone Gum Case." "Everyday Backpack, ₺125,00," with star ratings and Select-options buttons. The cart page recommends these items under "New in store." Meanwhile /checkout/ and /my-account/ return 404, so the store can't complete a sale anyway. It's half-removed: visible enough to embarrass, broken enough to be useless.

Cart page cross-selling demo backpack, camera, sneakers and bike
The cart page of an oxygen chamber manufacturer, recommending sneakers and a bike.
Fresh status checks: /shop/ 200, demo product pages 200, demo portfolio 200, /checkout/ and /my-account/ 404. product-sitemap.xml still lists all 32 demo items.
Delete the demo products, categories and portfolio posts. If the business is quote-based (it clearly is), disable WooCommerce outright. Clean the sitemap, then 301 or 410 the old URLs.

C4 — Google and AI crawlers are both locked out

CRITICAL, launch gate   Whole site. Full analysis in section 9.

Every page carries noindex, nofollow. On top of that, robots.txt contains a Cloudflare-managed block that disallows GPTBot, ClaudeBot, CCBot, Google-Extended, Amazonbot, Bytespider, Applebot-Extended and meta-externalagent, and adds a Content-Signal: ai-train=no line. There is no llms.txt.

The noindex is correct for a demo domain. The Cloudflare AI block is the trap: it's a zone-level setting, it will quietly carry over to production, and nobody will notice until someone asks why ChatGPT has never heard of Oxyliving. Given that being cited by AI assistants is an explicit goal here, this single setting can undo the entire content investment.

Fetched robots.txt and confirmed each bot's Disallow rule individually. Confirmed the noindex meta on fresh HTML. llms.txt returns 404.
Write a launch runbook with an owner and a date: remove noindex (WordPress, Settings → Reading), switch off Cloudflare's AI-bot blocking for the production zone, publish llms.txt, then prove it worked with curl -A GPTBot and a Search Console fetch within 24 hours of launch.

C5 — /support/downloads/ is dead and renders raw page-builder code; the 404 page's home button goes nowhere

CRITICAL   /support/downloads/ is linked from the Certifications page, the Support hub and the sitemap

Two related problems, and I want to be precise because my first pass overstated this. The Downloads page returns 404 and its response renders unprocessed shortcode text ([vc_row is_header="yes"…]) across the top of the page. That broken render is specific to this URL. Other dead URLs get the designed 404 page, which looks fine but has its own bug: the "Back Homepage" button is an href="#", so clicking it does nothing.

Downloads page showing raw shortcode text
/support/downloads/ as a visitor sees it: raw builder markup where a page should be.
Compared response bodies across five dead URLs. Only /support/downloads/ contains the raw is_header shortcode text (198 KB response vs 160 KB for the normal 404). Extracted the 404 page's button markup from the HTML: <a role="button" href="#" title="Index">Back Homepage</a>.
Restore or rebuild the Downloads page (three other pages link to it), and point the 404 button at /.

C6 — The homepage hero still has the template's fitness-coach text

CRITICAL, content   Homepage, first paragraph every visitor reads

The hero subtitle: "A dedicated personal coach who builds your custom training plan and stays by your side every single day to ensure you reach your fitness goals with confidence." This is filler from a fitness template. It's the most prominent sentence on the site, on desktop and mobile, and it's about a personal trainer.

Homepage hero with placeholder fitness copy highlighted
Homepage at 1440 px.
Present in fresh server HTML on both review passes, so it's the published content, not a caching fluke.
Replace with approved copy, then sweep every slider and hero for other template leftovers.

4. High findings

H1 — Ten media files were never uploaded; every page pays for it

HIGH   The five oxyliving-solution-*.webp carousel images plus solutions-clinic, solutions-spa, two product video posters and home-ownership-bg

The five carousel images are requested by a global section that appears on every page, so every page load produces five console errors and downloads about 640 KB of 404-page HTML for nothing. Where the files are actually visible, things look broken: two big empty cards on /solutions/, blank grey video players on Cezeri and Biruni, a missing slide in the homepage carousel.

Two empty cards with missing background images
/solutions/, "From design to installation": both cards lost their images.
Blank grey video box on Cezeri page
Cezeri video block. The poster 404s, so visitors get a grey rectangle.
Requested all ten files directly in the verification pass: ten 404s. The per-page cost shows up in the network log as five 128 KB HTML responses.
Upload the files or correct the references. Before launch, crawl the site and assert zero 4xx responses under wp-content/uploads.

H2 — Mobile header: search icon sits on the logo; hero text sits on a busy photo

HIGH   Logo overlap on every page at 390 px; hero readability on the homepage

At 390 px the logo box runs to x=332 and the search icon starts at x=268, a 46 to 64 pixel collision depending on which element you measure. It's on every page. Separately, the homepage hero puts dark text straight onto the photo with no scrim, and the paragraph (currently the fitness placeholder) is close to unreadable.

Mobile homepage hero with unreadable text and overlapping icons
Homepage at 390 px.
Measured the bounding boxes in the browser rather than eyeballing: logo x=33 to 332, search icon x=268/286. Overlap confirmed on two page types.
Shrink the mobile logo or move search into the hamburger. Add a gradient scrim behind hero text at mobile sizes.

H3 — The Oxygen Experience hero is clipped on both desktop and mobile

HIGH   /oxygen-experience/, a main nav destination

The heading renders as "e a closer look at / n-pressure / gen." at 1440 px. The text block starts at x=28 while the visible dark hero card starts around x=157, so the first characters of every line fall outside the card and get cut. Mobile clips both edges. This is the landing page for the entire education section.

Hero text cut off on the left edge
/oxygen-experience/ at 1440 px, fresh load.
Reproduced on three separate fresh loads (two desktop, one mobile) with element position measurements each time. Not an animation catching mid-frame; the layout settles like this. The custom .oxe-hero.oxe-bleed CSS positions content against the full viewport while the card paints inset.
Fix the offset in the custom hero CSS so text stays inside the card at every breakpoint.

H4 — The Certifications page shows placeholder scans labelled "Verified"

HIGH, trust and legal   /certifications/

The section says "our certifications aren't just claims — here are the documents behind them," and then shows four striped placeholder graphics reading "CERTIFICATE SCAN", each tagged with a Verified checkmark: CE, ISO 13485, ISO 9001, ISO 14001. For a medical-adjacent product, claiming to show documents and showing mockups is worse than showing nothing. The page's "Browse downloads" button also points at the dead downloads page (C5).

Placeholder certificate scans
The "See the proof" section, as delivered.
Fresh HTML contains five "certificate scan" placeholder strings and four "Verified" tags. The downloads link target returns 404.
Publish the real scans (redacted where needed) or drop the "here are the documents" claim. Have legal sign off on the certification wording before launch.

H5 — Mobile performance is poor: Lighthouse 43, LCP 22.7 s

HIGH   Causes and fixes in section 8

The short version: no page caching (1.8 s server response), a 424 KB unminified plugins.js, about 2.9 s of unused JavaScript, hero images that aren't prioritised, and a Google Fonts request that loads 18 font families when the design uses two.

Lighthouse 13.4 runs on homepage (mobile and desktop presets) and the Cezeri page. Raw JSON kept alongside this report (lh-*.json).

H6 — Broken PDF downloads on product and solution pages

HIGH   Cezeri, Biruni, /solutions/home/

The interior catalogue link on Cezeri and Biruni has its upload path doubled (…/uploads/2026/07//wp-content/uploads/2026/07/…) and 404s after a redirect. The home brochure at /downloads/oxyliving-home-brochure.pdf also 404s. The exterior colour chart works, which suggests someone tested one download button and stopped.

All three PDFs re-requested in the verification pass: two 404, one 200.
Fix the two hrefs, then click every download button on the site once.

H7 — Internal SEO instructions shipped in the HTML of four product pages

HIGH   Cezeri, Biruni, Avicenna and Kağan pages

Each of these pages contains a hidden section whose headings are working notes: "SEO text section for the Cezeri page", "HOW TO USE: In Uncode, add a normal 'Text' element (NOT a Raw HTML block)… Replace the /contact/ and range links with your real URLs." The note tells whoever was building the page to paste the SEO copy as visible text. That never happened. So the copy is invisible to users, the agency's internal notes are in the shipped markup, and each page carries 4 or 5 H1 tags as a side effect.

Checked all seven product pages in the verification pass. Four contain the leaked notes (Cezeri, Biruni, Avicenna, Kağan), with H1 counts of 5, 4, 4 and 4. The wrapping section carries desktop-hidden, tablet-hidden and mobile-hidden classes, so users never see it; crawlers do.
Do what the note says: move the copy into a visible text element, delete the instructions, and get each page down to one H1.

H8 — The FAQ search box doesn't do anything

HIGH, functionality   /support/faq/

Typing into "Search questions…" changes nothing. The field accepts input but no filtering happens, and the typed text doesn't even display. The rest of the FAQ is solid: accordions work, categories work, the content is genuinely useful. The search is just not wired to anything.

Typed real keystrokes twice: once "warranty" (all questions stayed visible), once a gibberish string (all questions still visible; a working filter would have hidden everything). No input handlers are bound to the field.
Wire it up or remove it. A search box that ignores you reads as a broken site.

H9 — Desktop dropdowns open only on click, and nothing tells you that

HIGH, UX   Header navigation, all pages

Hovering Products, Solutions, Oxygen Experience or Sales & Support does nothing, even after a couple of seconds. The mega-menu (which is nicely designed once you find it) opens on click, and the click is intercepted so the parent label never navigates anywhere. There's no chevron or any hint that a submenu exists. Users who never think to click a nav label will simply never see the product menu. One likely factor: the theme's breakpoint detection classifies a 1440 px window as a small screen, which is worth investigating in its own right.

Tested hover with real mouse movement at 1440 px and 1920 px (submenu stayed hidden both times), then with synthetic mouse events (still hidden), then clicked (menu opened, page did not navigate). Theme config shows menuShowOnClick empty, menuHideOnClick on, and the html element gets screen-xs classes at 1440 px.
Enable hover-open with a sensible delay on desktop, add chevrons, and review the Uncode breakpoint settings.

H10 — No privacy policy anywhere, and the quote form links to a 404

HIGH, legal   All forms, plus the site-wide footer

The quote form says "By submitting, you agree to our Privacy Policy." The link goes to /privacy, which doesn't exist. No privacy, KVKK or terms page exists anywhere on the site. The footer has no legal links. Forms collect names, emails and phone numbers with no consent checkbox, and a GDPR plugin sets a consent cookie without ever showing a banner. For a Turkish company (KVKK applies) marketing into the EU (GDPR applies), this needs to be closed before launch, not after.

/privacy re-checked: 404. Form DOM inspected: zero consent checkboxes. Footer link list extracted: no legal pages.
Publish KVKK-compliant privacy and cookie pages, link them from the footer and under every form, enable the consent banner.

5. Medium findings

M1 — The site disagrees with itself about basic company facts

MEDIUM, content integrity

The homepage counter says 20+ countries. The About page says "8 countries and counting." The homepage meta description says 7 models; the About page counter says 8+. Any visitor who reads two pages can catch the site contradicting itself, and these are exactly the numbers a hospital procurement team checks.

Read the counter data attributes in the HTML directly: home has data-val="20" with a Countries label; About has data-val="8" with "Chamber models" and the "8 countries and counting" text in its world-map section. "7 models" sits in the homepage meta description.
Agree on one number per fact and use it everywhere.

M2 — Footer problems on every page

MEDIUM

Four issues in one footer: "Media" links to a page that doesn't exist; "Book a demo" points at /demo/ instead of /book-a-demo/ and 404s; the two-part solution names are rendered as separate links, so "Wellness" and "Health Centers" look like two different solutions that lead to the same page (same for "Sports" / "Performance Teams"); and the products column spells it "KAGAN" while the rest of the site writes "Kağan".

Footer with split links and 404 Media link highlighted
The footer's Solutions and Company columns.
All four re-confirmed in fresh HTML: the /media/ and /demo/ hrefs are present, the split link texts render as separate anchors, and "KAGAN" appears once against five "Kağan" elsewhere.

M3 — The same things have different names in different places

MEDIUM

M4 — Product pages have Article schema instead of Product; no canonicals; homepage has no og:image

MEDIUM, SEO/AI   Details in section 9
Parsed the JSON-LD on the Cezeri page in both passes: Organization, WebSite, ImageObject, WebPage, Person, Article. No Product node. No rel=canonical on homepage or product pages. No og:image on the homepage.

M5 — The contact form is rougher than the quote form

MEDIUM   /contact-us/

No labels, just placeholders that vanish while you type. Validation messages are stock Contact Form 7 ("Please fill the required field.") styled in brand teal, which doesn't read as an error. Phone isn't validated. The quote form next door has proper labels and chip selectors, so the standard exists on this site; the contact form just wasn't brought up to it.

Submitted the form empty: three fields flagged, generic messages, teal styling. Field inventory shows no label elements.

M6 — The demo booking calendar takes about 8 seconds to appear, with nothing in the meantime

MEDIUM   /book-a-demo/

The Cal.com embed works. I initially wrote it off as broken because the section is a big blank white box for its first several seconds; on re-test with more patience the date picker and time slots rendered and are bookable. A visitor on a slow connection gets the same first impression I did, and they won't wait to be corrected.

First test: blank iframe after ~3 s, wrongly flagged as dead. Re-test on desktop with an 8-second wait: calendar rendered ("Oxyliving Demo, 30m"). Mobile test: rendered with selectable dates and slots.
Show a skeleton or spinner while it loads, add a preconnect to app.cal.com.

M7 — The "chosen by" logo strip is three logos on repeat

MEDIUM

"Chosen by studios, clinics and homes worldwide" is illustrated by Ritz-Carlton, the Turkish Football Federation and the Jordan FA, looped to fill the marquee. None of the three is a studio, a clinic or a home, and the files are visibly pixelated. Worth confirming usage rights while fixing the resolution.

Logo strip repeating three logos
The homepage logo marquee.

M8 — Missing and duplicated H1s

MEDIUM, SEO and accessibility

No H1 at all on /products/ and /blog/. Four to five H1s on each of four product pages (the leaked SEO sections, H7). Two on /about-us/. Heading levels skip around throughout, which both Lighthouse and axe flag.

M9 — Search results are a mixed bag visually

MEDIUM, polish

Site search works and returns sensible results. In the results grid, some cards have images and others are bare text stubs, and demo shop items show up alongside real pages until C3 is done.

6. Low findings

L1 — A malformed font link errors on every page

LOW

Someone pasted a CSS value into a link tag: href="url(https://fonts.googleapis.com/css2?family=Inter…". Browsers refuse it with a MIME error on every page. Fonts still load through the main request, so this is console noise and a few wasted bytes. Delete the tag.

L2 — Console and endpoint hygiene

LOW

Six-plus console errors per page (mostly the missing images and the font link), a stray formatting log on form pages, and xmlrpc.php answering requests. Disable XML-RPC if nothing uses it.

L3 — The agency's own footer logo is clipped on mobile

LOW

The MAGULATE logo overflows the right edge at 390 px on some pages.

L4 — Logo tagline disappears on coloured backgrounds

LOW

On pages with a coloured header band, like search results, the teal "HEALTHY YOUR FUTURE" tagline nearly vanishes. A white logo variant would fix it. Separate note for the client rather than the agency: the tagline's English reads oddly, but that's a brand decision.

L5 — The empty cart has a crying face

LOW

A weeping emoji face greets anyone who opens the cart. Off-tone for a company selling medical-grade equipment, and moot once the cart is removed (C3).

7. Page-by-page QA matrix

PageH1Meta descBroken media/linksDesktopMobileNotes
/ (home)5 img 404Placeholder hero copy; logo stripHero unreadable; icon overlapC6, H1, H2, M1, M7
/products/5 img 404Empty page, overlapSameC1
Cezeri product5×H1video poster, PDFBlank video boxGoodH1, H6, H7; otherwise the strongest template on the site
Biruni product4×H1video poster, PDFBlank video boxGoodH1, H6, H7
Avicenna / Kağan products4×H15 img 404GoodGoodH7 (leaked notes verified on both)
/solutions/7 img 4042 empty cardsGoodH1, M3 naming
/solutions/home/bg img, brochure PDF, 2 product linksGoodGoodH6, plus dead links to /products/avicenna-oxyl-1s and cezeri-oxyl-1h
/oxygen-experience/5 img 404Hero clippedHero clippedH3
…/what-is-high-pressure-oxygen/5 img 404GoodGood
/about-us/2×H15 img 404GoodGoodM1 stats conflict; 39 images without alt text
/certifications/downloads link 404Placeholder scansLayout OKH4
/support/ hubdistributor + downloads links 404GoodGood/support/distributor should be /support/become-a-distributor/
/support/faq/5 img 404Search deadGoodH8; accordion and FAQPage schema both good
/support/downloads/Returns 404 with raw builder markup; listed in the sitemap and linked from three pages (C5)
/contact-us/5 img 404No labels; stock CF7 messagesGoodM5; validation works; map embed works
/request-a-quote//privacy 404Best form on the siteGoodH10
/book-a-demo/~8 s blank before calendarCalendar worksM6
/blog/5 img 404GoodGoodM8
Blog post (sample)5 img 404GoodGoodBlogPosting schema present
/cart/, /shop/, demo productsTheme demo store live (C3); /checkout/ and /my-account/ 404
404 page (generic)Renders correctly, but "Back Homepage" links to "#" (C5)

8. Speed and performance

Measured (Lighthouse lab, homepage)

MetricMobileDesktopTarget
Performance score436880+ / 90+
First Contentful Paint5.3 s0.9 s< 1.8 s
Largest Contentful Paint22.7 s4.2 s< 2.5 s
Cumulative Layout Shift0.1750.063< 0.1
Total Blocking Time240 ms10 ms< 300 ms
Server response (TTFB)≈ 1.8 s< 0.6 s
Initial payload≈ 1.4 MB / 100 requests, before lazy images

Where the time goes, in order of impact

  1. No page caching. Every HTML response comes back cf-cache-status: DYNAMIC after roughly 1.8 seconds. A WordPress page cache or Cloudflare cache rules for anonymous HTML is the single biggest win available.
  2. The hero image isn't prioritised. 22.7 s mobile LCP. Size the hero properly, preload it, set fetchpriority="high", and don't lazy-load anything above the fold.
  3. JavaScript weight. plugins.js is 424 KB and unminified. Lighthouse estimates 2.85 s recoverable from unused JS and about 1 s each from minification and CSS pruning. Uncode has minify/concat options; turn them on.
  4. Fonts. One Google Fonts request pulls 18 families in every weight, with subsets like Cherokee and Syriac. The design uses Space Grotesk and Inter. Trim the request and delete the malformed second font link (L1).
  5. The 404-image tax. Five missing images cost every page view about 640 KB of 404 HTML. Fixing H1 speeds up the whole site as a side effect.
  6. Layout shift. CLS 0.175 on mobile. Reserve space for the hero and slider media with explicit dimensions.

9. SEO and AI-assistant discoverability

The goal is to rank on Google and get cited by ChatGPT, Claude, Perplexity and Google's AI results. Right now the site is invisible to all of them, by configuration.

CheckStatusDetail
Indexing metaBlockednoindex, nofollow on every page. Right for a demo domain, fatal in production. This is the number one launch-gate item; verify removal on launch day.
AI crawler accessBlockedCloudflare-managed robots.txt rules disallow GPTBot, ClaudeBot, CCBot, Google-Extended, Amazonbot, Bytespider, Applebot-Extended and meta-externalagent, with Content-Signal: ai-train=no. This is a zone setting and it will carry to production unless someone turns it off. Verified rule by rule.
llms.txtMissingPublish /llms.txt describing the company, the seven models and the key pages. Cheap to do and AI retrieval tools read it.
Sitemap hygieneFailThe sitemap index advertises 32 demo products, 21 demo portfolio pages, 13 demo categories and the dead downloads page. Clean it with C3.
Structured dataPartialOrganization, WebSite and WebPage emitted sitewide; FAQPage on the FAQ is a real asset for AI answers; BlogPosting on posts. But product pages are typed Article, with no Product node, no brand, no model, no specs. Add Product schema. There are also stray Person nodes on company pages.
Canonical URLsMissingNo rel=canonical on the homepage or product pages in either review pass. Possibly suppressed alongside noindex; confirm they appear after de-staging.
Open Graph / TwitterPartialInner pages are fine. The homepage has no og:image, so shares of the main URL get no preview.
HeadingsIssuesMissing H1s on /products/ and /blog/, four to five H1s on four product pages, skipped levels elsewhere. Affects snippet quality and AI extraction both.
Internal links18 brokenIncluding the mobile-menu 404s that appear in every page's HTML (C2). Dead links waste crawl and read as neglect to quality systems.
Language targetingNoteEnglish-only content declaring en-US on a .com.tr domain, no hreflang. If a Turkish version or an international .com is planned, decide the hreflang setup before launch, not after.
Content quality for AI citationGood baseThe oxygen-experience explainers, the FAQ and the spec-heavy product pages are exactly what AI assistants quote. The content is ready; the doors are locked.

10. Accessibility (WCAG 2.1 A/AA spot-check)

Issue (axe-core / Lighthouse, homepage)ImpactCount
Images without alt attributesCritical24 (39 on /about-us/)
Links without a discernible name (icon and image links)Serious46
Focusable elements inside aria-hidden containers (hidden menus and sliders stay tabbable)Seriousmultiple
Buttons without accessible namesSerious1+
Non-sequential heading orderModeratesitewide
Form inputs labelled by placeholder only (contact form)Moderate5 fields

Add the mobile hero contrast (H2) and the teal error messages (M5) to this list in practice. The Lighthouse accessibility score of 85 says the bones are fine; an alt-text and link-name pass would get it to defensible.

11. What works well

Worth stating plainly, because the checklist below is long and the agency did real work here:

12. Acceptance checklist to send the agency

#ItemRefPriority
1Rebuild /products/ with the full model range; fix the banner/footer overlapC1Blocker
2Fix every mobile-menu URL; retest each item on a real phoneC2Blocker
3Remove the demo store, portfolio and categories; clean the sitemap; redirect or 410 the URLsC3Blocker
4Launch runbook: remove noindex, disable Cloudflare AI-bot blocking, publish llms.txt, verify with live fetchesC4, §9Blocker at launch
5Restore /support/downloads/; point the 404 page's home button at /C5Blocker
6Replace the placeholder hero copy; sweep for other template textC6Blocker
7Upload the ten missing media files; add a zero-404-media check before launchH1High
8Mobile: hero scrim, and fix the logo/search-icon overlapH2High
9Fix the Oxygen Experience hero clipping at all breakpointsH3High
10Real certificate scans, or drop the claim; fix the downloads buttonH4High
11Performance: page cache, LCP preload, JS minify and pruning, trim fonts to the two used familiesH5, §8High
12Fix the interior-catalogue and home-brochure PDF linksH6High
13Make the hidden SEO copy visible on four product pages, delete the internal notes, one H1 per pageH7High
14Wire up the FAQ search, or remove itH8High
15Desktop menus: hover-open plus chevrons; review the theme breakpoint settingsH9High
16Privacy/KVKK/cookie pages with consent; fix the /privacy linkH10High
17Reconcile the countries and model-count numbers; unify naming across menus and footerM1, M3Medium
18Footer: fix Media and Book-a-demo links, merge the split solution names, correct "Kağan"M2Medium
19Product JSON-LD, homepage og:image, confirm canonicals after de-stagingM4, §9Medium
20Contact form labels and error styling; Cal.com loading state; alt-text and link-name passM5, M6, §10Medium

Method: each finding was reproduced against the live site on 10 July 2026, then re-verified the same day in a separate pass with fresh HTTP requests, DOM measurements and real input events. Two findings changed after re-testing and are marked as such (M6, C5). Lab performance figures are Lighthouse 13.4 defaults with mobile throttling; production field data will differ, but the causes identified are configuration-level. Evidence: screenshots/ (raw), screenshots/annotated/ (highlighted), lh-*.json (Lighthouse), plus the audit scripts used.