Core Web Vitals, real Chrome visitors (October 2026)
LCP1.8 sgood
INP55 msgood
CLS0.00good
Platform
WWordPress
CDN
CCloudflare
DNS
CCloudflare
Status
200
Time to first byte (TTFB)
254 ms
Server
cloudflare
Backend language
PHP
Theme
kadence 1.5.2
HTTP protocol
HTTP/3
Site language
Hungarian
Frontend libraries
jQuery 3.7.1
Cookie banner (CMP)
LW Cookie
Security
Turn off old TLS versions
The server still accepts TLS 1.0 or 1.1, which modern browsers no longer support and which have known weaknesses. TLS 1.2 and 1.3 are enough; set this in the server or CDN configuration.
Cloudflare: SSL/TLS → Edge Certificates
Minimum TLS Version: TLS 1.2
Copying failed. Select the code and copy it by hand.
For other setups: nginx, Apache
nginx
In the nginx http block
ssl_protocols TLSv1.2 TLSv1.3;
If a server block or an included file (such as Certbot's /etc/letsencrypt/options-ssl-nginx.conf) also has an ssl_protocols line, change it there too, because the server-level value overrides the http block.
Copying failed. Select the code and copy it by hand.
Apache
In the Apache virtual host configuration (does not work in .htaccess)
SSLProtocol -all +TLSv1.2 +TLSv1.3
Copying failed. Select the code and copy it by hand.
Security
Set 4 response headers
These security headers are missing or have the wrong value. You set them together in one place.
Set static: Strict-Transport-Security = max-age=31536000
Set static: X-Content-Type-Options = nosniff
Set static: Referrer-Policy = strict-origin-when-cross-origin
Set static: Cross-Origin-Opener-Policy = same-origin-allow-popups
Copying failed. Select the code and copy it by hand.
For other setups: WordPress, nginx, Apache
WordPress
In a new file: wp-content/mu-plugins/hwp-report-headers.php (on Bedrock: web/app/mu-plugins/hwp-report-headers.php)
Copying failed. Select the code and copy it by hand.
Apache
In the .htaccess file of the web root
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Cross-Origin-Opener-Policy "same-origin-allow-popups"
</IfModule>
Copying failed. Select the code and copy it by hand.
Security
Set a Content-Security-Policy
There is no Content-Security-Policy, neither as a header nor in a meta tag. A CSP lists where the page may load scripts, styles and images from, and with a well-configured CSP injected code (XSS) does not run.
Set static: Content-Security-Policy = object-src 'none'; base-uri 'self'; frame-ancestors 'self'
object-src 'none' also blocks embedded PDFs (<object>, <embed>), and frame-ancestors 'self' stops other sites from showing your pages in a frame. If you rely on either on purpose, adjust the policy first.
Copying failed. Select the code and copy it by hand.
object-src 'none' also blocks embedded PDFs (<object>, <embed>), and frame-ancestors 'self' stops other sites from showing your pages in a frame. If you rely on either on purpose, adjust the policy first.
Copying failed. Select the code and copy it by hand.
object-src 'none' also blocks embedded PDFs (<object>, <embed>), and frame-ancestors 'self' stops other sites from showing your pages in a frame. If you rely on either on purpose, adjust the policy first.
Copying failed. Select the code and copy it by hand.
Security
Stop other sites from framing your page
There is no X-Frame-Options header and no frame-ancestors in the CSP, so another site can load your page in an invisible frame and trick visitors into clicking on it. The X-Frame-Options: SAMEORIGIN header prevents this.
Copying failed. Select the code and copy it by hand.
nginx
In the nginx server block. If a location block has its own add_header, repeat it there: nginx only inherits when the level has none.
add_header X-Frame-Options "SAMEORIGIN" always;
Copying failed. Select the code and copy it by hand.
Apache
In the .htaccess file of the web root
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
</IfModule>
Copying failed. Select the code and copy it by hand.
Basics
Return 404 for missing pages
A missing page gets status 200 and a normal page from the server, not 404. This is a soft 404: Google handles it badly and fake pages can end up in the index. Make missing pages return 404.
Performance
Stop scripts from blocking rendering
2 scripts in the <head> load without async or defer and halt the page from rendering until they are downloaded and run. Add defer, or move them to the bottom of the page.
In the page <head>
<script defer src="/app.js"></script>
A defer script runs after the HTML is parsed, in order with the other defer scripts. If an inline script uses its code (jQuery, for example), it breaks because of the delay: defer that one too, or leave this script without defer. In WordPress, strategy => defer in wp_enqueue_script() does the same for your own scripts (since 6.3).
Copying failed. Select the code and copy it by hand.
Accessibility
Improve text contrast
Some text has low contrast against its background. WCAG asks for at least 4.5:1 for normal text and 3:1 for large text. For low-vision visitors and in bright sunlight it is hard to read; darken the text or lighten the background.
Security
Do not expose the software version
The X-Powered-By header reveals the exact version: PHP/8.4.27. An attacker can see right away which known bugs to try; turn off the version output in the server or PHP configuration.
Copying failed. Select the code and copy it by hand.
Performance
Add a Cache-Control header
The home page response has no Cache-Control, so browsers and CDNs can only guess how long to keep it. Give changing HTML a short max-age, and images, CSS, JS and fonts a long one.
In a new file: wp-content/mu-plugins/hwp-report-cache-control.php (on Bedrock: web/app/mu-plugins/hwp-report-cache-control.php)
<?php
add_action( 'send_headers', function () {
if ( ! is_user_logged_in() ) {
header( 'Cache-Control: no-cache' );
}
} );
Copying failed. Select the code and copy it by hand.
Copying failed. Select the code and copy it by hand.
Performance
Add an ETag or Last-Modified header
The site sends neither, so returning visitors download everything again even if nothing changed. With either one the browser can ask whether anything changed and get a short "no".
SEO
Adjust the description length
The meta description is 209 characters; Google cuts it off after about 160. Put the important part first and shorten it.
WordPress
Remove exposed files
These files can be downloaded by anyone: readme.html. They may hold credentials, logs or backups. Delete them from the server or block access.
In the nginx server block, before the location ~ \.php$ block
Put it before your other regex locations, because nginx uses the first one that matches. If those sit inside a location / { … }, put it there, before them: the nested regex wins over the outer one. If a matching prefix location has the ^~ modifier, nginx skips the regexes: add it there too. Deleting the files is best.
Copying failed. Select the code and copy it by hand.
For other setups: Apache
Apache
In the .htaccess file of the web root, above the # BEGIN WordPress line
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule (^|/)(readme\.html)(/|$) - [F,L,NC]
</IfModule>
A subfolder .htaccess with its own RewriteEngine line does not inherit these rules unless it also has RewriteOptions Inherit.
Copying failed. Select the code and copy it by hand.
Performance
Reduce the number of scripts
The page loads 26 scripts; up to 20 is fine. Each one has to be downloaded, parsed and run, which you feel on slow phones. Remove plugins and tracking codes you do not use.
Performance
Use a modern image format
3 images are still JPEG or PNG and at least 10 KB. WebP or AVIF usually gives the same quality in a smaller file. Convert them; browsers support both nearly everywhere.
Create the .avif and .webp files from the same image first. The browser downloads the first source whose format it knows; the others get the .jpg.
Copying failed. Select the code and copy it by hand.
Performance
Set image sizes and lazy-load them
Images without a size: 4; below-the-fold images loading right away: 6. The first makes the page jump, the second takes bandwidth from more important content. Give every image a size, and add loading="lazy" to the ones below the fold.
In the page HTML
<img src="image.webp" width="640" height="360" alt="What the image shows" loading="lazy">
Use loading="lazy" only on images below the fold; never on the ones at the top of the page, especially the hero image.
Copying failed. Select the code and copy it by hand.
Accessibility
Add a skip link to the content
There is no “Skip to content” link at the start of the page. This matters mainly for keyboard users: without it they have to step through the whole menu on every page. Put a link at the start of the <body> that points to <main>.
In a classic theme header.php, right after the wp_body_open(); call
<a class="skip-link screen-reader-text" href="#content">Skip to content</a>
Point href to the id of the main content element of your theme. The theme CSS hides the screen-reader-text class and shows it on focus; if your theme lacks it, add the CSS lines under the HTML variant too (the link also has the .skip-link class). Block themes do not need this: since WordPress 5.8 core adds a skip link to the <main> element.
Copying failed. Select the code and copy it by hand.
For other setups: HTML
HTML
In the page HTML
<a class="skip-link" href="#content">Skip to content</a>
…
<main id="content">
…
</main>
Make the link the first focusable element in <body>. You may hide it only if it becomes visible on keyboard focus; with display: none the keyboard cannot reach it either. If you already have a <main> element, just add the id to it.
Copying failed. Select the code and copy it by hand.
Copying failed. Select the code and copy it by hand.
Basics
Measure who visits your site
We found no analytics on the page. Without measuring, you do not know which pages bring visitors and what works. Pick a tool (GA4 or a cookieless one such as Plausible) and set it up in line with the law.
Security 5 / 13 passed
TLS certificate (failed)
HSTS (failed)
Content-Security-Policy (failed)
Clickjacking protection (failed)
X-Content-Type-Options (failed)
Referrer-Policy (failed)
Cross-Origin-Opener-Policy (failed)
No software version exposed (failed)
HTTPS redirect (passed)
No deprecated headers (passed)
No exposed error text (passed)
Supported PHP version (passed)
Mixed content (passed)
Performance 13 / 19 passed
Cache-Control header (failed)
ETag or Last-Modified (failed)
Render-blocking scripts (failed)
Script count (failed)
Modern image format (failed)
Image sizes, lazy loading (failed)
Time to first byte (TTFB) (passed)
HTTP protocol (passed)
Modern compression (passed)
CDN (passed)
Page cache (passed)
Page weight (passed)
Lab LCP (passed)
Lab CLS (passed)
Lab TBT (passed)
Back/Forward Cache (passed)
LCP, real visitors (passed)
INP, real visitors (passed)
CLS, real visitors (passed)
SEO 10 / 11 passed
Description length (failed)
Page title (passed)
Title length (passed)
Single title tag (passed)
Meta description (passed)
Canonical URL (passed)
robots.txt (passed)
XML sitemap (passed)
Indexable (passed)
Structured data (passed)
Share image (passed)
Accessibility 5 / 7 passed
Skip link (failed)
Contrast (failed)
Pinch-to-zoom allowed (passed)
Main heading (h1) (passed)
Image alt text (passed)
Lang attribute (passed)
Semantic HTML (passed)
Basics 9 / 11 passed
404 handling (failed)
Analytics (failed)
Status code (200) (passed)
Number of redirects (passed)
Favicon (passed)
Viewport meta (passed)
HTML5 doctype (passed)
www and bare domain (passed)
www DNS record (passed)
Privacy policy link (passed)
No legacy Universal Analytics (passed)
Privacy 2 / 2 passed
Cookie banner (CMP) (passed)
Tracking before consent (passed)
WordPress 2 / 3 passed
No exposed files (failed)
Up-to-date plugins (passed)
Closed endpoints (passed)
Last measured: 1 November 2026, 10:11 ·
What runs on your site?
Enter the domain and the report is here in a few seconds: CMS, SEO, speed, with suggested fixes.
The report is built from the site's publicly available data.