Skip to main content
Archived

SEO Report for https://www.so-kleen.com.ng

Your general SEO Checkup Score


SEO Score67/100
Average SEO score of top 100 sites: 75%This value indicates the average SEO score of the top 100 most visited websites in the US (in the past 12 months)
AI Visibility76/100
AI visibility score reflects brand reach in AI

Your site scored 67/100, below the 75 average for top sites. We found 16 issues to fix, and clearing them is how you move up. And an AI Visibility Score of 76/100 means ChatGPT, Gemini and Perplexity mention your brand some of the time, with clear room to push further.

16 Failed
3 Warnings
44 Passed

Want to fix these issues and track your progress?

Issues to fix

HIGH
To improve the website experience for your visitors, it is recommended to eliminate any render-blocking resources on this webpage.
Details
HIGH
H1 and H2 tags ensure better search engine visibility and ranking by providing structure and hierarchy to the content, improving readability, and providing opportunities for keyword optimization.
Details
HIGH
Add a sitemap file to help search engine crawlers index content more thoroughly and quickly.
Details
HIGH
Add a robots.txt file to properly communicate with web crawlers and prevent unwanted access to sensitive content.
Details
HIGH
Using images in a modern format can significantly reduce the file size and improve the loading speed of a webpage, providing a better user experience and potentially increasing engagement.
Details
MEDIUM
Serve properly sized images to reduce page loading times and to improve user's experience.
Details
MEDIUM
Avoid using distorted images, as they can have a negative impact on the user experience.
Details
MEDIUM
Consider using structured data in your webpage as it can help search engines gain a better understanding of your content.
Details
MEDIUM
Consider adding cache headers for JavaScript resources to speed up the webpage for returning users.
Details
MEDIUM
Consider adding cache headers for images to improve website performance. With cache headers, browsers can cache images and serve them quickly to returning visitors, rather than re-fetching them each time.
Details
MEDIUM
Consider adding cache headers for CSS resources to speed up the webpage for returning users.
Details
MEDIUM
HTTP/2 protocol offers several key improvements, including faster page load times, improved performance, better security and more efficient use of network resources.
Details
LOW
Enable HTML compression to reduce page size and loading times.
Details
LOW
Consider adding the Strict-Transport-Security header to your webpage to ensure that web traffic is encrypted over HTTPS, mitigating the risk of man-in-the-middle attacks and other security threats.
Details
LOW
This website either lacks a favicon or it has not been referenced properly.
Details

AI Insights

Score:0
Failed:0
Warnings:0
Passed:5
Domain Business Context
Understanding the business context of a domain can help you create content that is more relevant to your target audience and differentiate your website from competitors.

What is this domain about

Professional cleaning services for homes and businesses in Lagos, Nigeria.

Industry Niche

Commercial and residential cleaning services

Target Audience

Homeowners, office managers, and commercial property operators needing reliable cleaning support.

This test will check the business context of the domain associated with the analyzed webpage. The business context includes the domain's description, target audience and industry niche (if applicable). Understanding the business context of a domain can help you create content that is more relevant to your target audience and differentiate your website from competitors.
LLM Visibility Checker
LLM Visibility Checker

Track your brand across ChatGPT, Gemini and Claude

Get an AI Presence Score, see which of your pages get cited, and follow how you compare with competitors over time.

How visible your brand is to AI engines
Content Strengths and Weaknesses

This webpage is clear, service-focused, and well structured for converting visitors into quote requests. It presents a broad service offering with strong local relevance, but it lacks deeper proof, detailed service information, and stronger editorial credibility signals.

Content Strengths

  • Clear service positioning
  • Broad service coverage
  • Strong local targeting

Content Weaknesses

  • Limited proof of expertise
  • Weak credibility signals
  • Thin service detail
This test will analyze the content of the webpage to identify its strengths and weaknesses. The analysis includes factors such as keyword usage, readability, originality, and relevance to the target audience. By understanding the strengths and weaknesses of your content, you can make informed decisions about how to improve it and better meet the needs of your audience.
Content Trust
72%
Topical Relevance96%
Subject Expertise78%
Credibility58%

This webpage shows moderate trustworthiness because it has strong topical focus, clear contact details, and visible business information. Credibility is helped by a physical address, phone numbers, social links, testimonials, and an operating history since 2005, but it lacks policy pages, leadership bios, certifications, and cited sources.

This test will evaluate the trustworthiness of the content on the webpage. It assesses factors such as the credibility of sources, accuracy of information, and overall reliability. A high level of content trust can enhance your website's reputation and improve its ranking in search engine results.
Visual SEO Analysis
Visual SEO Analysis

Find out if your page design converts the visitors you earn

We score six things that decide whether a visitor stays and acts, from the first screen to the path to action, and rank every fix by effort and impact.

How your page's design and UX affect conversions
Content Freshness
88%

The page appears current and actively maintained, with a 2026 copyright, live service offerings, and recent blog-style content tailored to present-day Lagos cleaning needs. There are no obvious signs of stale core content, and the page reads like an active business homepage rather than archived material.

Positive Signals

  • 2026 copyright notice
  • Current service and FAQ content
  • Recent blog article previews
This test will check the freshness of the content on the webpage. It evaluates how recently the content was created or updated, and whether it remains relevant to current trends and user interests. Fresh content can attract more visitors and improve your website's ranking in search engine results.
Content Opportunities

The site already covers core service intent well, but it has room to deepen authority, improve trust, and better support users who are comparing providers. The biggest opportunities are to expand proof, add more educational content, and turn service pages into more detailed decision-making resources.

Quick Wins

  • •Add a short before-and-after gallery with captions for three recent jobs.
  • •Create a one-page service process section explaining how quotes, scheduling, cleaning, and quality checks work.
  • •Publish a visible Privacy Policy and Terms page linked in the footer.
This test will identify potential content opportunities for the webpage. It analyzes the current content landscape, identifies gaps in coverage, and suggests topics or keywords that could be targeted to attract more visitors and improve search engine rankings.

Common SEO issues

Score:60
Failed:6
Warnings:0
Passed:13
Meta Title Test
100% of top 100 sites passed
This webpage is using a title tag.
Text: Professional Cleaning Company Lagos, Nigeria | So-Kleen Ltd
Length: 59 characters
The meta title is an HTML element that defines a page's title, displayed in search engine results, browser tabs, and bookmark lists. A concise, keyword-relevant title is a strong on-page ranking signal and a major driver of organic click-through rate. AI answer engines and LLM-driven search experiences also rely on the title to identify, summarize, and cite the page in generative results.
Meta Description Test
92% of top 100 sites passed
This webpage is using a meta description tag.
Text: Choose So-Kleen, the best cleaning company in Lagos, Nigeria. Our trusted cleaners near you deliver exceptional, reliable, and premium results every time.
Length: 154 characters
The meta description is an HTML tag that provides a short summary of a page's content, often shown beneath the title in search results. While not a direct ranking factor, an accurate and inviting description significantly improves click-through rate from organic listings. AI answer engines and social platforms also use it as a trusted summary when generating previews, citations and shareable snippets.
Google Search Results Preview Test
Desktop version
https://www.so-kleen.com.ng/Professional Cleaning Company Lagos, Nigeria | So-Kleen LtdChoose So-Kleen, the best cleaning company in Lagos, Nigeria. Our trusted cleaners near you deliver exceptional, reliable, and premium results every time.
Mobile version
https://www.so-kleen.com.ng/Professional Cleaning Company Lagos, Nigeria | So-Kleen LtdChoose So-Kleen, the best cleaning company in Lagos, Nigeria. Our trusted cleaners near you deliver exceptional, reliable, and premium results every time.
A simulated preview of how the page may appear in Google search results, combining the title, URL, and meta description as Google typically renders them. Useful for spotting truncated text, weak phrasing, or missing elements before publishing, since the snippet directly influences whether searchers click through.
Social Media Meta Tags Test
89% of top 100 sites passed
This webpage is using social media meta tags.
Open Graph Meta Tags
og:titleProfessional Cleaning Company Lagos, Nigeria | So-Kleen Ltd
og:descriptionChoose So-Kleen, the best cleaning company in Lagos, Nigeria. Our trusted cleaners near you deliver exceptional, reliable, and premium results every time.
og:imagehttps://www.so-kleen.com.ng/images/logo.png
Open Graph and Twitter Card meta tags tell social platforms and link unfurlers how to display a page when its URL is shared. Well-formed tags produce richer previews with the intended title, description, and image, which improves click-through on social channels. They also serve as a structured signal that AI crawlers and answer engines can use when summarizing the page.
Most Common Keywords Test
There is likely no optimal keyword density (search engine algorithms have evolved beyond keyword density metrics as a significant ranking factor). It can be useful, however, to note which keywords appear most often on your page and if they reflect the intended topic of your page. More importantly, the keywords on your page should appear within natural sounding and grammatically correct copy.
72cleaning
41kleen
39lagos
33services
12office
A frequency analysis of the most repeated words and phrases in the page's visible content. Useful for getting a quick sense of which topics search engines are likely to associate with the page, and for spotting cases where the actual content drifts from the intended subject.
Keywords Usage Test
48% of top 100 sites passed
The most common keywords of this webpage are distributed well across the important HTML tags. This helps search engines to properly identify the topic of this webpage.
Keyword
Title tag
Meta description
Headings
cleaning
kleen
lagos
services
office
Cross-checks whether the most frequently used keywords on the page also appear in the title and meta description. Alignment between body content and metadata helps search engines confirm the page's topic and reinforces relevance for those terms.
Keywords Cloud Test
advice
agreed
areas
article
attention
blog
built
businesses
care
carpet
checklist
children
choose
clean
cleaners
cleaning
client
clients
commercial
company
construction
contact
deep
deliver
delivery
detailed
dirt
disinfection
dust
early
effective
email
environment
equipment
experienced
facilities
feel
fitness
follow
friendly
gallery
guarantee
have
healthier
high
home
homes
island
janitorial
kleen
lagos
lekki
limited
magodo
marble
need
office
offices
pets
plans
post
products
professional
properties
provide
quality
questions
quote
read
ready
reliable
repeated
residential
restoration
results
retail
right
safe
satisfaction
serve
service
services
solutions
space
spaces
speak
structured
supervision
surface
team
today
trained
upholstery
urgent
victoria
view
warehouses
whatsapp
work
years
A visual word cloud of the page's content, with more frequent terms shown in larger text. Provides a quick at-a-glance view of which words dominate the page, helping confirm that the visible content reflects the intended topic.
Competitor Domains Test
Competitor Domains

