14 pages • Generated: 13th Jul 2026
46
Health Score (F)
14
Pages
109
Passed
34
Warnings
4
Failed

Crawlability

(1 warning)
Canonical Chainwarning1 page affected
crawl/canonical-chaindocs
Checks for redirect chains on canonical URLs
Solution
Canonical URLs should point directly to the final destination, not through redirects. Redirect chains waste crawl budget and dilute link equity. If your canonical URL redirects, update it to point to the final URL. Check that canonical URLs use the preferred protocol (https) and www/non-www version. Self-referencing canonicals should match the page URL exactly.
Page redirects before content is served
1 page affected
1 item

Core SEO

(3 warnings)
Meta Titleerror1 page affected
core/meta-titledocs
Validates page title presence and length
Solution
Every page needs a unique, descriptive title tag between 30-60 characters. Titles appear in browser tabs, search results, and social shares. Write titles that accurately describe the page content while including your primary keyword near the beginning. If your title is too short, add more descriptive context. If too long, prioritize the most important information first and trim secondary details. Avoid keyword stuffing or duplicate titles across pages.
Title too short
1 page affected
1 item
Meta Descriptionerror1 page affected
core/meta-descriptiondocs
Validates meta description presence and length
Solution
Meta descriptions should be 120-160 characters and provide a compelling summary of the page. While not a direct ranking factor, good descriptions improve click-through rates from search results. Write unique descriptions for each page that accurately preview the content. Include a call-to-action when appropriate. If missing, search engines will auto-generate snippets which may not represent your page optimally.
Description too short
1 page affected
1 item
Faviconwarning1 page affected
core/favicondocs
Checks for favicon presence
Solution
Favicons help with brand recognition and UX. Include multiple formats: <link rel='icon' href='/favicon.ico'> for legacy, <link rel='icon' type='image/svg+xml' href='/favicon.svg'> for modern browsers, and <link rel='apple-touch-icon' href='/apple-touch-icon.png'> for iOS. 32x32px for .ico, 180x180px for Apple touch icon.
No favicon found
1 page affected

Security

(6 warnings)
Content Security Policywarning0 pages affected
security/cspdocs
Checks for Content-Security-Policy header and validates directives
Solution
CSP prevents XSS attacks by restricting which resources can load. Start with a report-only policy to identify issues. Key directives: default-src 'self', script-src (avoid 'unsafe-inline'), img-src, style-src, frame-ancestors. Use nonces or hashes instead of 'unsafe-inline' for scripts. Test thoroughly as strict CSP can break functionality.
No Content-Security-Policy header
HSTS Headerwarning0 pages affected
security/hstsdocs
Checks for HTTP Strict Transport Security header
Solution
HSTS forces browsers to only connect via HTTPS, preventing downgrade attacks. Add the header: Strict-Transport-Security: max-age=31536000; includeSubDomains. Start with a short max-age (1 day) to test, then increase to 1 year. The includeSubDomains directive protects all subdomains. Consider preloading via hstspreload.org for maximum protection.
Missing Strict-Transport-Security header
X-Frame-Optionswarning0 pages affected
security/x-frame-optionsdocs
Checks for clickjacking protection header
Solution
X-Frame-Options prevents your site from being embedded in iframes, protecting against clickjacking attacks. Set: X-Frame-Options: DENY (no framing) or SAMEORIGIN (same origin only). For modern browsers, CSP frame-ancestors is preferred: Content-Security-Policy: frame-ancestors 'self'. Use both for maximum compatibility.
No clickjacking protection
Form CAPTCHAwarning1 page affected
security/form-captchadocs
Checks for CAPTCHA protection on public forms
Solution
Add CAPTCHA protection (reCAPTCHA, Cloudflare Turnstile, hCaptcha, etc.) to public-facing forms to prevent spam and bot submissions. Contact forms, comment forms, newsletter signups, and registration forms are common targets for automated abuse. Modern CAPTCHA solutions like Turnstile offer invisible protection with minimal user friction.
1 public form(s) without CAPTCHA
1 page affected
1 item
#form02
External Link Securitywarning1 page affected
security/new-tabdocs
Checks external target=_blank links for noopener (security) and noreferrer (privacy)
Solution
External links with target="_blank" should include rel="noopener noreferrer". noopener prevents the opened page from accessing window.opener (tab-nabbing attacks). noreferrer prevents leaking the referrer URL to the destination site (privacy). Modern browsers default noopener for target="_blank", but explicit attributes ensure compatibility.
1 external link(s) missing rel="noopener"
1 page affected
1 item
HTTP to HTTPS Redirectwarning0 pages affected
security/http-to-httpsdocs
Checks whether HTTP URLs redirect to HTTPS
Solution
Ensure all HTTP URLs redirect to their HTTPS equivalents using permanent (301) redirects. This consolidates link equity and avoids mixed indexing. Configure your server to enforce HTTPS globally and verify that both the homepage and key internal URLs redirect correctly. WARNING: This rule makes external HTTP requests to probe redirect behavior.

