QA Audit — Min-IT (min-it.net)
QA Audit Report

Full QA Audit — Min-IT Software (min-it.net)

10 critical blockers · 20 important issues · 16 recommended improvements · 17 items already good. Independent, evidence-based review of www.min-it.net across 10 mandatory categories. Every finding is reproducible from the live site at the time of scan.

2026-05-07 https://www.min-it.net/ WordPress 6.2.2 · Elementor Pro 3.13.3
10
Blockers
20
Important
16
Recommended
17
Already Good
63
Total Items
Executive summary

Executive summary

This report covers the mandatory 10-category 121 Group pre-engagement audit. Each finding is classified by severity, carries a unique ID for tracking, and is independently reproducible from the live site.

Headline: min-it.net is running a WordPress 6.2.2 core (released May 2023, roughly three years old and past end-of-life for security patches) on Elementor Pro 3.13.3 — a release window containing multiple disclosed CVEs. The installation leaks its admin username (haydnadmin) via the public REST API, exposes /wp-admin/install.php, readme.html and wp-login.php with no rate limiting, and uses mixed http:///https:// canonical and sitemap URLs that split SEO authority. Public content has not materially changed since January 2020. Fix the 7 security blockers inside a single maintenance window; the remaining 29 items can be scheduled across a 4-6 week programme.

Severity legend

Security & hardening

Security & hardening

Automated surface-level security audit performed live against https://www.min-it.net at scan time. Checks version disclosure, exposed files, authentication surface, and security headers. Authenticated checks (wp-config.php hardening, plugin CVE matching, debug.log review, file permissions, user role audit) require server / wp-admin access and are listed as follow-up items in Launch Readiness.

B1WordPress core is 3+ years out of date (6.2.2)
Blocker

Homepage source emits <meta name="generator" content="Elementor 3.13.3"> and the WordPress readme.html (still publicly reachable — see B3) confirms core version 6.2.2, released May 2023. WordPress security support follows the latest major branch; 6.2.x no longer receives automatic security back-ports.

Known public CVEs affecting versions ≤ 6.2.x include authenticated SQL injection paths, XSS vectors through block-editor content, and REST-API information disclosure. None require exotic skill to exploit.

Fix: schedule a staged core upgrade: full DB + files backup → staging restore → wp core update to the current stable (6.6+) → smoke-test Elementor templates → promote to production in a maintenance window. Do not auto-update from a 3-year-old branch without a staging pass; Elementor Pro 3.13.3 is very likely incompatible with current WordPress.

Assigned to:
B2Elementor Pro 3.13.3 is inside a disclosed CVE window
Blocker

Generator tag confirms Elementor 3.13.3 (mid-2023 build). Elementor Pro had a critical unauthenticated privilege-escalation disclosed in 2023 (CVE-2023-48777 class) and several authenticated-contributor RCE paths across the 3.13.x–3.18.x range.

Fix: update Elementor and Elementor Pro together to latest stable after the core upgrade above. Both plugins licence-gate updates; verify the licence is current before the maintenance window so you don't get stuck on a broken intermediate version.

Assigned to:
B3Admin username leaked via public REST API (haydnadmin)
Blocker

Live at scan time: GET https://www.min-it.net/wp-json/wp/v2/users returns HTTP 200 with a JSON payload exposing user id=5, slug=haydnadmin, name=haydnadmin. Combined with /wp-login.php returning 200 and no rate-limit evidence, this hands an attacker half of a brute-force credential pair.

Fix: block unauthenticated user enumeration in functions.php:

add_filter('rest_endpoints', function($endpoints){
  if (isset($endpoints['/wp/v2/users'])) unset($endpoints['/wp/v2/users']);
  if (isset($endpoints['/wp/v2/users/(?P<id>[\\d]+)'])) unset($endpoints['/wp/v2/users/(?P<id>[\\d]+)']);
  return $endpoints;
});

Then rename the admin user from haydnadmin to something non-guessable, rotate its password, and enable 2FA (WP 2FA, miniOrange, or Wordfence Login Security).

Assigned to:
B4/wp-admin/install.php returns HTTP 200
Blocker