Understand your competitors' SEO and backlink profile

Get related competitors and their domain authority score in relation to your domain.

Identifies up to ten domains that compete for similar organic search results, ranked by overall domain authority based on the volume and quality of their backlink profiles. Useful for benchmarking the competitive landscape and prioritizing which sites to study for content and link-building strategy.
Heading Tags Test
62% of top 100 sites passed
This webpage does not contain H1 headings! H1 headings help indicate the important topics of your page to search engines. While less important than good meta-titles and descriptions, H1 headings may still help define the topic of your page to search engines.
H2 tags
Professional cleaning built around detail, trust and consistency.
Cleaning solutions for homes, offices and commercial spaces
Reliable cleaning without the stress of constant supervision
Professional cleaning services across Lagos
Our team, equipment and cleaning work
What clients say about So-Kleen
Request a cleaning quote
Latest from the So-Kleen blog
Questions about our cleaning services

Heading Tags Test

How to pass this test?

The H1 and H2 tags give search engines and assistive technology a clean outline of the page's topics. Fixing this issue means adding a single descriptive H1 and a logical hierarchy of H2 sub-sections so the page's structure is unambiguous to both users and machines. AI answer engines also use heading structure to segment content into discrete passages they can quote or summarize, so a clean hierarchy directly helps the page get picked up in generative results.

Example

<body>
  <h1>Lightweight Running Shoes for Marathons</h1>
  <h2>What to look for in a marathon shoe</h2>
  <h2>Top picks for 2026</h2>
  <h2>How we tested</h2>
</body>

Where to make the change

  • Raw HTML: add a single <h1> near the top of the page's main content, then use <h2> for major sections and <h3> for subsections under those.
  • WordPress: in the block editor, set the post title's heading level to H1 (themes usually do this automatically) and use the Heading block for in-body H2 and H3 sections.
  • Shopify: the product or page title field renders as an H1 in most themes. Use the rich-text editor to add H2 and H3 headings inside the body.
  • Wix or Squarespace: use the heading style picker in the block editor to assign H1, H2, and H3 levels rather than just changing font size.

Common causes and how to resolve them

  • No H1 on the page: add a single <h1> that names the page's primary topic. Many themes either skip the H1 or render the site logo as one.
  • Multiple H1s: while modern HTML allows multiple H1s, most SEO tools still flag them. Pick the most important one and demote the others to H2.
  • Headings used for visual styling only: bold or large text styled to look like a heading does not help search engines or screen readers. Use the actual heading tag and style it with CSS.
  • Hierarchy skips levels: jumping from H1 directly to H3 confuses assistive technology. Keep the order H1 then H2 then H3 without gaps.

Best practices

  • One H1 per page: reserve it for the page's main subject; treat it as the in-page equivalent of the title.
  • Make headings descriptive: each heading should make sense out of context. "How we tested" is better than "Methodology" alone if the page is a product review.
  • Include keywords naturally: H1 and H2 are mid-strength ranking signals. Use the focus keyword in the H1 and supporting terms in H2s when it reads naturally.
  • Outline the page from headings alone: if you can read just the H1 and H2s and understand what the page is about, the structure is doing its job.
Inspects the page for H1 and H2 heading tags and reports their structure. Headings give both users and search engines a clear outline of the page's topics, with the H1 acting as the primary subject and H2s framing major sections. A clean heading hierarchy also helps AI answer engines segment the content into discrete passages they can quote or summarize.
Robots.txt Test
99% of top 100 sites passed
This website lacks a "robots.txt" file. This file can protect private content from appearing online, save bandwidth, and lower load time on your server. A missing "robots.txt" file also generates additional errors in your apache log whenever robots request one. Read more about the robots.txt file, and how to create one for your site.

Robots.txt Test

How to pass this test?

The robots.txt file is the first resource most crawlers request and tells them which paths on your site they may or may not access. Fixing this issue means publishing a valid robots.txt at the site root so search engines, training crawlers, and answer-engine bots all have an explicit policy to follow. Without it, every crawler defaults to its own behavior, which can over-expose private sections or waste crawl budget on low-value URLs.

Example

User-agent: *
Disallow: /admin/
Disallow: /cart
Allow: /

Sitemap: https://example.com/sitemap.xml

Where to make the change

  • Raw HTML or static site: create a plain text file named robots.txt and upload it to the document root so it is served at https://example.com/robots.txt.
  • WordPress: WordPress generates a virtual robots.txt by default. Override it with a physical file in the site root, or use your SEO plugin's robots.txt editor.
  • Shopify: Shopify auto-generates robots.txt and exposes a robots.txt.liquid template you can edit from the theme code editor to add or remove rules.
  • Wix or Squarespace: both platforms generate robots.txt automatically and offer limited overrides through the SEO settings panel.
  • Headless or framework sites: add robots.txt to the project's public or static directory so it ships with the build.

Common causes and how to resolve them

  • File is missing entirely: create one. Even an empty file with User-agent: * and no rules is preferable to a 404.
  • File returns a 5xx error: some crawlers stop crawling the entire site when robots.txt is unreachable. Investigate server or CDN issues that block the path.
  • Accidentally blocking the whole site: a stray Disallow: / under User-agent: * hides every URL from search. Audit the file before deploying changes from staging.
  • Wrong location: robots.txt must sit at the site root, not in a subdirectory. Crawlers do not look elsewhere.

Best practices

  • Reference the sitemap: add a Sitemap: line so any crawler that fetches robots.txt also discovers your XML sitemap.
  • Keep it simple: a short, well-commented file is easier to audit than a sprawling one full of legacy rules. Remove directives whose original purpose is no longer relevant.
  • Do not rely on robots.txt for security: the file is public, so listing private paths in it advertises them. Block sensitive paths with authentication, not just Disallow.
  • Manage AI crawlers explicitly: if you want to allow or block bots like GPTBot, ClaudeBot, or PerplexityBot, add named User-agent sections for each. Defaulting to allow keeps your content eligible for citation in AI answer engines.
Verifies whether the site exposes a robots.txt file at the root domain. This file is the first resource most crawlers request, telling search engines and other bots which paths they may or may not access. It is also the standard mechanism for allowing or blocking modern AI crawlers used by training pipelines and answer engines.
Sitemap Test
83% of top 100 sites passed
This website lacks a sitemap file! Sitemaps can help robots index your content more thoroughly and quickly. Read more on Google's guidelines for implementing the sitemap protocol.

Sitemap Test

How to pass this test?