Structured Data

(1 warning)
Video Schemawarning1 page affected
schema/videodocs
Validates VideoObject schema for video content
Solution
VideoObject schema enables video rich results and carousels. Required: name, description, thumbnailUrl, uploadDate. Recommended: duration (ISO 8601), contentUrl, embedUrl. For video courses, use Course with hasCourseInstance. Ensure thumbnailUrl is high quality (min 160x90, max 1920x1080).
Page has video but no VideoObject schema
1 page affected

Images

(1 error, 4 warnings)
Image File Size Too Largeerror0 pages affected
images/image-file-sizedocs
Checks for image files that exceed recommended size limits
Solution
Large images slow down page loads and impact Core Web Vitals. Compress oversized images, use modern formats (WebP/AVIF), and resize images to the display dimensions. Consider responsive images with srcset to serve smaller files on mobile.
2 image(s) exceed 200.0 KB
2 items
Image Alt Textwarning1 page affected
images/alt-textdocs
Validates image alt attributes
Solution
Alt text describes images for screen readers and displays when images fail to load. It's essential for accessibility and helps with image search SEO. Add descriptive alt text to all meaningful images. Keep it concise (under 125 characters) but descriptive. For decorative images, use empty alt="" to indicate they should be skipped by screen readers. Avoid keyword stuffing in alt text.
Offscreen Image Lazy Loadingwarning1 page affected
images/offscreen-lazydocs
Checks if offscreen images use lazy loading
Solution
Add loading='lazy' to images below the fold to defer loading until needed. This reduces initial page load time and saves bandwidth. Exception: Don't lazy-load LCP image or above-the-fold content. Use loading='eager' for critical images.
13 below-fold image(s) without lazy loading
1 page affected
10 items
6460cef1.jpg
fdfd0b59.jpg
image04.jpg
b1151a98.jpg
0067d1b9.jpg
2b92bd65.jpg
a0bfbae1.jpg
f438dceb.jpg
c6730576.jpg
cbf885db.jpg
Image Dimensionswarning1 page affected
images/dimensionsdocs
Checks for width/height attributes (prevents CLS)
Solution
Specifying width and height attributes prevents Cumulative Layout Shift (CLS) by reserving space before images load. Add width and height attributes to img tags matching the image's intrinsic dimensions. Use CSS for responsive sizing if needed. For responsive images, the aspect ratio from width/height prevents layout shifts even when CSS overrides the actual size.
20 image(s) missing width/height (causes CLS)
1 page affected
20 items
Inline SVG Sizeinfo1 page affected
images/svg-inlinedocs
Checks for large inline SVGs bloating HTML
Solution
Large inline SVGs increase HTML size and block rendering. Move SVGs >4KB to external files and reference with <img> or CSS background. Inline small, critical SVGs (icons, logos) only. Use SVGO to optimize. Consider SVG sprites for icon sets. Inline SVGs can't be cached separately from HTML.
1 large inline SVG(s) (>4KB each)
1 item

Performance

