Performance
Good
ViewMend completed the page check and prepared practical tasks.
Check results
The data below belongs to the selected device.
Good
Good
Needs improvement
Good
Needs improvement
Good
Needs improvement
Good
Lab metrics
These are lab signals for the selected device. Below, ViewMend turns them into practical tasks.
FCP Needs improvement
2.0 s
Lab metric
LCP Needs improvement
2.9 s
Lab metric
TBT Good
118 ms
Lab metric
CLS Good
0.018
Lab metric
Speed Index Good
2.0 s
Lab metric
FCP Needs improvement
2.6 s
Lab metric
LCP Needs improvement
3.4 s
Lab metric
TBT Good
138 ms
Lab metric
CLS Good
0.006
Lab metric
Speed Index Good
2.6 s
Lab metric
ViewMend action plan
Run a new audit to build an action-based report with exact resources.
For this metric ViewMend did not receive one exact file. Related resource checks are shown when available.
For this metric ViewMend did not receive one exact file. Related resource checks are shown when available.
ViewMend AI
AI uses the tasks and resources found by ViewMend to create a step-by-step fix plan.
Ask AI Developer task Ask about one issue 1 credit Developer task Generate AI Fix Plan Uses 5 AI credits Generating... Generated AI Fix Plan fixPlanAnswer ? 'Generated AI Fix Plan' : 'Generate AI Fix Plan'AI uses the tasks and resources found by ViewMend to create a step-by-step fix plan.
AI credits are only used when you request AI output.
Visual evidence
Check what users see while the first screen is loading.
Passed checks
76 checks passed
73 checks passed
ViewMend also checked technical signals that do not require action.
Passed checks
Uses HTTPS
All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding mixed content, where some resources are loaded over HTTP despite the in...
Avoids requesting the geolocation permission on page load
Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. Learn more about the geolocation per...
Avoids requesting the notification permission on page load
Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. Learn more about responsibly...
Has a `<meta name="viewport">` tag with `width` or `initial-scale`
A `` not only optimizes your app for mobile screen sizes, but also prevents a 300 millisecond delay to user input. Learn more about using the viewport meta tag.
`<html>` element has a `[lang]` attribute
If a page doesn't specify a `lang` attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page is...
`<html>` element has a valid value for its `[lang]` attribute
Specifying a valid BCP 47 language helps screen readers announce text properly. Learn how to use the `lang` attribute.
`[user-scalable="no"]` is not used in the `<meta name="viewport">` element and the `[maximum-scale]` attribute is not less than 5.
Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. Learn more about the viewport meta tag.
Page has the HTML doctype
Specifying a doctype prevents the browser from switching to quirks-mode. Learn more about the doctype declaration.
Properly defines charset
A character encoding declaration is required. It can be done with a `` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. Learn more about declari...
Avoids an excessive DOM size
A large DOM will increase memory usage, cause longer style calculations, and produce costly layout reflows. Learn how to avoid an excessive DOM size.
247 elements
Optimize DOM size
A large DOM can increase the duration of style calculations and layout reflows, impacting page responsiveness. A large DOM will also increase memory usage. Learn how to avoid an ex...
Optimize viewport for mobile
Tap interactions may be delayed by up to 300 ms if the viewport is not optimized for mobile.
Cumulative Layout Shift
Cumulative Layout Shift measures the movement of visible elements within the viewport. Learn more about the Cumulative Layout Shift metric.
0.018
Initial server response time was short
Keep the server response time for the main document short because all other requests depend on it. Learn more about the Time to First Byte metric.
Root document took 70 ms
Minimizes main-thread work
Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. Learn how to minimize main-thread work
0.9 s
JavaScript execution time
Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. Learn how to reduce Javascript execution time.
0.3 s
Speed Index
Speed Index shows how quickly the contents of a page are visibly populated. Learn more about the Speed Index metric.
2.0 s
Total Blocking Time
Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. Learn more about the Total Blocking Time metric.
120 ms
Time to Interactive
Time to Interactive is the amount of time it takes for the page to become fully interactive. Learn more about the Time to Interactive metric.
3.5 s
Displays images with correct aspect ratio
Image display dimensions should match natural aspect ratio. Learn more about image aspect ratio.
Serves images with appropriate resolution
Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. Learn how to provide responsive images.
Image elements have explicit `width` and `height`
Set an explicit width and height on image elements to reduce layout shifts and improve CLS. Learn how to set image dimensions
Defer offscreen images
Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. Learn how to defer offscreen images.
Serve images in next-gen formats
Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. Learn more about modern image formats.
Efficiently encode images
Optimized images load faster and consume less cellular data. Learn how to efficiently encode images.
Properly size images
Serve images that are appropriately-sized to save cellular data and improve load time. Learn how to size images.
Improve image delivery
Reducing the download time of images can improve the perceived load time of the page and LCP. Learn more about optimizing image size
`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.
When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. Learn how to structure definition lists correctly.
Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).
Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. Learn more about proper list structure.
Minify JavaScript
Minifying JavaScript files can reduce payload sizes and script parse time. Learn how to minify JavaScript.
Remove duplicate modules in JavaScript bundles
Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity.
Document has a meta description
Meta descriptions may be included in search results to concisely summarize page content. Learn more about the meta description.
Links have descriptive text
Descriptive link text helps search engines understand your content. Learn how to make links more accessible.
Duplicated JavaScript
Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity.
Legacy JavaScript
Polyfills and transforms enable older browsers to use new JavaScript features. However, many aren't necessary for modern browsers. Consider modifying your JavaScript build process...
All text remains visible during webfont loads
Leverage the `font-display` CSS feature to ensure text is user-visible while webfonts are loading. Learn more about `font-display`.
Minify CSS
Minifying CSS files can reduce network payload sizes. Learn how to minify CSS.
Document uses legible font sizes
Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have >60% of page text ≥12px. Learn more about legi...
99.8% legible text
Font display
Consider setting font-display to swap or optional to ensure text is consistently visible. swap can be further optimized to mitigate layout shifts with font metric overrides.
Avoid multiple page redirects
Redirects introduce additional delays before the page can be loaded. Learn how to avoid page redirects.
Avoids enormous network payloads
Large network payloads cost users real money and are highly correlated with long load times. Learn how to reduce payload sizes.
Total size was 326 KiB
Use HTTP/2
HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing. Learn more about HTTP/2.
Page didn't prevent back/forward cache restoration
Many navigations are performed by going back to a previous page, or forwards again. The back/forward cache (bfcache) can speed up these return navigations. Learn more about the bfc...
Links are crawlable
Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the s...
Page isn’t blocked from indexing
Search engines are unable to include your pages in search results if they don't have permission to crawl them. Learn more about crawler directives.
robots.txt is valid
If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. Learn more about robots.txt.
Document has a valid `hreflang`
hreflang links tell search engines what version of a page they should list in search results for a given language or region. Learn more about `hreflang`.
Document has a valid `rel=canonical`
Canonical links suggest which URL to show in search results. Learn more about canonical links.
`[aria-*]` attributes match their roles
Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. Learn how to match ARIA attributes to their roles.
ARIA attributes are used as specified for the element's role
Some ARIA attributes are only allowed on an element under certain conditions. Learn more about conditional ARIA attributes.
Deprecated ARIA roles were not used
Deprecated ARIA roles may not be processed correctly by assistive technology. Learn more about deprecated ARIA roles.
Elements with `role="dialog"` or `role="alertdialog"` have accessible names.
ARIA dialog elements without accessible names may prevent screen readers users from discerning the purpose of these elements. Learn how to make ARIA dialog elements more accessible...
`[aria-hidden="true"]` is not present on the document `<body>`
Assistive technologies, like screen readers, work inconsistently when `aria-hidden="true"` is set on the document ``. Learn how `aria-hidden` affects the document body.
`[aria-hidden="true"]` elements do not contain focusable descendents
Focusable descendents within an `aria-hidden="true"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn...
`[role]`s have all required `[aria-*]` attributes
Some ARIA roles have required attributes that describe the state of the element to screen readers. Learn more about roles and required attributes.
`[role]` values are valid
ARIA roles must have valid values in order to perform their intended accessibility functions. Learn more about valid ARIA roles.
`[aria-*]` attributes have valid values
Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. Learn more about valid values for ARIA attributes.
`[aria-*]` attributes are valid and not misspelled
Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. Learn more about valid ARIA attributes.
Buttons have an accessible name
When a button doesn't have an accessible name, screen readers announce it as "button", making it unusable for users who rely on screen readers. Learn how to make buttons more acces...
Heading elements appear in a sequentially-descending order
Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. Learn mo...
Links have a discernible name
Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. Learn how to ma...
No browser errors logged to the console
Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. Learn more about this errors in console diagnosti...
Avoids deprecated APIs
Deprecated APIs will eventually be removed from the browser. Learn more about deprecated APIs.
Page has valid source maps
Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider de...
Preconnect to required origins
Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. Learn how to preconnect to required origins.
Definition list items are wrapped in `<dl>` elements
Definition list items (`` and ``) must be wrapped in a parent `` element to ensure that screen readers can properly announce them. Learn how to structure definition lists correctly...
Document has a `<title>` element
The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. Learn more about documen...
List items (`<li>`) are contained within `<ul>`, `<ol>` or `<menu>` parent elements
Screen readers require list items (``) to be contained within a parent ``, `` or `` to be announced properly. Learn more about proper list structure.
Touch targets have sufficient size and spacing.
Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. Learn more about touch targets.
Use video formats for animated content
Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. Lea...
Avoids `document.write()`
For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. Learn how to avoid document.write().
Allows users to paste into input fields
Preventing input pasting is a bad practice for the UX, and weakens security by blocking password managers.Learn more about user-friendly input fields.
Uses passive listeners to improve scrolling performance
Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. Learn more about adopting passive event listeners.
Page has successful HTTP status code
Pages with unsuccessful HTTP status codes may not be indexed properly. Learn more about HTTP status codes.
Document request latency
Your first network request is the most important. Reduce its latency by avoiding redirects, ensuring a fast server response, and enabling text compression.
Modern HTTP
HTTP/2 and HTTP/3 offer many benefits over HTTP/1.1, such as multiplexing. Learn more about using modern HTTP.
Uses HTTPS
All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding mixed content, where some resources are loaded over HTTP despite the in...
Avoids requesting the geolocation permission on page load
Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. Learn more about the geolocation per...
Avoids requesting the notification permission on page load
Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. Learn more about responsibly...
Has a `<meta name="viewport">` tag with `width` or `initial-scale`
A `` not only optimizes your app for mobile screen sizes, but also prevents a 300 millisecond delay to user input. Learn more about using the viewport meta tag.
`<html>` element has a `[lang]` attribute
If a page doesn't specify a `lang` attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page is...
`<html>` element has a valid value for its `[lang]` attribute
Specifying a valid BCP 47 language helps screen readers announce text properly. Learn how to use the `lang` attribute.
`[user-scalable="no"]` is not used in the `<meta name="viewport">` element and the `[maximum-scale]` attribute is not less than 5.
Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. Learn more about the viewport meta tag.
Page has the HTML doctype
Specifying a doctype prevents the browser from switching to quirks-mode. Learn more about the doctype declaration.
Properly defines charset
A character encoding declaration is required. It can be done with a `` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. Learn more about declari...
Avoids an excessive DOM size
A large DOM will increase memory usage, cause longer style calculations, and produce costly layout reflows. Learn how to avoid an excessive DOM size.
247 elements
Optimize DOM size
A large DOM can increase the duration of style calculations and layout reflows, impacting page responsiveness. A large DOM will also increase memory usage. Learn how to avoid an ex...
Optimize viewport for mobile
Tap interactions may be delayed by up to 300 ms if the viewport is not optimized for mobile.
Cumulative Layout Shift
Cumulative Layout Shift measures the movement of visible elements within the viewport. Learn more about the Cumulative Layout Shift metric.
0.006
Initial server response time was short
Keep the server response time for the main document short because all other requests depend on it. Learn more about the Time to First Byte metric.
Root document took 60 ms
Minimizes main-thread work
Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. Learn how to minimize main-thread work
0.9 s
JavaScript execution time
Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. Learn how to reduce Javascript execution time.
0.3 s
Total Blocking Time
Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. Learn more about the Total Blocking Time metric.
140 ms
Displays images with correct aspect ratio
Image display dimensions should match natural aspect ratio. Learn more about image aspect ratio.
Serves images with appropriate resolution
Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. Learn how to provide responsive images.
Image elements have explicit `width` and `height`
Set an explicit width and height on image elements to reduce layout shifts and improve CLS. Learn how to set image dimensions
Defer offscreen images
Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. Learn how to defer offscreen images.
Serve images in next-gen formats
Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. Learn more about modern image formats.
Efficiently encode images
Optimized images load faster and consume less cellular data. Learn how to efficiently encode images.
Properly size images
Serve images that are appropriately-sized to save cellular data and improve load time. Learn how to size images.
Improve image delivery
Reducing the download time of images can improve the perceived load time of the page and LCP. Learn more about optimizing image size
`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.
When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. Learn how to structure definition lists correctly.
Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).
Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. Learn more about proper list structure.
Minify JavaScript
Minifying JavaScript files can reduce payload sizes and script parse time. Learn how to minify JavaScript.
Remove duplicate modules in JavaScript bundles
Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity.
Document has a meta description
Meta descriptions may be included in search results to concisely summarize page content. Learn more about the meta description.
Links have descriptive text
Descriptive link text helps search engines understand your content. Learn how to make links more accessible.
Duplicated JavaScript
Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity.
Legacy JavaScript
Polyfills and transforms enable older browsers to use new JavaScript features. However, many aren't necessary for modern browsers. Consider modifying your JavaScript build process...
All text remains visible during webfont loads
Leverage the `font-display` CSS feature to ensure text is user-visible while webfonts are loading. Learn more about `font-display`.
Minify CSS
Minifying CSS files can reduce network payload sizes. Learn how to minify CSS.
Font display
Consider setting font-display to swap or optional to ensure text is consistently visible. swap can be further optimized to mitigate layout shifts with font metric overrides.
Avoid multiple page redirects
Redirects introduce additional delays before the page can be loaded. Learn how to avoid page redirects.
Avoids enormous network payloads
Large network payloads cost users real money and are highly correlated with long load times. Learn how to reduce payload sizes.
Total size was 326 KiB
Use HTTP/2
HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing. Learn more about HTTP/2.
Page didn't prevent back/forward cache restoration
Many navigations are performed by going back to a previous page, or forwards again. The back/forward cache (bfcache) can speed up these return navigations. Learn more about the bfc...
Links are crawlable
Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the s...
Page isn’t blocked from indexing
Search engines are unable to include your pages in search results if they don't have permission to crawl them. Learn more about crawler directives.
robots.txt is valid
If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. Learn more about robots.txt.
Document has a valid `hreflang`
hreflang links tell search engines what version of a page they should list in search results for a given language or region. Learn more about `hreflang`.
Document has a valid `rel=canonical`
Canonical links suggest which URL to show in search results. Learn more about canonical links.
`[aria-*]` attributes match their roles
Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. Learn how to match ARIA attributes to their roles.
ARIA attributes are used as specified for the element's role
Some ARIA attributes are only allowed on an element under certain conditions. Learn more about conditional ARIA attributes.
Deprecated ARIA roles were not used
Deprecated ARIA roles may not be processed correctly by assistive technology. Learn more about deprecated ARIA roles.
Elements with `role="dialog"` or `role="alertdialog"` have accessible names.
ARIA dialog elements without accessible names may prevent screen readers users from discerning the purpose of these elements. Learn how to make ARIA dialog elements more accessible...
`[aria-hidden="true"]` is not present on the document `<body>`
Assistive technologies, like screen readers, work inconsistently when `aria-hidden="true"` is set on the document ``. Learn how `aria-hidden` affects the document body.
`[aria-hidden="true"]` elements do not contain focusable descendents
Focusable descendents within an `aria-hidden="true"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn...
`[role]`s have all required `[aria-*]` attributes
Some ARIA roles have required attributes that describe the state of the element to screen readers. Learn more about roles and required attributes.
`[role]` values are valid
ARIA roles must have valid values in order to perform their intended accessibility functions. Learn more about valid ARIA roles.
`[aria-*]` attributes have valid values
Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. Learn more about valid values for ARIA attributes.
`[aria-*]` attributes are valid and not misspelled
Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. Learn more about valid ARIA attributes.
Buttons have an accessible name
When a button doesn't have an accessible name, screen readers announce it as "button", making it unusable for users who rely on screen readers. Learn how to make buttons more acces...
Heading elements appear in a sequentially-descending order
Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. Learn mo...
Links have a discernible name
Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. Learn how to ma...
No browser errors logged to the console
Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. Learn more about this errors in console diagnosti...
Avoids deprecated APIs
Deprecated APIs will eventually be removed from the browser. Learn more about deprecated APIs.
Page has valid source maps
Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider de...
Preconnect to required origins
Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. Learn how to preconnect to required origins.
Definition list items are wrapped in `<dl>` elements
Definition list items (`` and ``) must be wrapped in a parent `` element to ensure that screen readers can properly announce them. Learn how to structure definition lists correctly...
Document has a `<title>` element
The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. Learn more about documen...
List items (`<li>`) are contained within `<ul>`, `<ol>` or `<menu>` parent elements
Screen readers require list items (``) to be contained within a parent ``, `` or `` to be announced properly. Learn more about proper list structure.
Touch targets have sufficient size and spacing.
Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. Learn more about touch targets.
Use video formats for animated content
Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. Lea...
Avoids `document.write()`
For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. Learn how to avoid document.write().
Allows users to paste into input fields
Preventing input pasting is a bad practice for the UX, and weakens security by blocking password managers.Learn more about user-friendly input fields.
Uses passive listeners to improve scrolling performance
Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. Learn more about adopting passive event listeners.
Page has successful HTTP status code
Pages with unsuccessful HTTP status codes may not be indexed properly. Learn more about HTTP status codes.
Document request latency
Your first network request is the most important. Reduce its latency by avoiding redirects, ensuring a fast server response, and enabling text compression.
Modern HTTP
HTTP/2 and HTTP/3 offer many benefits over HTTP/1.1, such as multiplexing. Learn more about using modern HTTP.
Screenshot preview