An XML sitemap gives search engines and AI crawlers an explicit, machine-readable list of the URLs you want indexed, along with metadata such as last-modified dates. Fixing this issue means generating a valid sitemap, publishing it at a stable URL, and pointing crawlers to it via robots.txt and Search Console. This is especially important for large sites, sites with weak internal linking, or sites where new content needs to be discovered quickly.

Example

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2026-04-15</lastmod>
  </url>
  <url>
    <loc>https://example.com/blog/getting-started</loc>
    <lastmod>2026-03-22</lastmod>
  </url>
</urlset>

Where to make the change

  • Raw HTML or static site: generate the XML at build time and publish it at /sitemap.xml. Many static-site generators have a built-in sitemap option.
  • WordPress: a dedicated SEO plugin will generate and update the sitemap automatically, typically at /sitemap_index.xml.
  • Shopify: Shopify generates /sitemap.xml automatically and updates it as products and collections change.
  • Wix or Squarespace: both platforms generate the sitemap automatically and serve it at the standard root path.
  • Headless or framework sites: use the framework's built-in sitemap module (for example next-sitemap for Next.js or the @astrojs/sitemap integration) so the file is regenerated on every build.

Common causes and how to resolve them

  • No sitemap published: generate one and publish it at the site root. Reference it from robots.txt with a Sitemap: line.
  • Sitemap lists URLs that 404 or redirect: stale entries waste crawl budget and trigger Search Console warnings. Regenerate the sitemap from current published URLs only.
  • Mixed canonical and non-canonical URLs: the sitemap should list canonical URLs only. Listing both http and https, or trailing-slash variants, splits crawl signals.
  • Sitemap exceeds size limits: a single sitemap may contain at most 50,000 URLs and 50 MB uncompressed. Split larger sites into multiple sitemaps and reference them from a sitemap index file.

Best practices

  • Submit to Search Console: add the sitemap URL in Google Search Console (and Bing Webmaster Tools) so the platform tracks coverage and surfaces errors.
  • Keep lastmod accurate: Google uses lastmod as a hint when prioritizing crawls. Update it whenever the page content meaningfully changes; do not bump it on every build.
  • Exclude noindex and disallowed URLs: the sitemap should describe what you want indexed. Listing pages that are blocked from crawling sends mixed signals.
  • Use sitemap index files for multi-sitemap setups: a sitemap index aggregates child sitemaps (for example one per content type) and is the single URL you submit to search engines.
Looks for an XML sitemap on the site and reports whether one is published. Sitemaps give search engines an explicit, machine-readable list of the URLs you want crawled, along with metadata such as last-modified dates, which speeds up discovery of new and updated pages. They are especially useful for large sites or those with weak internal linking.
Image Alt Test
78% of top 100 sites passed
All "img" tags from this webpage have the required "alt" attribute.
Inspects whether images on the page include descriptive alt attributes. Alt text provides accessibility for screen readers, a fallback when images fail to load, and a textual signal that helps search engines understand image content. It also improves how AI crawlers and image search tools interpret and surface the visuals.
Responsive Image Test
29% of top 100 sites passed
Not all images in this webpage are properly sized! This webpage is serving images that are larger than needed for the size of the user's viewport.

Responsive Image Test

How to pass this test?

This test fails when one or more images on the page are served at dimensions significantly larger than the size at which the browser actually renders them. Fixing this issue means resizing the source files (or serving responsive variants) so the bytes downloaded match the pixels actually displayed. The result is faster page loads, lower data usage, and better Core Web Vitals scores.

Example

<img
  src="/images/hero-800.jpg"
  srcset="/images/hero-400.jpg 400w,
          /images/hero-800.jpg 800w,
          /images/hero-1600.jpg 1600w"
  sizes="(max-width: 640px) 100vw, 800px"
  alt="Marathon runners at sunrise"
  width="800" height="450">

Where to make the change

  • Raw HTML: use srcset and sizes to let the browser pick the right variant for the user's viewport. Always include intrinsic width and height attributes.
  • WordPress: WordPress generates multiple image sizes automatically. Use the the_post_thumbnail() helper or the block editor's image block, both of which emit responsive srcset markup.
  • Shopify: use the image_url Liquid filter with size parameters (for example {{ image | image_url: width: 800 }}) and pair with image_tag to emit a responsive image.
  • Wix or Squarespace: both platforms generate responsive variants automatically; this issue is typically caused by uploading a deliberately oversized image.
  • Headless or framework sites: use the framework's image component (for example next/image or astro:assets), which generates responsive variants and lazy-loads off-screen images.

Common causes and how to resolve them

  • Original camera or stock-photo file uploaded as-is: a 6000-pixel-wide JPEG rendered in a 400-pixel column wastes most of the bytes. Resize the source or generate responsive variants.
  • No srcset: the browser has no choice but to use the single source. Add multiple variants so mobile users get smaller files.
  • Hero images sized for ultra-wide displays: if your largest layout is 1600 pixels, do not ship a 4000-pixel original.
  • Background images set in CSS without responsive sources: use the image-set() CSS function or media queries to swap in different image files at different breakpoints.

Best practices

  • Generate variants at common widths: 400, 800, 1200, and 1600 pixels covers most viewports cleanly.
  • Always set width and height: intrinsic dimensions let the browser reserve space and avoid layout shift, helping CLS.
  • Lazy-load off-screen images: add loading="lazy" to images below the fold so the browser only downloads them when needed.
  • Pair with modern formats: resizing alone is good; resizing and serving WebP or AVIF compounds the savings.
Compares the natural dimensions of each image to the size at which it is actually rendered in the user's viewport. Serving images significantly larger than needed wastes bandwidth, slows page load, and forces the browser to scale assets unnecessarily, all of which hurt performance and user experience.
Image Aspect Ratio Test
75% of top 100 sites passed
Not all image display dimensions match the natural aspect ratio! Fix aspect ratio issues to avoid distorted images on this website!

Image Aspect Ratio Test

How to pass this test?

This test fails when one or more images are rendered at an aspect ratio meaningfully different from the source file's native ratio, producing stretched or squashed visuals. Fixing this issue means either using width and height attributes that match the file's real dimensions or replacing the source with a correctly proportioned crop.

Example

<!-- Source file is 1600 x 900 (16:9). Set matching attributes: -->
<img src="/images/marathon-1600.jpg"
     alt="Marathon runners at sunrise"
     width="1600" height="900"
     style="max-width: 100%; height: auto;">

Where to make the change

  • Raw HTML and CSS: set the width and height attributes to the source file's native dimensions. Use CSS height: auto when scaling responsively so the browser preserves the ratio.
  • WordPress: when inserting an image via the block editor, choose the image's intended size rather than overriding dimensions in custom CSS.
  • Shopify, Wix, or Squarespace: use the platform's built-in image cropper so the displayed crop matches the source file you upload.
  • Headless or framework sites: components like next/image require both width and height, which prevents distortion when the layout scales.

Common causes and how to resolve them

  • Hard-coded width and height that do not match the file: recompute them from the source dimensions or remove them and rely on the file's intrinsic ratio.
  • Container has a fixed height that crops the image: use CSS object-fit: cover if cropping is intentional, or change the container so the image keeps its natural ratio.
  • Wrong source file uploaded: swap in a correctly proportioned crop rather than stretching the wrong file in CSS.

Best practices

  • Always set both width and height: the browser uses these to reserve space and avoid layout shift before the image loads, which helps CLS.
  • Use object-fit when cropping is intentional: cover fills the container without distortion; contain letterboxes to preserve the full image.
  • Standardize on a few aspect ratios: picking one or two ratios per template makes it easier to crop assets consistently and avoid one-off distortions.
Compares each image's natural aspect ratio against the ratio at which it is displayed on the page. Significant mismatches result in stretched or squashed visuals that look unprofessional and degrade the user experience.
Deprecated HTML Tags Test
94% of top 100 sites passed
This webpage does not use HTML deprecated tags.
Scans the markup for HTML elements that are no longer part of the modern HTML specification. Deprecated tags may still render today, but browsers can drop support at any time, leading to broken layouts and rendering inconsistencies. Replacing them with current standards keeps the page resilient and easier to maintain.
Google Analytics Test
72% of top 100 sites passed
This webpage is using Google Analytics.
Detects whether the page is instrumented with Google Analytics tracking code. Analytics is not an SEO ranking factor, but having reliable traffic and behavior data is essential for measuring the impact of SEO work and identifying opportunities for improvement.
Favicon Test
100% of top 100 sites passed
This website either doesn't have a favicon or this has not been referenced correctly!

