Site Health Monitor

Site Health Monitor · a digital platform case study by Mohammad Uzair Khan: automated Lighthouse audits of public pharmaceutical websites

MSD’s WordPress pages beat the peer median on mobile performance (41 against 29) but trail it on accessibility (90 against 97), and the main content takes 9.5 s to appear on a mid-range phone

3 pages of msd.com and the home pages of 9 peers, audited with Lighthouse on its mobile setting on 19 Oct 2026. Every failing audit on MSD’s pages becomes a ranked fix, written for a WordPress site. The job reruns every week, so a fix shows up as a better score.

MSD median, performance · accessibility
41 · 90
Peer median, performance · accessibility
29 · 97
MSD page weight, median
1.0 MB (peers 4.1 MB)
Fixes in MSD’s backlog
24

Lighthouse scores, mobile

Scores run from 0 to 100; 90 and above is good. Performance is the hardest on a phone: Lighthouse loads the page as a mid-range phone on a slow 4G connection.

Performance score by page

0255075100MSD company overview44MSD home41MSD product pipeline41AstraZeneca38GSK34Pfizer32Lilly31Novo Nordisk29Sanofi25Roche23Novartis19Bristol Myers Squibb13
Source: Lighthouse audits run from Dubai on 19 Oct 2026; for pages run more than once, the median run.

How long until the main content appears

Largest Contentful Paint: when the biggest image or text block is drawn. Google counts 2.5 seconds or less as good. Hover a bar for page weight and blocking time.

Largest Contentful Paint, mobile

0 s5 s10 s15 s20 s25 s30 sMSD company overview6.2 sNovartis6.9 sGSK8.2 sAstraZeneca8.9 sMSD product pipeline9.5 sMSD home9.7 sPfizer10.5 sSanofi13.9 sRoche15.8 sBristol Myers Squibb16.6 sNovo Nordisk20.3 sLilly29.6 s
Source: Lighthouse lab measurement, simulated mid-range phone on slow 4G. Not field data from real visitors.

MSD’s fix backlog: 24 failing audits, ranked

Each failing audit on MSD’s pages, ranked by the share of MSD pages it affects and how badly it fails, with the remedy written for a WordPress site. The first 12 are shown; the workbook has all of them.

Highest priority first
IssueAreaMSD pagesFix
Render blocking requestsPerformance3 of 3Defer or inline the CSS and scripts the first screen does not need (theme enqueue settings or a performance plugin).
Reduce JavaScript execution timePerformance3 of 3Cut the JavaScript run on load (fewer plugins and tags on the page).
Minimize main-thread workPerformance3 of 3Cut the JavaScript run on load (fewer plugins and tags on the page).
Reduce unused JavaScriptPerformance3 of 3Load each plugin's scripts only on the pages that use it; remove plugins nobody uses.
Reduce the impact of third-party codePerformance3 of 3Review third-party tags (analytics, consent banner, chat) in the tag manager; load what can wait after the first interaction.
Preconnect to required originsPerformance3 of 3Preconnect to the other origins the first screen needs (fonts, CDN, tag manager).
Network dependency treePerformance3 of 3Shorten chains of requests; preconnect to the origins the first screen needs.
Use efficient cache lifetimesPerformance3 of 3Give static files a long cache lifetime at the host or CDN.
Buttons do not have an accessible nameAccessibility3 of 3Give every icon button an accessible name (aria-label) in the theme or block markup.
Links do not have descriptive textAccessibility3 of 3Replace links that say only "read more" or "click here" with text that says where they go.
Legacy JavaScriptPerformance3 of 3Stop shipping old-browser polyfills to modern browsers (update the theme build or the plugin).
Avoid serving legacy JavaScript to modern browsersPerformance3 of 3Stop shipping old-browser polyfills to modern browsers (update the theme build or the plugin).

What each site runs on

Read from each page’s own public markup (file paths a platform leaves behind), not from any private source.

Platform by site
PageAddressPlatform
AstraZenecawww.astrazeneca.com/Adobe Experience Manager
Bristol Myers Squibbwww.bms.com/Adobe Experience Manager
GSKwww.gsk.com/en-gb/Nuxt (Vue)
Lillywww.lilly.com/not readable (the site blocks scripted requests)
MSD company overviewwww.msd.com/company-overview/WordPress
MSD homewww.msd.com/WordPress
MSD product pipelinewww.msd.com/research/product-pipeline/WordPress
Novartiswww.novartis.com/Drupal
Novo Nordiskwww.novonordisk.com/Adobe Experience Manager
Pfizerwww.pfizer.com/not readable (the site blocks scripted requests)
Rochewww.roche.com/not identified
Sanofiwww.sanofi.com/ennot identified

Checks on each audit run

Method, downloads and limits

  1. Audit. Lighthouse in a fresh headless Chromium for each run (no profile, no login, nothing kept), mobile setting, performance, accessibility, best practices and SEO. A page that shows a bot wall is recorded as blocked.
  2. Report. The median run per page, MSD against peers, the platform from public markup, and a backlog of MSD’s failing audits with WordPress remedies; written to this page and an Excel workbook, with each week appended to a history file.
  3. Automate. A scheduled GitHub Actions job reruns the audits every week and commits the result, so the effect of a fix shows up as a trend.
  4. Light touch. A few page loads per site per week, about what one visitor makes: no crawling, no forms, no login.

Download the Excel workbook (.xlsx)

Limits. Lab measurements from one machine in Dubai on one day, not the experience of real visitors (Google’s field data needs an API key). Performance scores move by several points between runs, which is why runs are repeated. Home pages compared with MSD’s inner pages are a rough peer comparison. An independent audit of public pages, not produced or endorsed by MSD or any company named.