(1 error, 6 warnings)
LCP Optimization Hintswarning1 page affected
perf/lcp-hintsdocs
Checks for Largest Contentful Paint optimization opportunities
Solution
LCP measures when the largest content element becomes visible. Optimize by: 1) Preload your LCP image with <link rel='preload' as='image'>. 2) Don't use loading='lazy' on above-fold images as it delays loading. 3) Minimize render-blocking CSS/JS in <head>. 4) Use modern image formats (WebP/AVIF) for faster loading. 5) Consider using fetchpriority='high' on the LCP image.
3 potential LCP image(s) without preload
1 page affected
3 items
assets/images/image05.png?v=3c8cc49a
assets/images/gallery06/4bd17fe8.jpg?v=3c8cc49a
assets/images/gallery07/9458596d.jpg?v=3c8cc49a
CLS Optimization Hintswarning1 page affected
perf/cls-hintsdocs
Checks for Cumulative Layout Shift prevention
Solution
CLS measures visual stability - how much content shifts during load. Prevent layout shifts by: 1) Always set width and height attributes on images and iframes. 2) Reserve space for ads and embeds with CSS min-height. 3) Use CSS aspect-ratio for responsive media. 4) Avoid inserting content above existing content. 5) Use transform animations instead of properties that trigger layout.
20 image(s) without width/height (CLS risk)
1 page affected
20 items
assets/images/image05.png?v=3c8cc49a
assets/images/gallery06/4bd17fe8.jpg?v=3c8cc49a
assets/images/gallery07/9458596d.jpg?v=3c8cc49a
assets/images/gallery08/6460cef1.jpg?v=3c8cc49a
assets/images/gallery09/fdfd0b59.jpg?v=3c8cc49a
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHZpZXdCb3g9IjAgMCA5OTkgOTk5IiB3aWR0aD0iOTk5IiBoZWlnaHQ9Ijk5OSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI%2BPHJlY3QgZmlsbD0iIzY4M2IyMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIvPjwvc3ZnPg%3D%3D
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHZpZXdCb3g9IjAgMCAxMDc5IDEwNzkiIHdpZHRoPSIxMDc5IiBoZWlnaHQ9IjEwNzkiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiPjxyZWN0IGZpbGw9IiM3ODcyN2EiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiLz48L3N2Zz4%3D
assets/images/image04.jpg?v=3c8cc49a
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHZpZXdCb3g9IjAgMCAxNDk5IDEwMDAiIHdpZHRoPSIxNDk5IiBoZWlnaHQ9IjEwMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiPjxyZWN0IGZpbGw9IiM2NjY0NjIiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiLz48L3N2Zz4%3D
assets/images/gallery01/b1151a98.jpg?v=3c8cc49a
assets/images/gallery01/0067d1b9.jpg?v=3c8cc49a
assets/images/gallery01/2b92bd65.jpg?v=3c8cc49a
assets/images/gallery01/a0bfbae1.jpg?v=3c8cc49a
assets/images/gallery01/f438dceb.jpg?v=3c8cc49a
assets/images/gallery01/c6730576.jpg?v=3c8cc49a
assets/images/gallery01/cbf885db.jpg?v=3c8cc49a
assets/images/gallery01/a44ea39c.jpg?v=3c8cc49a
assets/images/gallery01/fa2f0deb.jpg?v=3c8cc49a
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHZpZXdCb3g9IjAgMCAxNDk5IDkwOCIgd2lkdGg9IjE0OTkiIGhlaWdodD0iOTA4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIj48cmVjdCBmaWxsPSIjMzUzYTQ3IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIi8%2BPC9zdmc%2B
1 iframe(s) without dimensions
1 page affected
1 item
Total Page Weightwarning0 pages affected
perf/total-byte-weightdocs
Checks the total byte weight of the page
Solution
Reduce total page weight for faster loads on slow connections. Optimize images (use modern formats, compress, serve appropriate sizes). Minify and compress CSS/JS. Remove unused code via tree-shaking. Lazy-load non-critical resources. Target under 1.6MB for mobile users.
Total tracked resources: 1658KB (heavy page)
Critical Request Chainswarning1 page affected
perf/critical-request-chainsdocs
Identifies chains of dependent resources that delay rendering
Solution
Critical request chains are sequences of dependent network requests that must complete before the page can render. Reduce chain depth by: 1) Inlining critical CSS instead of linking external files. 2) Adding async or defer to non-critical scripts. 3) Avoiding CSS @import — use <link> tags instead. 4) Using <link rel='preload'> for critical resources. 5) Reducing the number of render-blocking resources in <head>.
2 critical request chain(s) found
1 page affected
2 items
CSS: https://fonts.googleapis.com/css2?display=swap&family=Sora:ital,wght@0,300;0,400;1,300;1,400&family=DM+Sans:ital,wght@0,700;1,700&family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700
JS: https://payhip.com/payhip.js
Font Loadingwarning1 page affected
perf/font-loadingdocs
Checks for font loading best practices
Solution
Optimize font loading to prevent FOIT (Flash of Invisible Text) and FOUT (Flash of Unstyled Text): 1) Use font-display: swap in @font-face to show fallback text immediately. 2) Preconnect to font CDNs with <link rel='preconnect'>. 3) Use WOFF2 format for best compression. 4) Self-host fonts when possible for faster loading. 5) Limit font families and weights to reduce downloads.
Using Google Fonts without preconnect
1 page affected
Preconnect Hintsinfo1 page affected
perf/preconnectdocs
Checks for preconnect hints to critical third-party origins
Solution
Preconnect establishes early connections to important third-party origins, saving time on DNS lookup, TCP handshake, and TLS negotiation. Add <link rel='preconnect' href='https://example.com'> for CDNs and critical third-party services. Use crossorigin attribute for CORS resources like fonts. Limit preconnects to 2-4 most critical origins to avoid connection congestion.
Missing preconnect for 1 CDN(s)
1 page affected
1 item
fonts.googleapis.com