Favicon Test

How to pass this test?

A favicon is the small icon associated with the site, shown in browser tabs, bookmarks, history listings, and increasingly in search engine results. Fixing this issue means publishing a favicon at the conventional location and declaring it in the page <head> so browsers and search engines can find and display it.

Example

<head>
  <link rel="icon" href="/favicon.ico" sizes="any">
  <link rel="icon" href="/favicon.svg" type="image/svg+xml">
  <link rel="apple-touch-icon" href="/apple-touch-icon.png">
</head>

Where to make the change

  • Raw HTML: upload favicon.ico to the site root and add the <link rel="icon"> tags in the <head>.
  • WordPress: upload the icon under Appearance, Customize, Site Identity, Site Icon. WordPress will emit the correct link tags.
  • Shopify: upload the icon under Online Store, Themes, Customize, Theme settings, Favicon.
  • Wix or Squarespace: both expose a favicon upload field in the site or design settings.
  • Headless or framework sites: place the favicon files in the public or static directory so they ship at the root paths.

Common causes and how to resolve them

  • No favicon at the root: add at least /favicon.ico. Most browsers fall back to fetching this path even when no link tag is present.
  • Wrong MIME type: if the favicon is served as text/html instead of image/x-icon or image/svg+xml, browsers will not render it. Check the response in the network tab.
  • Cached old icon after replacement: browsers cache favicons aggressively. Append a query string (?v=2) to bust the cache.
  • Missing high-resolution variants: modern devices need 180 x 180 (Apple), 192 x 192 (Android), and 512 x 512 (PWA) sizes for crisp rendering.

Best practices

  • Provide an SVG version: SVG favicons scale crisply at any size and support light or dark scheme variants.
  • Include an Apple touch icon: a 180 x 180 PNG named apple-touch-icon.png at the root makes the site look correct when added to an iOS home screen.
  • Use a consistent visual identity: the favicon should match the brand mark so users recognize the site at a glance in tabs and bookmarks.
  • Test in both light and dark mode: some browsers render the tab background differently. Make sure the icon stays legible in both.
Verifies whether the site declares a favicon and that it loads correctly. Favicons appear in browser tabs, bookmarks, and increasingly in search engine result pages, where they reinforce brand recognition and make a listing easier to spot at a glance.
JS Error Test
83% of top 100 sites passed
There are no severe JavaScript errors on this webpage.
Inspects the page for JavaScript runtime errors that occur as it loads. Unhandled errors can break interactive features, leave content unrendered, and signal poor code quality, all of which hurt the user experience that search engines factor into rankings.
Console Errors Test
27% of top 100 sites passed
This webpage doesn't have any warnings or errors caught by the Chrome DevTools Console.
Reviews the browser console for warnings and errors emitted while the page loads. Console messages often expose underlying issues such as failed network requests, deprecated APIs, or security warnings that can quietly degrade the experience even when the page appears to work.
Charset Declaration Test
96% of top 100 sites passed
This webpage has a character encoding declaration.
Content-Type: text/html; charset=UTF-8
Checks whether the page declares a character encoding such as UTF-8. Without an explicit charset declaration, browsers must guess the encoding, which can lead to garbled symbols, broken accented characters, and inconsistent rendering across devices. UTF-8 is the modern standard recommended by Google.

Speed optimizations

Score:63
Failed:6
Warnings:2
Passed:12
HTML Page Size Test
23% of top 100 sites passed
The size of this webpage's HTML is 29.93 Kb and is under the average webpage's HTML size of 33 Kb. Faster loading websites result in a better user experience, higher conversion rates, and generally better search engine rankings.
Measures the size of the raw HTML document, excluding images and external CSS or JavaScript. Bloated HTML increases time to first byte and parsing time, slowing down rendering on mobile networks and lower-powered devices. Trimming inline styles, redundant markup, and oversized inline data keeps initial load fast.
DOM Size Test
56% of top 100 sites passed
The Document Object Model (DOM) of this webpage has 433 nodes which is less than the recommended value of 1,500 nodes.
Measures the size and depth of the page's Document Object Model, the tree of nodes the browser builds from the HTML. Very large DOMs increase memory usage, lengthen style and layout calculations, and slow down rendering, particularly on mobile devices. Keeping the DOM lean improves both load time and runtime responsiveness.
HTML Compression/GZIP Test
99% of top 100 sites passed
This webpage doesn't use HTML compression! We recommend to compress the HTML code in order to reduce the page size and page loading times - this will help a website to retain visitors and increase page views. If the HTML compression will be enabled, the HTML size will be decreased by 74% - from 29.93 Kb to 7.65 Kb .

HTML Compression/GZIP Test

How to pass this test?

This test fails when the server delivers HTML uncompressed. Compressing responses with Gzip or Brotli typically shrinks the transfer size by sixty to eighty percent with negligible decompression cost, which translates directly into faster page loads, especially on slower connections. Fixing this issue is usually a server or CDN configuration change rather than a code change.

Where to make the change

  • Server configuration: enable compression in your web server. For Nginx use gzip on; (and the brotli module); for Apache use mod_deflate or mod_brotli; for IIS enable Dynamic Compression.
  • Cloud platforms: most modern hosts (Cloudflare, Netlify, Vercel, AWS CloudFront, Fastly) compress text responses automatically. Confirm it is enabled in the dashboard.
  • Application server: Node, Python, and Ruby app servers can compress responses themselves (for example compression middleware in Express). Compressing at the edge or web server is preferable to keep app servers focused on rendering.

Common causes and how to resolve them

  • Compression not enabled: turn it on at the server or CDN level. Verify with a tool such as DevTools Network panel by checking for the content-encoding response header.
  • Compression bypassed for HTML MIME type: some configurations compress only specific MIME types. Confirm text/html is included in the allowed list.
  • CDN caching the uncompressed response: purge the cache after enabling compression so cached entries get regenerated.
  • Server sets Content-Encoding: identity: this disables compression. Remove or update the directive.

Best practices

  • Prefer Brotli over Gzip: Brotli compresses HTML, CSS, and JavaScript ten to twenty percent better than Gzip with comparable decode speed.
  • Enable for all text content: apply compression to HTML, CSS, JavaScript, JSON, SVG, and XML responses. Skip it for already-compressed assets such as images and video.
  • Verify in production: the response header content-encoding: br or content-encoding: gzip confirms compression is live.
Verifies whether the server delivers the HTML using a compression algorithm such as Gzip or Brotli. Compressed responses dramatically reduce transfer size with negligible decompression cost, translating directly into faster page loads, especially on slower connections.
Site Loading Speed Test
71% of top 100 sites passed
The loading time of this webpage (measured from N. Virginia, US) is around 2.19 seconds and this is under the average loading speed which is 5 seconds.
Related Keywords

Accurate historical loading speed monitor and reports

Get detailed and accurate loading speed reports for your websites and see how your pages are being loaded over time.

Measures the overall time required to load the page in the browser. Page speed is a confirmed Google ranking factor and a strong driver of bounce rate, with slower pages losing a meaningful share of users before they even see the content. Faster pages also tend to convert better, making this a key metric for both SEO and revenue.
JS Execution Time Test
53% of top 100 sites passed
The JavaScript code used by this webpage is executed in less than 2 seconds.
Reports the total time the browser spends parsing, compiling, and executing JavaScript while the page loads. Heavy JavaScript work blocks the main thread and is the primary cause of poor Interaction to Next Paint, the Core Web Vital that replaced First Input Delay in 2024 and that Google uses as part of its ranking algorithms. Reducing bundle size and deferring non-critical scripts directly improves perceived performance.
Page Objects Test
7% of top 100 sites passed
This webpage has less than 20 http requests. A higher number of http requests results in a user's browser needing to request a large number of objects from the server, which will ultimately slow down the loading of your webpage.
Content size by content type
Content type
Percent
Size
image
87.6 %
1.65 Mb
javascript
8.0 %
154.51 Kb
font
1.6 %
31.30 Kb
html
1.5 %
29.71 Kb
css
1.2 %
23.34 Kb
other
0.0 %
0 B
TOTAL
100%
1.89 Mb
Requests by content type
Content type
Percent
Requests
image
55.0 %
11
font
20.0 %
4
css
10.0 %
2
javascript
10.0 %
2
html
5.0 %
1
other
0.0 %
0
TOTAL
100%
20
Content size by domain
Domain
Percent
Size
so-kleen.com.ng
90.6 %
1.71 Mb
googletagmanager.com
7.7 %
149.30 Kb
fonts.gstatic.com
1.6 %
31.30 Kb
fonts.googleapis.com
0.1 %
1.02 Kb
TOTAL
100%
1.89 Mb
Requests by domain
Domain
Percent
Requests
so-kleen.com.ng
70.0 %
14
fonts.gstatic.com
20.0 %
4
fonts.googleapis.com
5.0 %
1
googletagmanager.com
5.0 %
1
TOTAL
100%
20
Verifies that every resource the page requests, including images, scripts, stylesheets, and fonts, can be successfully retrieved. Broken or unreachable assets can leave the page rendered incorrectly, trigger console errors, and damage both user experience and how search engines perceive page quality.
CDN Usage Test
95% of top 100 sites passed
This webpage is not serving all resources (images, javascript and css) from CDNs!