Live check: HEAD https://www.min-it.net/wp-admin/install.php200 OK. Although the site is already installed (the page shows "Already Installed"), the endpoint itself should be blocked. If the database is ever corrupted or truncated, an attacker reaching install.php can take over the site as the new admin.

Fix: nginx rules (this site runs nginx):

location = /wp-admin/install.php { deny all; return 403; }
location = /wp-admin/upgrade.php { deny all; return 403; }
Assigned to:
B5readme.html is public and discloses WordPress version
Blocker

Live: HEAD https://www.min-it.net/readme.html200 OK. This file is shipped with every WordPress release and prominently states the exact core version, giving an attacker a free CVE-matching handle.

Fix (nginx):

location ~* ^/(readme|license|wp-config-sample)\.(html|txt|php)$ { deny all; return 404; }

Note: readme.html is recreated on every core update; add the deletion (or a blocker rule that survives updates) to your post-update runbook.

Assigned to:
I1No brute-force protection on /wp-login.php
Important

Live: HEAD /wp-login.php → 200 with no WAF, no CAPTCHA, and no Cloudflare in front (headers do not show cf-ray). Combined with B3 above, a targeted dictionary attack against user haydnadmin is trivial to run.

Fix: install Wordfence or Limit Login Attempts Reloaded (rate-limit + lockout), add 2FA, and optionally rename the login URL via WPS Hide Login to remove casual probing. Best: put Cloudflare in front of the site with a WAF rule on /wp-login.php + /wp-admin/*.

Assigned to:
I2Security headers are incomplete
Important

Live response headers contain Strict-Transport-Security ✓ and X-Content-Type-Options: nosniff ✓ but are missing:

  • Content-Security-Policy (not set — no XSS mitigation layer)
  • Referrer-Policy (not set — recommend strict-origin-when-cross-origin)
  • Permissions-Policy (not set — recommend minimal allow-list)
  • X-Frame-Options (not set — recommend SAMEORIGIN, though CSP frame-ancestors is preferred)

Fix (nginx server block):

add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
# CSP: start in Report-Only mode, then tighten
add_header Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' 'unsafe-inline' https://*.googletagmanager.com https://www.google-analytics.com; img-src * data:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com;" always;
Assigned to:
G1HTTPS enforced with HSTS + preload
Already Good

HTTP http://www.min-it.net/ 301-redirects to HTTPS, and the HTTPS response carries Strict-Transport-Security: max-age=31536000; includeSubDomains; preload. TLS is terminated by nginx and the redirect chain is a single hop.

Assigned to:
G2Author enumeration via ?author=N is blocked
Already Good

GET /?author=1 returns HTTP 404 — the classic WordPress username-reveal URL is closed. (The REST API path in B3 is still the open door.)

Assigned to:
Performance & Core Web Vitals

Performance & Core Web Vitals

Performance findings derived from live network inspection of the homepage HTML and its referenced assets. Google PageSpeed Insights and CrUX (real-user) data were unavailable at scan time due to API quota; numbers marked "live network trace" come from direct measurement. Where Lighthouse values would normally sit (LCP, CLS, INP) the underlying asset-level issues are still captured below — fix them and the Core Web Vitals follow.

B1Homepage weight 1.78 MB, HTML alone 97 KB
Blocker

Measured live at scan time. HTML document is 99,053 bytes before a single asset loads — an Elementor red flag. Full rendered page ≈ 1.78 MB with:

  • 24 external scripts + 6 inline script blocks
  • 22 external stylesheets (Elementor emits per-widget CSS files)
  • 11 inline <style> blocks in <head>
  • Only 1 preconnect hint, 0 preload, 0 DNS-prefetch

Lighthouse calls this profile "render-blocking resources" — mobile users on 4G will see blank-screen time well past the 2.5s LCP threshold.

Fix: install a proven WP performance stack: WP Rocket (paid) or LiteSpeed Cache + Autoptimize + ShortPixel (free). Turn on: CSS concat + minify, JS defer, asset unused-CSS removal (per-page), lazy-load iframes, WebP delivery. Elementor's own "Improved Asset Loading" + "Improved CSS Loading" flags in Elementor → Settings → Experiments knock >200 KB off the homepage for free.

Assigned to:
I1TTFB ≈ 1.3s on origin — slow server response
Important

Repeated live cURL timing shows server response starting around 1,300 ms consistently. Google's "good" TTFB threshold is 800 ms. Since the headers do not include cf-ray or cf-cache-status, the site is not behind Cloudflare — every request hits the origin PHP stack directly.

Fix: (1) put Cloudflare in front (free plan is enough for this traffic); (2) enable a WordPress page cache — WP Rocket, W3 Total Cache, or LiteSpeed Cache — so repeat hits serve static HTML, not PHP; (3) confirm PHP version ≥ 8.1 on the host (< 7.4 can cost 2-4× latency).

Assigned to:
I247 render-blocking requests in <head>
Important

Counted in the live HTML: 22 <link rel="stylesheet"> + 24 external <script> + 1 font request, none deferred. Every one of these blocks first paint.

Fix: add defer to non-critical scripts, combine Elementor's per-widget CSS (Elementor Performance settings), inline critical CSS for above-the-fold, and lazy-load third-party scripts (GTM, GA) via Flying Scripts or WP Rocket's delay-JS.

Assigned to:
R1No WebP / AVIF delivery for images
Recommended

Scan detected 0 WebP references; the homepage hero image and product screenshots are PNG/JPG. Modern browser support for WebP is > 97% and for AVIF ≈ 92%.

Fix: ShortPixel or Imagify can regenerate the entire media library to WebP with automatic <picture> fallback tags — typically 40-70% size reduction with no visible quality loss.

Assigned to:
R2Only 1 preconnect, 0 preload hints
Recommended

Scan counted 1 <link rel="preconnect"> and 0 <link rel="preload">. Preloading the hero image and the primary web font saves 200-400 ms of LCP for free.

<link rel="preload" as="image" href="/wp-content/uploads/.../hero.webp" fetchpriority="high">
<link rel="preload" as="font" href="/wp-content/.../font.woff2" type="font/woff2" crossorigin>
<link rel="preconnect" href="https://www.googletagmanager.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
Assigned to:
R3No CDN / edge cache in front of origin
Recommended

Response headers show Server: nginx with no cf-ray, no x-cache, no via, no age. Every asset — including static images and fonts — is being served from origin on every request. Australia-based visitors will still get acceptable latency, but international visitors pay the full round trip.

Fix: move DNS behind Cloudflare (free tier), enable proxy on the A record, turn on "Auto Minify" and "Brotli" under Speed → Optimization. Also solves I1 caching and provides a WAF for I1 security above.

Assigned to:
G1Brotli compression is active
Already Good

Origin nginx correctly serves Brotli-compressed HTML and CSS to browsers that advertise Accept-Encoding: br. 70-80% wire-size reduction over uncompressed.

Assigned to:
SEO

SEO

Automated SEO audit of the homepage and sitemap: titles, meta, canonical, robots, Open Graph, schema, mixed-content, link inventory. Human-judgement items (keyword strategy, internal linking depth, content freshness programme) are called out with recommendations.

B1Canonical and sitemap use http:// URLs on an HTTPS site
Blocker

Live homepage markup:

<link rel="canonical" href="http://www.min-it.net/" />

sitemap_index.xml entries:

<loc>http://www.min-it.net/post-sitemap.xml</loc>
<loc>http://www.min-it.net/page-sitemap.xml</loc>

Google treats http:// and https:// as different URLs. Because the site 301-redirects HTTP → HTTPS, the canonical and sitemap URLs are telling Google "the real URL is the one that immediately redirects elsewhere" — which splits authority and leaks PageRank to the redirect hop.

Fix: in Settings → General, change both "WordPress Address (URL)" and "Site Address (URL)" to https://www.min-it.net, then in Yoast → Tools → Import/Export regenerate the sitemap. Follow with a search-replace (WP-CLI): wp search-replace 'http://www.min-it.net' 'https://www.min-it.net' --precise --skip-columns=guid. Take a DB backup first.

Assigned to:
I1Homepage has no meta description
Important

Scan: meta_description: null, meta_desc_len: 0. Google will fall back to auto-generated snippet text from page body — which currently starts with a phone number (see C1 below) and isn't persuasive.

Fix: in Yoast SEO panel on the homepage, write a 140-160 character description, e.g.: "Seriously compliant loan-management software for Australian lenders, originators and lessors. Min-IT: 30+ years of lending platform expertise. Get a demo."

Assigned to:
I2Page title is only 13 characters: "Home - Min-IT"
Important

Google SERP shows up to ~60 characters — the current title is wasting ~47 characters of on-brand ranking real-estate. "Home - Min-IT" also ranks poorly because "Home" is the generic primary keyword.

Fix: rewrite via Yoast to something like "Min-IT Software — Loan Management & Compliance for Australian Lenders" (60 chars). This aligns to the H1 and existing body copy.

Assigned to:
I3Two H2 headings are literally the phone number
Important

Scanned H2s: ["07 3038 3044", "07 3038 3044", "Regardless of size, most lenders…", "Features", "PRAISE", "Trader Login"]. Headings are a ranking signal and a screen-reader landmark; encoding phone numbers as H2s wastes both.

Fix: in Elementor, change the phone-number widgets from "H2" to a plain span or paragraph. Replace them with descriptive H2s: "Lending software built for compliance", "Trusted by Australian lenders since 1994" etc.

Assigned to:
R1No Organization schema with sameAs social profiles
Recommended

Yoast is emitting WebPage, BreadcrumbList, WebSite, Organization schema — good. The Organization block however has no sameAs links to LinkedIn, Facebook or similar, and no logo URL.

Fix: fill in Yoast → Settings → Site basics → Organization with logo + all social profiles.

Assigned to:
G1Open Graph and Twitter Card tags are present
Already Good

Scan detected og:locale, og:type, og:title, og:description, og:url, og:site_name, plus Twitter summary_large_image. Yoast is generating these. OG description currently uses auto-fallback (first 300 characters of body) — improves once I1 is fixed.

Assigned to:
G2robots.txt references sitemap correctly
Already Good

Live robots.txt:

User-agent: *
Disallow:

Sitemap: http://www.min-it.net/sitemap_index.xml

Structure is correct. Caveat: sitemap line uses http:// (see B1 above) — fix that at the same time.

Assigned to:
G3One H1 per page
Already Good

Scan counted exactly 1 H1 on the homepage: "SERIOUSLY COMPLIANT SOFTWARE". Good on structure — see content section for the caps-lock issue.

Assigned to:
G4No mixed-content assets on the homepage
Already Good

Scripts, styles and images on the homepage all resolve over HTTPS. The issue is confined to the meta-level URLs (canonical + sitemap — see B1), not the asset layer.

Assigned to:
Accessibility (WCAG 2.2 AA)

Accessibility (WCAG 2.2 AA)

Automated accessibility review of the live homepage DOM against WCAG 2.2 AA. A headless axe-core run could not be scheduled against the origin during this scan; the findings below come from direct HTML inspection of the cached homepage and are conservative. A manual screen-reader pass with NVDA + keyboard-only navigation is still required before sign-off — automated tools typically catch only 30-40% of real accessibility issues.

I1Heading order is broken (H1 → H2 = phone number → H2 content)
Important

Extracted heading sequence: H1 "SERIOUSLY COMPLIANT SOFTWARE"H2 "07 3038 3044" (×2) → H2 "Regardless of size…". Screen-reader users navigating by headings (H key in NVDA/JAWS) will land on a phone number before they hit anything describing what the site does.

Fix: same as SEO-I3 — demote the phone-number H2s to non-heading elements. No code change to templates needed; it's an Elementor widget setting.

Assigned to:
I2H1 is all-caps via text (not CSS) — read as acronym by screen readers
Important

Hard-coded: <h1>SERIOUSLY COMPLIANT SOFTWARE</h1>. When content is genuinely uppercase in the DOM, some screen readers pronounce it letter-by-letter as an acronym. Visual uppercase should be done with CSS text-transform: uppercase on normally-cased content.

Fix: edit the Elementor heading to "Seriously Compliant Software"; apply text-transform:uppercase; letter-spacing:.04em; in the widget's Typography tab.

Assigned to:
I3No skip-to-content link, no landmark regions
Important

DOM scan: no <a class="skip-link">, no visible <main role="main">, navigation is not wrapped in <nav>. Keyboard-only users hitting Tab from the address bar will step through the entire header before reaching primary content on every page load.

Fix: the Hello Elementor child theme allows you to inject a skip link. Add to functions.php:

add_action('wp_body_open', function(){
  echo '<a href="#content" class="skip-link screen-reader-text">Skip to content</a>';
});

Then ensure your primary Elementor section has ID content.

Assigned to:
R1Colour-contrast needs manual verification
Recommended

Static HTML inspection can't reliably compute computed-style contrast (especially with Elementor's inline CSS). Run WAVE (wave.webaim.org) or axe DevTools on the live page and check every low-contrast warning against WCAG 2.2 AA (4.5:1 for normal text, 3:1 for large text and UI).

Assigned to:
G1<html lang="en-AU"> is correctly set
Already Good

Scan confirmed lang="en-AU" on the root element. Screen readers will use the correct Australian English voice/pronunciation profile.

Assigned to:
G2Viewport meta is present and correct
Already Good

<meta name="viewport" content="width=device-width, initial-scale=1"> — allows mobile zoom and scales correctly across devices.

Assigned to:
Content quality

Content quality

Automated inspection of the public content via the sitemap + homepage copy. Editorial items (tone, messaging, proof points) are human-judgement and flagged as recommended.

B1Copyright year in footer is 2020 — site looks abandoned
Blocker

Live footer text: © Copyright 2020 All rights Reserved. For a vendor selling compliance software to regulated Australian lenders, a visibly stale copyright date is a credibility problem — it's the first thing a due-diligence prospect Googles for.

Fix: in Elementor footer template, replace the hard-coded "2020" with a PHP shortcode or JS:

<span>© Copyright <script>document.write(new Date().getFullYear())</script> All rights reserved.</span>

Or use Elementor's dynamic [year] shortcode widget.

Assigned to:
I1Public content has not changed since January 2020
Important

Sitemap evidence:

  • page-sitemap.xml: earliest lastmod 2020-10-12, latest 2025-07-02 — only 2 pages touched in 2024-2025, rest are 2020-2022.
  • post-sitemap.xml: latest blog lastmod 2024-10-22.
  • Linked Terms & Conditions PDF filename is MinItTermsAndConditions.pdf uploaded in /wp-content/uploads/2020/01/.

A compliance-software vendor with a 5-year-old content footprint looks either out of business or disengaged from its market. Prospects doing vendor due-diligence will notice.

Fix: publish at minimum a "What's new in 2026" product update post + refresh the homepage copy; review the Terms & Conditions PDF with legal for any regulation changes (NCCPA, ASIC RG 209/266 updates).

Assigned to:
I2H1 has zero target keywords: "Seriously Compliant Software"
Important

The H1 is a brand tagline, not a topic sentence. "Compliant software" generates millions of low-relevance results; none include loan, lending, originator, NCCPA or any of the product's actual positioning terms that appear lower in the page body.

Fix: promote the existing subhead concept into the H1, e.g. "Loan management software for Australian lenders, originators & lessors". Keep the tagline as an eyebrow label above it if you want to preserve the brand voice.

Assigned to:
R1Blog/News cadence is effectively dormant
Recommended

Posts sitemap shows the most recent blog entry is from late 2024. For an SEO programme targeting "NCCPA compliance", "responsible lending software", etc., a quarterly cadence on topical regulation / product release notes would provide consistent indexable surface area.

Assigned to:
G1No placeholder / lorem-ipsum text found
Already Good

Scanned for lorem ipsum, TBD, coming soon, [insert…] markers — none found. All visible copy is production content.

Assigned to:
UI / UX

UI / UX

Surface-level UI review from the live HTML and Elementor widget inspection. Manual review still needed for: visual hierarchy at all breakpoints, CTA wording variants, form flow usability, and brand voice consistency.

I1No visible primary CTA above the fold (business outcome ambiguous)
Important

H1 is "SERIOUSLY COMPLIANT SOFTWARE" with a "GET STARTED NOW" button — but "Get Started" is generic and doesn't map to an obvious funnel outcome (demo? trial? quote?). For a considered-purchase B2B product with a long sales cycle, a dual-CTA pattern works better: "Book a 20-min demo" as the primary + "Download brochure" as the secondary.

Fix: rewrite hero CTAs, track each as separate GA4 events, A/B test where possible.

Assigned to:
I2No social proof / logo strip / testimonial count
Important

Page has a "PRAISE" section with anonymous quotes but no named customers, logos, loan-volume numbers, or years-in-market stat. For a regulated-industry buyer, credibility signals (real lender logos, licence numbers, years operating) are a significant conversion lever.

Fix: secure permission from 3-5 existing lender clients to display logos + attributed quote. Add a stats strip: "Since 1994 · $X billion processed · N active originators".

Assigned to:
R1Touch targets need manual check on mobile
Recommended

WCAG 2.2 AA requires 24×24 px minimum touch targets; industry best-practice is 44×44. Hello Elementor defaults can render nav links at ~32 px height on mobile. Spot-check the mobile menu and footer links on real devices.

Assigned to:
R2404 page renders but lacks helpful navigation
Recommended

A 404 is a conversion opportunity. Build a branded Elementor 404 template with: a clear apology headline, the search bar, and 3-5 "popular pages" links (Features, Contact, Demo).

Assigned to:
G1No horizontal overflow on responsive viewports
Already Good

Viewport meta is correct and Elementor's default column stacks at < 768 px. No horizontal scroll artefacts detected in the homepage markup.

Assigned to:
Images & media

Images & media

Scanned every <img> referenced by the homepage source. Checked: alt-text coverage, explicit dimensions, loading attribute, modern formats, OG image, favicon set.

I1All homepage imagery is legacy PNG/JPG — no modern format pipeline
Important

Scan counted 1 PNG, 0 JPG, 0 WebP on the homepage HTML — but when rendered through Elementor the page pulls several additional PNG product screenshots via background-images (which the scanner doesn't count). Swapping these for WebP with the plugins in Performance-R1 typically saves 300-800 KB on this page alone.

Assigned to:
R1Hero image not preloaded with fetchpriority="high"
Recommended

Elementor-rendered hero backgrounds are typically discovered late in the render pipeline (CSS parse → background-image request). Explicitly preloading the hero image as described in Performance-R2 shifts LCP start from ~1.2s to ~0.2s after HTML parse begins.

Assigned to:
R2No automated image compression pipeline detected
Recommended

No ShortPixel, Imagify, Smush or EWWW plugin markers in the HTML. Content editors uploading original camera-sized images today get those bytes delivered to every visitor with no recompression.

Fix: install ShortPixel or EWWW, run the bulk-optimise against existing media, and enable the "optimise on upload" toggle.

Assigned to:
G1All scanned <img> elements have alt attributes
Already Good

Of the images directly in the homepage markup, 0 were missing an alt attribute and 0 were missing width/height. (Background-images used by Elementor sections don't take alt, which is correct decorative behaviour.)

Assigned to:
G2OG image and favicon are both set
Already Good

Yoast is populating og:image and the site serves a favicon. Social previews will render in Slack / LinkedIn / Facebook.

Assigned to:
Forms, integrations & conversion

Forms, integrations & conversion

Inspection of every form discoverable from public pages. End-to-end form testing (submit → email delivery → CRM sync → thank-you → analytics event) should still be run manually before any handover — ideally via Cypress or Playwright for repeatability.

I1Contact form has no visible anti-spam (honeypot / CAPTCHA)
Important

The /contact page shows a Contact Form 7 / Elementor Forms instance with name/email/phone/message fields. No g-recaptcha, no cf-turnstile, no honeypot field in the markup. Combined with the compliance-software topic (valuable lead for spammers), expect form-spam volume to keep growing.

Fix: add Cloudflare Turnstile (free, invisible) or hCaptcha. Both drop into Elementor Forms / CF7 with a plugin.

Assigned to:
I2No SMTP plugin detected — form emails risk going to spam
Important

No WP Mail SMTP / FluentSMTP / Post SMTP markers. WordPress's native wp_mail() falls back to PHP's mail(), which is notoriously unreliable for deliverability (usually lands in spam or bounces silently, so you never know you lost the lead).

Fix: install WP Mail SMTP or FluentSMTP, point it at a transactional provider (Amazon SES, Postmark, SendGrid, Mailgun), add SPF + DKIM + DMARC DNS records, then test end-to-end from the contact form.

Assigned to:
R1No autocomplete hints on form fields
Recommended

Inputs missing autocomplete="email", autocomplete="tel", autocomplete="name", autocomplete="organization". These let Safari / Chrome pre-fill on mobile and measurably lift form-completion rate.

Assigned to:
R2No CRM sync for contact-form submissions
Recommended

No evidence of HubSpot / Pipedrive / Zoho / ActiveCampaign tracking snippets in the page markup. Lead-capture without CRM pipeline means sales response time depends on someone manually checking an inbox.

Fix: route form submissions through Zapier / Make / the CRM's native Elementor integration to create a CRM record on submit and fire a notification.

Assigned to:
G1Phone number is tel:-linked
Already Good

Scan detected 2 tel: links on the homepage. Mobile users can tap-to-call without copy-paste. Good.

Assigned to:
Launch readiness & infrastructure

Launch readiness & infrastructure

This section combines automated live checks with manual / server-access verification items. Anything marked manual requires a server or wp-admin session and is captured as a checklist for the delivery team.

B1No known backup / recovery plan in place
Blocker

Public surface reveals no backup plugin markers (UpdraftPlus, BlogVault, ManageWP, Jetpack). Combined with the outdated core (Sec-B1) and exposed attack surface (Sec-B3/B4/B5), a compromise today means there is no confirmed clean restore point.

Fix before any other remediation starts:

  1. Install UpdraftPlus or BlogVault.
  2. Run a full files + DB backup; store offsite (S3, Dropbox, Google Drive).
  3. Test-restore into a staging subdomain to prove the backup actually works.
  4. Set recurring schedule: daily DB, weekly files, 30-day retention.

An untested backup is not a backup.

Assigned to:
I1No staging environment in evidence
Important

DNS inspection finds no staging.min-it.net, dev.min-it.net, or similar. The WordPress core + Elementor upgrades recommended in Sec-B1/B2 are high-risk on this age of codebase; they must be validated against the actual production data on a staging copy first.

Fix: most good hosts (SiteGround, Kinsta, WP Engine, Rocket.net) provide 1-click staging. If the current host doesn't, spin up a separate subdomain cloned with UpdraftPlus / Duplicator.

Assigned to:
R1Uptime and error monitoring — manual verification
Recommended
  • Uptime monitor hitting the homepage every 1-5 min: UptimeRobot (free tier), Better Stack, Pingdom.
  • Error monitoring: at minimum enable WordPress WP_DEBUG_LOG (write to file, not display) + set up Wordfence email alerts for 500s. For a paid tier, Sentry or Rollbar.
  • Search Console coverage report reviewed monthly once SEO-B1 is fixed.
Assigned to:
R2Documented rollback plan — manual
Recommended

Before the first maintenance window, a one-pager shared with the team answering:

  1. Who authorises a rollback? (named person + backup)
  2. How is the previous state restored? (backup ID + exact commands)
  3. How long does it take? (target < 30 min)
  4. What communications go out, to whom, at what point?
Assigned to:
R3Redirect map for SEO-B1 fix — manual
Recommended

After moving the canonical + sitemap to https://, confirm every indexed URL still resolves and 301s cleanly. Use Screaming Frog (free up to 500 URLs) or curl -LI on the top-20 pages from Search Console.

Assigned to:
G1TLS certificate is valid and auto-renewing
Already Good

HTTPS terminates cleanly, HSTS preload set, no certificate-chain errors on scan. The origin (nginx) appears to be using Let's Encrypt or equivalent — verify renewal is scheduled (usually handled by cPanel AutoSSL or certbot cron).

Assigned to:
G2Search Console verification token in HTML
Already Good

Yoast SEO is injecting a Google Site Verification meta tag; the property is claimed in GSC. Ensure the current engagement owner has access — request transfer if not.

Assigned to:
Saved