Accessibility

(2 errors, 6 warnings)
ARIA Command Nameerror1 page affected
a11y/aria-command-namedocs
Checks that command elements have accessible names
Solution
Command elements (buttons, links, menu items) must have accessible names. Add text content, aria-label, aria-labelledby, or title attribute. For icon-only buttons, use aria-label to describe the action (e.g., aria-label='Close').
6 command element(s) without accessible names
1 page affected
6 items
a[href="#one"]
a[href="#one"]
a[href="#one"]
a[href="#one"]
a[href="#one"]
a[href="#one"]
Form Labelserror1 page affected
a11y/form-labelsdocs
Checks that form inputs have associated labels
Solution
Every form input needs an accessible label for screen readers. Options: 1) Use <label for='inputId'>Label</label> with matching id. 2) Wrap the input inside <label>Label <input></label>. 3) Use aria-label or aria-labelledby for inputs where visible labels aren't feasible. Placeholders are not sufficient substitutes for labels. Hidden inputs, submit buttons, and image buttons don't need labels.
1 form input(s) without labels
1 page affected
1 item
site-url
Color Contrastwarning1 page affected
a11y/color-contrastdocs
Checks for color contrast issues in styles and classes
Solution
Text must have sufficient contrast with its background for readability. WCAG AA requires 4.5:1 for normal text and 3:1 for large text (18px+ or 14px+ bold). Use tools like WebAIM Contrast Checker to verify. Common issues: light gray text, text over images without overlay. Don't rely on color alone to convey information - add icons or text labels.
2 potential color contrast issue(s)
1 page affected
2 items
White text (verify background): 22 instance(s)
Very light text color: 21 instance(s)
Focus Visiblewarning1 page affected
a11y/focus-visibledocs
Checks for focus indicator styles
Solution
Keyboard users need visible focus indicators to know where they are on the page. Never use outline: none without providing an alternative focus style. Modern approach: use :focus-visible to show focus only for keyboard users, not mouse clicks. Ensure focus indicators have at least 3:1 contrast. Test by tabbing through your page - can you always see where focus is?
outline:none found - ensure alternative focus styles exist
1 page affected
Heading Orderwarning1 page affected
a11y/heading-orderdocs
Checks that heading levels don't skip
Solution
Headings should follow a logical hierarchy without skipping levels. Screen reader users navigate by headings, so skipping from H1 to H3 is confusing. Correct order: H1 -> H2 -> H3 (not H1 -> H3). You can have multiple headings at the same level, and you can go back up (H3 -> H2 is fine). Think of headings as an outline - they should make sense when read alone.
1 heading level skip(s) detected
1 page affected
1 item
H3 after H1
Identical Links Same Purposewarning1 page affected
a11y/identical-links-same-purposedocs
Checks that links with identical text go to the same destination
Solution
Links with the same visible text should go to the same URL. When identical link text leads to different destinations, it confuses screen reader users who navigate by listing links. Make link text unique or more descriptive to differentiate destinations.
1 link text(s) lead to different destinations
1 page affected
1 item
"buy now" → 2 different URLs
Link Textwarning1 page affected
a11y/link-textdocs
Checks for descriptive link text
Solution
Link text should describe the destination, not generic phrases like 'click here'. Screen reader users often navigate by links, hearing them out of context. Good: 'View our pricing plans'. Bad: 'Click here'. For icon-only links, add aria-label: <a href='/search' aria-label='Search'><svg>...</svg></a>. Empty links are especially problematic - add text or aria-label.
2 link(s) with generic text
1 page affected
1 item
buy now
Skip Linkwarning1 page affected
a11y/skip-linkdocs
Checks for bypass mechanisms for keyboard navigation
Solution
Skip links allow keyboard users to bypass repetitive navigation and jump directly to main content. Add a hidden link at the very beginning of your page: <a href='#main-content' class='skip-link'>Skip to main content</a>. Style it to become visible on focus. Ensure the target (#main-content) has tabindex='-1' if it's not naturally focusable. Alternative: use landmark roles like <main> which screen readers can navigate to directly.
No bypass mechanism for repetitive content
1 page affected

E-E-A-T

(5 warnings)
About Pagewarning0 pages affected
eeat/about-pagedocs
Checks for an about/company page with content
Solution
An About page establishes credibility and trust. Include company history, mission, team overview, and credentials. Link from main navigation or footer. For E-E-A-T, explain your expertise and why visitors should trust you. Include contact information and physical location if applicable.
No About page found
Author Bylineswarning0 pages affected
eeat/author-bylinedocs
Checks for visible author names on content pages
Solution
Author bylines demonstrate experience and accountability. Show author names prominently on articles, blog posts, and expert content. Include author credentials where relevant. Link author names to bio pages. For YMYL content (health, finance), author transparency is especially important for Google's E-E-A-T assessment.
No content pages have author attribution
Contact Pagewarning0 pages affected
eeat/contact-pagedocs
Checks for contact page with multiple contact methods
Solution
A contact page with multiple contact methods builds trust. Include: email address or contact form, phone number (if applicable), physical address, and social media links. Make contact information easy to find from any page. For local businesses, include business hours. Response time expectations are also helpful.
No Contact page found
Privacy Policywarning0 pages affected
eeat/privacy-policydocs
Checks for privacy policy page linked from footer
Solution
A privacy policy is required by law in many jurisdictions (GDPR, CCPA) and signals trustworthiness. Link it from your footer on every page. Cover: what data you collect, how you use it, third-party sharing, user rights, and contact for privacy concerns. Keep it updated when practices change.
No Privacy Policy page found
Content Dateswarning0 pages affected
eeat/content-datesdocs
Checks for published and modified dates on content
Solution
Visible dates show content freshness and help users assess relevance. Include datePublished and dateModified in Article schema. Show human-readable dates on pages. Update dateModified when making significant changes. Fresh content signals ongoing maintenance and expertise. Stale dates may hurt rankings for time-sensitive topics.
No content pages have datePublished
(1 warning)
Privacy Policywarning0 pages affected
legal/privacy-policydocs
Checks for privacy policy link presence
Solution
A privacy policy is legally required in many jurisdictions (GDPR, CCPA). Link to your privacy policy from every page, typically in the footer. The policy should explain what data you collect, how it's used, and user rights. Consider using schema.org markup to identify the policy page.
No privacy policy link found across site

Video

(1 warning)
Video Schemawarning1 page affected
video/video-schemadocs
Checks for VideoObject schema on pages with video
Solution
Add VideoObject schema to pages with video content for rich results. Required: name, description, thumbnailUrl, uploadDate. Recommended: duration, contentUrl, embedUrl. Schema enables video carousels and previews in search results. Test with Google's Rich Results Test.
Video content without VideoObject schema
1 page affected