CDN Usage Test

How to pass this test?

A Content Delivery Network serves static assets from edge locations close to the user, reducing latency, improving cache hit rates, and offloading traffic from the origin server. Fixing this issue means routing your images, JavaScript, CSS, and fonts through a CDN so visitors anywhere in the world get fast, consistent delivery.

Where to make the change

  • Cloud platforms: Cloudflare, Fastly, AWS CloudFront, Bunny.net, and similar providers offer free or low-cost CDN tiers. Sign up, point your domain through the CDN, and enable caching for static asset paths.
  • WordPress: use a CDN integration plugin or sign up directly with Cloudflare and update the site's nameservers.
  • Shopify: Shopify serves storefront assets through its own CDN automatically; the failure usually points at custom assets uploaded outside the platform.
  • Headless or framework sites: deploying to Vercel, Netlify, or Cloudflare Pages puts the entire site behind a global CDN by default.

Common causes and how to resolve them

  • No CDN at all: add one. Even a free Cloudflare account in front of an existing host produces measurable speed gains.
  • CDN configured but bypassed for some assets: ensure all img, script, link, and font URLs use the CDN hostname rather than the origin.
  • Cache headers prevent caching: long-lived assets need cache-control headers like public, max-age=31536000, immutable. Without them, the CDN cannot cache effectively.
  • Origin-only third-party scripts: many vendors already serve their scripts via their own CDN. Use the URL the vendor provides rather than self-hosting.

Best practices

  • Use a versioned asset path: filenames like app.a3f9.css let you set far-future cache headers without ever serving stale files. Update the filename when content changes.
  • Enable Brotli at the edge: most CDNs can compress responses on the fly, including text formats.
  • Pre-warm caches for new launches: after a major release, request key URLs through every region (or use the CDN's purge-and-prefetch tools) so users do not hit cold caches.
Detects whether static assets such as images, JavaScript, and CSS are delivered through a Content Delivery Network. CDNs serve files from edge locations close to the user, reducing latency, improving cache hit rates, and offloading traffic from the origin server. The result is faster, more consistent page performance worldwide.
Modern Image Format Test
43% of top 100 sites passed
This webpage is not serving images in a modern format! Image formats like JPEG 2000, JPEG XR, and WebP often provide better compression than PNG or JPEG, which means faster downloads and less data consumption.

Modern Image Format Test

How to pass this test?

This test fails when images are served in legacy formats such as JPEG and PNG instead of modern alternatives like WebP or AVIF. Modern formats compress significantly better at equivalent visual quality, which means smaller transfers, faster page loads, and lower data usage for visitors on metered connections. Fixing this issue means generating modern variants and serving them to browsers that support them.

Example

<picture>
  <source srcset="/images/hero.avif" type="image/avif">
  <source srcset="/images/hero.webp" type="image/webp">
  <img src="/images/hero.jpg" alt="Marathon runners at sunrise" width="1600" height="900">
</picture>

Where to make the change

  • Raw HTML: use the <picture> element with multiple <source> entries so the browser picks the best supported format.
  • WordPress: WordPress 6.x and later supports WebP natively. Use a media optimization plugin to convert existing JPEGs and PNGs and serve modern formats automatically.
  • Shopify: Shopify's image CDN can serve WebP automatically; using the image_url filter with format parameter or the image_tag helper handles negotiation.
  • Wix or Squarespace: both platforms convert and serve WebP automatically when supported by the visitor's browser.
  • Headless or framework sites: components like next/image and astro:assets generate AVIF and WebP variants at build time and serve the best format per request.

Common causes and how to resolve them

  • Only legacy formats published: add a build step or image CDN that generates WebP and AVIF alongside the original.
  • Single-format <img> tag: wrap the image in <picture> with <source> entries for AVIF and WebP, falling back to the JPEG.
  • Image CDN not negotiating format: enable automatic format conversion or pass a format=auto query parameter (depends on provider).
  • SVG used where a raster image would be smaller (or vice versa): illustrations and icons should be SVG; photos should be raster in a modern format. Mixing them up wastes bytes.

Best practices

  • AVIF first, WebP fallback, JPEG last: AVIF compresses best, WebP is widely supported, JPEG remains the universal fallback.
  • Match quality to use case: hero images can use higher quality settings; thumbnails can drop quality without visible loss.
  • Use an image CDN: services like Cloudflare Images, Cloudinary, or Imgix handle resizing, format conversion, and caching in one step.
Identifies images served in legacy formats such as JPEG and PNG instead of modern alternatives like WebP or AVIF. Modern formats compress significantly better at equivalent visual quality, which means smaller transfers, faster page loads, and lower data usage for visitors on metered connections.
Image Metadata Test
72% of top 100 sites passed
This webpage is not using images with large metadata.
Flags images carrying disproportionately large embedded metadata such as EXIF data, thumbnails, color profiles, geolocation, and camera information. This metadata is rarely useful on the web and adds bytes to every request without any rendering benefit, making it an easy win for shrinking image payloads.
Image Caching Test
95% of top 100 sites passed
This website is not using cache headers for images. Setting cache headers can help speed up the serving of a webpage for returning users. Learn more about how to add expires headers to your images.

Image Caching Test

How to pass this test?

This test fails when image responses lack caching headers that allow browsers to store them for repeat visits. With proper caching directives, returning visitors retrieve images from the local cache instead of refetching them, producing noticeably faster subsequent page loads. Fixing this issue is a server or CDN configuration change.

Where to make the change

  • Server configuration: add Cache-Control headers to image responses. A common setting is Cache-Control: public, max-age=31536000, immutable for versioned assets.
  • CDN configuration: Cloudflare, Fastly, CloudFront, and similar offer rules to set long cache lifetimes for image MIME types.
  • WordPress and plugins: a caching plugin or a CDN integration handles cache headers without server changes.
  • Shopify: Shopify serves images with appropriate cache headers automatically; failures usually point to externally hosted images.

Common causes and how to resolve them

  • No Cache-Control or Expires header: add one. Browsers will revalidate every request without it.
  • Cache-Control: no-cache or no-store: these are correct for HTML responses but wrong for static images. Set a long max-age instead.
  • Short max-age (under a day): images change rarely; a max-age of months or a year is typical.
  • Cookie-bearing image requests: if the image URL sets cookies or varies by user, browsers cannot cache effectively. Serve images from a cookie-free subdomain or your CDN.

Best practices

  • Use versioned filenames: renaming the file when the content changes lets you set near-permanent cache lifetimes without ever serving stale files.
  • Mark immutable assets as such: the immutable directive tells browsers to skip even revalidation requests.
  • Serve from a CDN: CDNs add caching, compression, and edge delivery in one step.
Inspects whether image responses include caching headers that allow browsers to store them for repeat visits. With proper caching directives, returning visitors retrieve images from the local cache instead of refetching them, producing noticeably faster subsequent page loads.
JavaScript Caching Test
96% of top 100 sites passed
This webpage is not using cache headers for JavaScript resources! Setting cache headers can help to speed up the webpage for returning users.

JavaScript Caching Test

How to pass this test?

This test fails when external JavaScript files are served without caching headers that allow browsers to store and reuse them. Cached scripts skip the network on repeat visits, reducing load time and bandwidth for returning users. Fixing this issue is a server or CDN configuration change.

Where to make the change

  • Server configuration: add Cache-Control: public, max-age=31536000, immutable to JavaScript responses, paired with versioned filenames.
  • CDN configuration: set a default cache rule for *.js assets at the edge.
  • Build pipeline: emit hashed filenames (for example app.7f3c1e.js) so cache lifetimes can be long without risking stale code.
  • WordPress and plugins: caching and CDN plugins handle JS cache headers automatically.

Common causes and how to resolve them

  • No Cache-Control header: add one. Without it, browsers revalidate on every page load.
  • Short max-age: bump to a year for versioned files. Use a shorter lifetime only for unversioned scripts that may change in place.
  • no-cache or no-store on static JS: remove these directives; they belong on dynamic responses, not static assets.
  • Cookies on script requests: serve scripts from a cookie-free subdomain or a CDN to enable shared caching.

Best practices

  • Versioned filenames: hashed file names plus immutable caching is the gold standard for cache effectiveness.
  • Self-host critical scripts: hosting third-party scripts yourself lets you control cache headers and avoid vendor outages.
  • Audit with DevTools: the Network panel's "Disk cache" column shows whether each script is genuinely served from cache on repeat visits.
Inspects whether external JavaScript files are served with caching headers that allow browsers to store and reuse them. Cached scripts skip the network on repeat visits, reducing load time and bandwidth for returning users without sacrificing the ability to push fresh code by versioning file URLs.
CSS Caching Test
98% of top 100 sites passed
This webpage is not using cache headers for CSS resources! Setting cache headers can help to speed up the webpage for returning users.

CSS Caching Test

How to pass this test?

This test fails when external CSS files are served without caching headers that allow browsers to store and reuse them. Cached stylesheets skip the network on repeat visits, reducing load time for returning users while still allowing updates through versioned filenames. Fixing this issue is a server or CDN configuration change.

Where to make the change

  • Server configuration: add Cache-Control: public, max-age=31536000, immutable to CSS responses, paired with versioned filenames.
  • CDN configuration: set a default cache rule for *.css assets at the edge.
  • Build pipeline: emit hashed filenames so cache lifetimes can be long without risking stale styles.
  • WordPress and plugins: caching plugins handle CSS cache headers automatically.

Common causes and how to resolve them

  • No Cache-Control header: add one. Without it, browsers revalidate on every page load.
  • Short max-age: bump to a year for versioned files; keep it shorter only for unversioned files that may change in place.
  • Stylesheets behind authentication: private styles cannot use public caching. Move shared styles to a public path.

Best practices

  • Versioned filenames: hashed names plus immutable caching is the gold standard.
  • Inline critical CSS: the styles needed for above-the-fold rendering can be inlined while the rest is cached and loaded asynchronously.
  • Audit with DevTools: confirm that on repeat visits, the stylesheet is served from disk cache rather than the network.
Inspects whether external CSS files are served with caching headers that allow browsers to store and reuse them. Cached stylesheets skip the network on repeat visits, reducing load time for returning users while still allowing updates through versioned filenames.
JavaScript Minification Test
98% of top 100 sites passed
All JavaScript files used by this webpage are minified.
Detects whether external JavaScript files are minified by stripping whitespace, comments, and shortening identifiers. Minified scripts are substantially smaller and faster to download and parse, which lowers page load time and improves Core Web Vitals scores.
CSS Minification Test
100% of top 100 sites passed
All CSS resources used by this webpage are minified.
Detects whether external CSS files are minified by removing whitespace, comments, and unused characters. Minification reduces stylesheet size with no functional change, leading to faster downloads and quicker first render.
Render Blocking Resources Test
15% of top 100 sites passed
This webpage is using render blocking resources! Eliminating render-blocking resources can help this webpage to load significantly faster and will improve the website experience for your visitors.

Render Blocking Resources Test

How to pass this test?

This test fails when JavaScript or CSS resources block the browser from rendering visible content. Each render-blocking file delays the first paint, and on slower networks the cumulative impact can be severe. Fixing this issue means inlining the truly critical CSS, deferring or asynchronously loading non-essential scripts, and removing unused code.

Example

<head>
  <!-- Inline only above-the-fold critical CSS -->
  <style>/* critical styles here */</style>

  <!-- Load full stylesheet asynchronously -->
  <link rel="preload" href="/styles/main.css" as="style"
        onload="this.onload=null;this.rel='stylesheet'">

  <!-- Defer non-critical scripts -->
  <script src="/scripts/app.js" defer></script>
</head>

Where to make the change

  • Application code or templates: identify the CSS and JavaScript needed for the initial render and load only those synchronously. Defer the rest.
  • Build pipeline: use a critical CSS extractor (such as critical or penthouse) to generate the above-the-fold styles automatically.
  • WordPress: performance plugins offer "delay JS execution" and "load CSS asynchronously" options that handle most of this without code changes.
  • Headless or framework sites: use the framework's preload and code-splitting hints to control what blocks rendering.

Common causes and how to resolve them

  • Single large stylesheet blocking render: inline critical CSS for the first viewport, load the full stylesheet asynchronously.
  • Synchronous third-party scripts in the head: add defer or async, or move them to the end of the body.
  • Web fonts blocking text rendering: add font-display: swap in @font-face rules so the fallback font shows immediately.
  • Render-blocking @import in CSS: replace with separate <link rel="stylesheet"> tags so the browser can fetch them in parallel.

Best practices

  • Use defer for scripts that need the DOM: they execute after parsing but before DOMContentLoaded.
  • Use async for fully independent scripts: they execute as soon as they download, in any order.
  • Preload the critical request chain: tell the browser early about fonts and key assets with <link rel="preload">.
  • Audit with Lighthouse: the Render-blocking resources audit lists every offending file with the estimated time saved by deferring it.
Identifies JavaScript and CSS resources that the browser must download and process before it can render visible content. Each render-blocking file delays the first paint, and on slower networks the cumulative impact can be severe. Inlining critical styles, deferring non-essential scripts, and removing unused code all help unblock the rendering path.
URL Redirects Test
97% of top 100 sites passed
This URL doesn't have any redirects (which could potentially cause site indexation issues and site loading delays).
Counts the number of HTTP redirects required for the URL to resolve to its final destination. Each hop adds latency and can dilute link equity, while long redirect chains sometimes confuse crawlers and indexing pipelines. Keeping redirects short and direct is a Google recommendation for both performance and SEO.
Time To First Byte Test
99% of top 100 sites passed
The Time To First Byte value of this webpage is 0.687 seconds. To provide a good user experience, Google recommends that sites should strive to have a TTFB of 0.8 seconds or less.
0.687 s
0.8 s
1.8 s
Measures Time to First Byte, the delay between the browser requesting the page and the first byte of the response arriving. TTFB reflects backend, network, and CDN performance and effectively sets the floor for every other loading metric, since rendering cannot begin until bytes start flowing. Sustained high TTFB usually points to slow server processing, missing edge caching, or inefficient redirects.
First Contentful Paint Test
90% of top 100 sites passed
The First Contentful Paint value of this webpage is 2.268 seconds. To provide a good user experience, Google recommends that sites should strive to have a First Contentful Paint value of 1.8 seconds or less.
2.268 s
1.8 s
3 s

First Contentful Paint Test

How to pass this test?

First Contentful Paint (FCP) measures the time from when the page starts loading to when any part of its content is rendered on the screen. FCP is the user's first visual confirmation that the page is loading, and faster values are strongly correlated with lower bounce rates and better Core Web Vitals scores. Fixing this issue means reducing time to first byte, eliminating render-blocking resources, and serving above-the-fold content without delay.

Where to make the change

  • Server and CDN: reduce TTFB so the browser receives bytes sooner. Edge caching for HTML produces dramatic FCP wins.
  • Application code or templates: inline the critical CSS for above-the-fold content and defer everything not needed for the first paint.
  • Build pipeline: ensure JavaScript bundles are split so the initial load only includes what is needed for first render.

Common causes and how to resolve them

  • Slow TTFB: address the underlying server, redirect, or hosting issue (see Time to First Byte fix).
  • Render-blocking CSS: inline the critical CSS for the first viewport, load the full stylesheet asynchronously.
  • Render-blocking JavaScript in the head: add defer or move scripts to the end of the body.
  • Web fonts delaying text rendering: add font-display: swap so a fallback font is shown immediately while the custom font loads.
  • Heavy hero image without prioritization: add fetchpriority="high" to the hero image and <link rel="preload"> for it in the head.

Best practices

  • Target sub-1.8 second FCP at the 75th percentile: Google's recommended threshold for a "good" experience.
  • Inline critical CSS: the styles needed for the first viewport should not require an extra network round trip.
  • Preload key resources: hero image, key fonts, and critical scripts benefit from explicit preload hints.
  • Defer non-critical work: analytics, chat widgets, and below-the-fold content can wait until after first paint.
Measures First Contentful Paint, the moment when the browser renders the first piece of visible content from the DOM, such as text, an image, or an SVG. FCP is the first signal to the user that the page is actually loading, and faster values are strongly correlated with lower bounce rates and better Core Web Vitals scores.
Largest Contentful Paint Test
77% of top 100 sites passed
The Largest Contentful Paint duration of this webpage is 2.27 seconds. To provide a good user experience, Google recommends that sites should strive to have Largest Contentful Paint of 2.5 seconds or less.
2.27 s
2.5 s
4 s
Largest Contentful Paint element within the viewport:
Text: PROFESSIONAL CLEANING FOR BUSINESSES AND HOMES
Html: <div class="legacy-slide-caption">
Measures Largest Contentful Paint, the time at which the largest visible element in the viewport, such as a hero image or main heading, finishes rendering. LCP is one of Google's Core Web Vitals and a direct ranking factor, used as a proxy for when the user perceives the page as effectively loaded.
Cumulative Layout Shift Test
91% of top 100 sites passed
The CLS score of this webpage is 0.0000. To provide a good user experience, Google recommends that sites should strive to have a CLS score of 0.1 or less.
0
0.1
0.25
DOM element which contributes the most to CLS score:
Text: HOME ABOUT SERVICES WHY US GALLERY BLOG CONTACT
Html: <nav class="desktop-nav" aria-label="Primary navigation">
Score: 0.0000
Measures Cumulative Layout Shift, the total amount that visible elements move around unexpectedly while the page loads. Layout shifts cause users to misclick and feel the page is unstable, and CLS is one of Google's Core Web Vitals and a direct ranking factor. Common causes include images without explicit dimensions, late-loading fonts, and aggressively injected overlays such as cookie consent banners.

Server and security

Score:84
Failed:3
Warnings:0
Passed:4
URL Canonicalization Test
93% of top 100 sites passed
Detects whether different URL variants of the site, such as the apex domain and the www subdomain or HTTP and HTTPS, all resolve consistently to a single canonical version. When the same content is reachable at multiple URLs without proper redirects, search engines may split ranking signals across the variants and become unsure which one to index.
SSL Checker and HTTPS Test
100% of top 100 sites passed
This website is successfully using HTTPS, a secure communication protocol over the Internet.
The certificate is not used before the activation date.
The certificate has not expired.
The hostname "www.so-kleen.com.ng" is correctly listed in the certificate.
The certificate should be trusted by all major web browsers.
The certificate was not revoked.
The certificate was signed with a secure hash.
Certificate Chain:
Server certificate
Common Name
*.duffieldsedm.com
Subject Alternative Names
*.bytex.com.ng, *.com.bytex.com.ng, *.duffieldsedm.com, *.jugularng.com, *.lumodoshi.com, *.so-kleen.com.ng, *.thescoliosisclinics.com, bytex.com.ng, duffieldsedm.com, jugularng.com, lumodoshi.com, so-kleen.com.ng, so-kleen.com.ng.bytex.com.ng, thescoliosisclinics.com, www.ilabrandagency.com.bytex.com.ng, www.jugularng.com.bytex.com.ng, www.lumodoshi.com.bytex.com.ng, www.so-kleen.com.ng.bytex.com.ng, www.thescoliosisclinics.com.bytex.com.ng
Not Valid Before
Sun, May 24, 2026 at 1:35:02 PM UTC
Not Valid After
Sat, August 22, 2026 at 1:35:01 PM UTC
Signature Algorithm
sha256WithRsaEncryption
Issuer
R13
Intermediate certificate
Common Name
R13
Organization
Let's Encrypt
Location
US
Not Valid Before
Wed, March 13, 2024 at 12:00:00 AM UTC
Not Valid After
Fri, March 12, 2027 at 11:59:59 PM UTC
Signature Algorithm
sha256WithRsaEncryption
Issuer
ISRG Root X1
Root certificate
Common Name
ISRG Root X1
Organization
Internet Security Research Group
Location
US
Not Valid Before
Thu, June 4, 2015 at 11:04:38 AM UTC
Not Valid After
Mon, June 4, 2035 at 11:04:38 AM UTC
Signature Algorithm
sha256WithRsaEncryption
Issuer
ISRG Root X1
Verifies whether the site is served over HTTPS with a valid TLS certificate. HTTPS encrypts the connection between visitor and server, protecting credentials and other sensitive data in transit, and Google has used it as a positive ranking signal since 2014. Modern browsers also flag non-HTTPS pages as Not Secure, which damages user trust.
Mixed Content Test (HTTP over HTTPS)
100% of top 100 sites passed
This webpage does not use mixed content - both the initial HTML and all other resources are loaded over HTTPS.
Detects whether a page served over HTTPS is loading any sub-resources such as images, scripts, or stylesheets over insecure HTTP. Mixed content weakens the security guarantees of HTTPS, and modern browsers either block the resources outright or warn the user, often breaking the page in the process.
HTTP2 Test
99% of top 100 sites passed
This webpage is not using the HTTP/2 protocol!
Verifies whether the page and its resources are delivered over HTTP/2 or newer, rather than the legacy HTTP/1.1 protocol. HTTP/2 introduces multiplexing, header compression, and prioritization, which together reduce latency and allow the browser to load many resources from the same origin far more efficiently.
HSTS Test
84% of top 100 sites passed
This webpage is not using the Strict-Transport-Security header! This is a security header that was created as a way to force the browser to use secure connections when a site is running over HTTPS.

HSTS Test

How to pass this test?

The Strict-Transport-Security (HSTS) response header tells browsers to access the site only over HTTPS, automatically upgrading future requests and refusing to fall back to HTTP. Fixing this issue means configuring the server to send the header on every HTTPS response.

Example

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Where to make the change

  • Server configuration: add the header in Nginx (add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;), Apache (Header always set Strict-Transport-Security ...), or your application's response middleware.
  • CDN: Cloudflare, Fastly, and CloudFront let you set HSTS at the edge so it applies regardless of origin configuration.
  • Cloud platforms: Netlify and Vercel allow HSTS via headers files (_headers on Netlify, vercel.json on Vercel).

Common causes and how to resolve them

  • Header not sent: add it in the server or CDN config. Confirm in DevTools, Network tab.
  • Header sent only on HTTP responses: HSTS is only honored over HTTPS, so the header must accompany the HTTPS response.
  • Short max-age: a max-age below a few months provides little protection. Bump to a year (31536000) once you are confident HTTPS is stable.
  • includeSubDomains breaking subdomains that lack HTTPS: only add this directive after every subdomain serves HTTPS. Otherwise users will lose access to the HTTP-only ones.

Best practices

  • Start with a short max-age, then ramp up: a one-week max-age lets you back out quickly if something breaks. Increase to a year once stable.
  • Add preload after testing: submit your domain to hstspreload.org so browsers ship with HSTS for your site baked in. Note that removing a preloaded site is slow.
  • Pair with HTTP-to-HTTPS redirects: HSTS only kicks in after a successful HTTPS visit. Until then, redirects do the work.
Checks whether the server sends a Strict-Transport-Security header instructing browsers to only access the site over HTTPS. HSTS protects users from protocol downgrade attacks and accidental exposure to insecure connections, and is a baseline requirement for any site handling sensitive data.
Plaintext Emails Test
97% of top 100 sites passed
We've found 1 email addresses in your page code! We advise you to protect email links in a way that hides them from the spam harvesters.

Plaintext Emails Test

How to pass this test?

This test fails when the page exposes one or more email addresses in plain text. Spam-harvesting bots scrape pages for plaintext addresses and add them to bulk mailing lists. Fixing this issue means obfuscating contact addresses, using a contact form, or rendering them via JavaScript so simple scrapers cannot read them.

Where to make the change

  • Application code or templates: replace plain contact@example.com text with one of the obfuscation techniques below.
  • WordPress: a contact form plugin handles email submissions without exposing the address. Some SEO and security plugins also offer email obfuscation.
  • Shopify, Wix, Squarespace: use the platform's built-in contact form blocks rather than displaying the email address directly.

Common causes and how to resolve them

  • Plain text address in a paragraph or footer: replace with a contact form, an obfuscated rendering (HTML entities, CSS reversal), or a JavaScript-built mailto link.
  • Mailto link with the address visible: the visible text is what bots read. Make the visible text a label like "Email us" while the href still works.
  • Address baked into images is fine for SEO but bad for accessibility: screen readers cannot read it. Pair an image with a contact form instead.

Best practices

  • Prefer contact forms: they reduce spam and make analytics easier.
  • Use HTML entity encoding: writing &#99;&#111;... for the address defeats the simplest scrapers, though sophisticated ones decode it.
  • Render via JavaScript: building the mailto link client-side blocks scrapers that only read static HTML.
  • Consider a Cloudflare-style email obfuscation: some CDNs automatically rewrite plaintext emails to obfuscated equivalents.
Scans the page for email addresses written in plain text. Spambots harvest such addresses to add them to bulk mailing lists, so obfuscating contact emails or replacing them with contact forms helps reduce inbox spam without hiding the address from legitimate visitors.

Mobile usability

Score:100
Failed:0
Warnings:0
Passed:3
Meta Viewport Test
92% of top 100 sites passed
This webpage is using a viewport meta tag.
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
Checks whether the page declares a viewport meta tag that controls how the layout scales on mobile devices. Without it, mobile browsers render the page at a default desktop width and shrink it to fit, producing unreadable text and unusable touch targets. A correct viewport declaration is the foundation of responsive design.
Media Query Responsive Test
98% of top 100 sites passed
This webpage is using CSS media queries, which is the base for responsive design functionalities.
Detects whether the page's stylesheets use CSS media queries to adapt the layout to different screen sizes. Media queries are the primary mechanism for responsive design, allowing typography, spacing, and component arrangement to adjust gracefully from phones to large desktops. Because Google now indexes the web mobile-first, the responsive mobile layout is effectively the version search engines crawl, evaluate, and rank.
Mobile Snapshot Test
Mobile view
A rendered screenshot of how the page appears on a mobile device. Useful for visually confirming that responsive layouts work as intended and for spotting issues such as overflowing content, illegible text, or broken images that automated checks alone may miss.

Advanced SEO

Score:74
Failed:1
Warnings:1
Passed:7
Structured Data Test
66% of top 100 sites passed
This webpage doesn't take the advantages of HTML Microdata or JSON-LD specifications in order to use structured data! View Google's guide for getting started with structured data.

Structured Data Test

How to pass this test?

Structured data is a standardized way to label the entities and relationships on a page so search engines and AI answer engines can understand them. Adding the right schema helps unlock rich result features in SERPs (star ratings, FAQs, product cards, recipes, events) and gives AI answer engines precise facts to extract when generating responses. Fixing this issue means picking the schema types that match your content and embedding them as JSON-LD inside the page <head>. See the Google Search Central structured data guide for the full type catalog.

Example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How to choose marathon running shoes",
  "author": { "@type": "Person", "name": "Jane Doe" },
  "datePublished": "2026-04-15",
  "image": "https://example.com/images/hero.jpg"
}
</script>

Where to make the change

  • Raw HTML: embed a JSON-LD block inside the <head>. JSON-LD is Google's preferred format because it does not interleave with visible content.
  • WordPress: a dedicated SEO plugin generates JSON-LD for articles, products, breadcrumbs, and FAQ blocks automatically. Customize the templates for non-standard content.
  • Shopify: Shopify themes emit Product schema by default. Extend with custom types via theme code edits.
  • Wix or Squarespace: built-in blocks for FAQ, recipe, and event content emit schema automatically.
  • Headless or framework sites: generate JSON-LD from your content data in the layout component so every page ships consistent schema.

Common causes and how to resolve them

  • No structured data at all: add at minimum the @type that matches the page (Article for blog posts, Product for product pages, Organization for the homepage).
  • Wrong schema type for the content: using Product schema on an article page misleads search engines. Pick the type that matches what the page actually is.
  • Required properties missing: each schema type has required fields. Validate with the Rich Results Test to surface missing properties.
  • Markup does not match visible content: Google penalizes structured data that asserts facts the page does not show. Reflect what is actually on the page.
  • Multiple conflicting blocks: a theme and an SEO plugin both emit schema for the same entity. Pick one source of truth.

Best practices

  • Validate before shipping: Google's Rich Results Test and Schema Markup Validator catch syntax errors and missing required fields.
  • Use JSON-LD: easier to maintain than Microdata or RDFa and Google's preferred format.
  • Cover the obvious wins: Article, Product, BreadcrumbList, Organization, and FAQPage are the highest-impact types for most sites.
  • Keep schema accurate: wrong or exaggerated schema can lead to Google removing rich result eligibility for the entire site.
Inspects the page for structured data markup such as JSON-LD or Microdata that follows schema.org vocabularies. Structured data helps search engines understand entities and relationships on the page, often unlocking rich result features in SERPs such as star ratings, FAQs, recipes, and product cards. It is also a primary signal AI answer engines use to extract precise facts when generating responses.
Custom 404 Error Page Test
80% of top 100 sites passed
This website is using a custom 404 error page. We recommend to have a custom 404 error page in order to improve the website's user experience by letting users know that only a specific page is missing/broken (and not the entire site), providing them helpful links, the opportunity to report bugs, and potentially track the source of broken links.
Detects whether the site serves a branded, helpful page when a requested URL is not found, instead of the browser's generic error screen. A custom 404 keeps users on the site by offering navigation, search, or suggested links, which reduces frustration and protects engagement metrics that influence both UX perception and indirect SEO outcomes.
Noindex Tag Test
99% of top 100 sites passed
This webpage does not use the noindex meta tag. This means that it can be indexed by search engines.
Detects whether the page is being excluded from search engine indexes via a noindex directive in the robots meta tag or X-Robots-Tag HTTP header. A noindex on the wrong page is one of the most common ways important content silently disappears from search results, so verifying its absence on pages meant to rank is critical.
Canonical Tag Test
93% of top 100 sites passed
This webpage is using the canonical link tag. This tag specifies that the URL: https://www.so-kleen.com.ng/ is preferred to be used in search results. Please ensure that this specification is correct, as canonical tags are often hard-coded and may not always reflect the latest changes in a site's URL structure.
<link href="https://www.so-kleen.com.ng/" rel="canonical"/>
Detects whether the page declares a canonical link tag indicating its preferred URL. Canonical tags consolidate ranking signals across duplicate or near-duplicate URLs onto a single authoritative version, which prevents search engines from splitting authority across variants caused by query parameters, session IDs, or alternate paths. They also help AI crawlers identify the source of truth when citing the page.
Nofollow Tag Test
This webpage does not use the nofollow meta tag. This means that search engines will crawl all links from this webpage.
Detects whether the page applies a nofollow directive, either through a robots meta tag, an X-Robots-Tag header, or per-link rel attributes, that tells search engines not to follow outbound links. Google recommends nofollow for sponsored links and for user-generated content where the linked sites are not vetted, so its presence or absence has real consequences for how link equity flows.
Disallow Directive Test
This website lacks a "robots.txt" file. This file can protect private content from appearing online, save bandwidth, and lower load on your server. A missing "robots.txt" file also generates additional errors in your apache log whenever robots request one.
Surfaces the disallow rules declared in the site's robots.txt file. Disallow directives tell search engine crawlers not to access specific files, paths, or directories, which is useful for keeping admin sections and duplicate content out of indexes but dangerous when applied too broadly, since over-blocking can hide important pages from search.
Meta Refresh Test
98% of top 100 sites passed
This webpage is not using a meta refresh tag.
Detects whether the page uses a meta refresh tag to automatically reload or redirect after a delay. Meta refresh is largely obsolete, hurts accessibility by jumping focus and disorienting screen reader users, and is a weaker signal to search engines than a proper server-side 301 redirect. Its presence usually indicates outdated implementation worth updating.
SPF Records Test
94% of top 100 sites passed
This DNS server is using an SPF record.
v=spf1 +a +mx +ip4:131.153.148.82 include:spf.antispamcloud.com include:spf.host-ww.net ~all
Checks the domain's DNS for a Sender Policy Framework record. SPF lets receiving mail servers verify that messages claiming to come from the domain were actually sent by an authorized mail server, which significantly reduces the chance of legitimate email being marked as spam and protects the domain's sender reputation.
Ads.txt Validation Test
67% of top 100 sites passed
This website doesn't use an ads.txt file! Ads.txt is a text file that contains a list of Authorized Digital Sellers. The purpose of ads.txt files is to give advertisers and advertising networks the ability to verify who is allowed to sell advertising on your website.
Validates the format of the site's ads.txt file, which publishers use to declare which advertising vendors are authorized to sell their inventory programmatically. A correctly formatted ads.txt protects against domain spoofing in the ad supply chain and is required for inclusion in many premium advertising marketplaces.

Dominate search today on Google and AI Engines.

Join 85,000+ SaaS Marketers, Growth Agencies, Content-Led Companies and E-commerce Brands.

See Pricing
Dashboard preview showing SEO site checkup metrics, page group insights, and issue prioritization