Methodology

Standards & Methodology

Every check WebAuditFix runs is grounded in a published standard — an EU directive, a GDPR article, an OWASP Top 10 category, an IETF RFC, a W3C / WAI specification, the European Accessibility Act's underlying WCAG conformance criteria, or Google's documented Search Central guidance. We don't invent rules; we test for compliance with the ones that already exist. The full check-to-article mapping is at the bottom for auditors who want to verify line-by-line.

Security 17 checks

Our security checks map to the OWASP Top 10 (2021) and the IETF / W3C transport- and content-security specifications. They cover HTTP-response hygiene observable from the public surface; they are not a substitute for penetration testing or a code-level audit.

GDPR / Privacy 10 scored + 1 informational

Our GDPR checks reference the operative articles of the EU General Data Protection Regulation and the ePrivacy Directive, plus the EDPB's published guidance on consent — the consolidated standard for "what a compliant cookie banner actually looks like." We're transparent about what HTML alone can verify (presence of a consent platform) and what it cannot (runtime tag-blocking) — see gdpr.consent_layer_verified.

  • Regulation (EU) 2016/679 (GDPR) — operative articles we cite: Art. 5(1)(e), Art. 7, Art. 13, Art. 14, Art. 28(3), Art. 32. eur-lex.europa.eu/eli/reg/2016/679/oj
  • Directive 2002/58/EC (ePrivacy Directive), as transposed in Ireland by S.I. No. 336/2011. eur-lex.europa.eu/eli/dir/2002/58/oj
  • EDPB Guidelines 03/2022 on Deceptive Design Patterns in Social Media Platform Interfaces and EDPB cookie-banner guidance (2023) — sets the "Reject must be as easy as Accept" baseline. edpb.europa.eu
  • Irish ePrivacy Regulations 2011 (S.I. No. 336/2011) — domestic implementation of the ePrivacy Directive that applies to our buyers operating in Ireland.

NIS2 hygiene 12 checks

The NIS2 Directive (in force across the EU from October 2024) requires "essential" and "important" entities to take "appropriate and proportionate" technical, operational, and organisational measures. Article 21(2) enumerates ten measure categories; our checks map to the publicly-observable slices — transport security, header hygiene, vulnerability-disclosure contact, supply-chain (SRI), availability hints.

  • Directive (EU) 2022/2555 (NIS2) — operative sub-paragraphs we cite: Art. 21(2)(a), (d), (f), (j). eur-lex.europa.eu/eli/dir/2022/2555/oj
  • National Cyber Security Bill 2024 (Ireland's transposition of NIS2) — domestic-law layer for Irish buyers.
  • RFC 9116 — security.txt format for the Art. 21(2)(j) vulnerability-handling obligation.

Technical SEO 29 checks

Our technical SEO checks reflect the documented, public guidance that Google Search Central + Bing Webmaster + the W3C / WHATWG publish — not speculation, not "Moz best practices," not paid SEO-tool heuristics. If a check fires here, you'll find a documented Google or W3C standard explaining why.

  • Google Search Central documentation — canonical URLs, sitemap protocol, robots.txt handling, HTTPS as a ranking signal, structured-data guidance. developers.google.com/search/docs
  • RFC 9309 — Robots Exclusion Protocol (the canonical robots.txt spec). datatracker.ietf.org/doc/html/rfc9309
  • Sitemaps.org protocol — sitemap.xml format (Google / Yahoo / Microsoft joint specification, 2008). sitemaps.org
  • schema.org vocabulary — structured-data types and properties. schema.org
  • Open Graph Protocol — original spec (Facebook 2010) + de-facto cross-platform adoption (LinkedIn, X/Twitter Cards, Slack unfurls). ogp.me

AEO / GEO 33 checks (17 AEO + 16 GEO)

AI-search readiness (sometimes called AEO — Answer Engine Optimisation — or GEO — Generative Engine Optimisation) is the newest category here. It tests whether your site is structured in a way that AI assistants (ChatGPT search, Perplexity, Google AI Overviews, Bing Copilot) can confidently cite it. There is no single ratified standard yet; the checks combine emerging community conventions (llms.txt), long-standing structured-data specifications (Schema.org), and content-shape signals derived from how the major AI vendors publicly describe their citation logic. We're explicit on every check about whether it tests a formal spec or an emerging convention.

  • llms.txt — community proposal for a machine-readable index of a site's documentation aimed at LLMs. We test for presence, structure, and discoverability. llmstxt.org
  • schema.org JSON-LD vocabularies — FAQ, HowTo, Article, Speakable, Breadcrumb, Person, Organization. Citation-ready structured data; same vocabulary as the Technical SEO section but tested for AEO-specific patterns (direct-answer extractability, entity disambiguation). schema.org
  • Published vendor guidance — Google Search Central's documentation on AI Overviews + structured data, Microsoft Bing Webmaster's guidance on Copilot citations, and OpenAI's documented crawler / ChatGPT-User docs.
  • Content-shape heuristics — direct-answer paragraphs, definition blocks, content freshness, conversational phrasing, author entity, citable external authority. These are clearly labelled as heuristics, not standards.

WCAG accessibility 18 checks (WCAG 2.1 + 2.2 subset)

Web accessibility is now on the same compliance footing as security and privacy. The European Accessibility Act (Directive (EU) 2019/882) entered application on 28 June 2025 and obliges consumer-facing digital services to meet a WCAG-equivalent baseline; the harmonised European standard EN 301 549 v3.2.1 cites WCAG 2.1 Level AA directly, which is the binding legal floor. WCAG 2.2 (published October 2023) adds nine new Success Criteria on top — most need rendered- DOM testing, but three are meaningfully checkable from static HTML and we cover those: SC 3.2.6 Findable Help (A), SC 2.5.8 Target Size (AA), SC 3.3.8 Accessible Authentication (A). Every finding cites the SC number (e.g. "WCAG 1.1.1 A", "WCAG 2.5.8 AA — added in 2.2") so you can match it to a published recommendation rather than our interpretation of it.

Microenterprise exemption (EAA Art. 4(5)): businesses with fewer than 10 employees AND annual turnover (or balance sheet) under €2m that provide services are exempt from the EAA's accessibility obligations. If that's you, the WCAG audit is informational — useful for the wider audience it lets in, but not legally required.

  • W3C WCAG 2.1 — Web Content Accessibility Guidelines, the canonical accessibility standard cited by EN 301 549 + the EAA. Our checks cover A and AA criteria verifiable from static HTML (image alt text, language declaration, heading hierarchy, form labels, ARIA landmarks, skip-nav, semantic structure, link/button semantics). w3.org/TR/WCAG21
  • W3C WCAG 2.2 — published October 2023; adds nine new Success Criteria (focus visibility, dragging gestures, target size, accessible authentication, findable help, redundant entry). Most need a rendered DOM to test; we cover the three verifiable from static HTML (SC 3.2.6, 2.5.8, 3.3.8). Note: WCAG 2.2 also removes SC 4.1.1 Parsing — modern HTML parsers handle malformed markup, so that check no longer adds accessibility value. w3.org/TR/WCAG22
  • W3C WAI-ARIA 1.2 — accessibility-tree contract for dynamic UI. We test for valid landmark roles and well-formed ARIA usage. w3.org/TR/wai-aria-1.2
  • EN 301 549 v3.2.1 — the European harmonised accessibility standard for ICT products and services. References WCAG 2.1 Level AA verbatim for web content. etsi.org/deliver/etsi_en/301500_301599/301549
  • Directive (EU) 2019/882 (European Accessibility Act) — in application from 28 June 2025; the binding instrument that makes WCAG conformance a legal requirement for consumer digital services across the EU. eur-lex.europa.eu/eli/dir/2019/882/oj
  • Honest limitations — automated HTML-only tooling (anything that runs without rendering JS + interacting with the page) can cover roughly 30–40% of WCAG SCs. We are deliberately explicit on every check about whether we test statically (alt text, language, headings) or only inline-style signals (colour contrast on inline styles, focus indicators on :focus rules). Real-user-flow testing remains a manual step.
Full check-to-article mapping (120 rows — every check we run, every standard it cites)
Check ID Check References
Security
security.cache_control_homepage Cache-Control on the homepage OWASP A04
security.cookie_flags Cookie Secure / HttpOnly / SameSite GDPR Art. 32 OWASP A07 RFC 6265
security.corp_coop_coep Cross-Origin policies (COOP / COEP / CORP) OWASP A05
security.cors_wildcard CORS Access-Control-Allow-Origin not wildcard OWASP A05
security.csp Content-Security-Policy present NIS2 Art. 21(2)(a) OWASP A05
security.csp_quality CSP quality (no unsafe-inline / wildcards) NIS2 Art. 21(2)(a) OWASP A05
security.hsts Strict-Transport-Security NIS2 Art. 21(2)(a) OWASP A02 RFC 6797
security.hsts_preload HSTS preload eligibility NIS2 Art. 21(2)(a) OWASP A02
security.https_enforced HTTPS enforced (HTTP → HTTPS redirect) NIS2 Art. 21(2)(a) OWASP A02
security.mixed_content Mixed-content avoidance OWASP A02
security.permissions_policy Permissions-Policy OWASP A05
security.referrer_policy Referrer-Policy OWASP A04
security.security_txt /.well-known/security.txt NIS2 Art. 21(2)(j) RFC 9116
security.server_header Server header information disclosure OWASP A05
security.x_content_type X-Content-Type-Options nosniff OWASP A05
security.x_frame_options X-Frame-Options / frame-ancestors OWASP A05 RFC 7034
security.x_powered_by X-Powered-By absent / generic OWASP A05
GDPR / Privacy
gdpr.analytics_consent_gated Analytics gated behind consent GDPR Art. 7
gdpr.consent_layer_verified Cookie consent — runtime verification (informational) GDPR Art. 7 ePrivacy Directive
gdpr.contact_email_exposed Contact email — role addresses only GDPR Art. 14
gdpr.cookie_consent Consent management platform detected GDPR Art. 7 ePrivacy Directive
gdpr.cookie_policy Cookie policy linked GDPR Art. 13 ePrivacy Directive
gdpr.data_controller Data controller identified GDPR Art. 13(1)(a)
gdpr.dpa_link Data processing addendum referenced GDPR Art. 28(3)
gdpr.forms_notice Form privacy notice present GDPR Art. 13
gdpr.privacy_policy Privacy policy linked GDPR Art. 13 + Art. 14
gdpr.retention Retention statement present GDPR Art. 5(1)(e)
gdpr.rights_mentioned Data-subject rights mentioned GDPR Art. 13(2)(b)
NIS2 hygiene
nis2.contact_page Contact / vulnerability-report page reachable NIS2 Art. 21(2)(j)
nis2.csp Content-Security-Policy (NIS2 technical measure) NIS2 Art. 21(2)(a)
nis2.hsts Strict-Transport-Security (NIS2 technical measure) NIS2 Art. 21(2)(a)
nis2.https_enforced HTTPS enforced (NIS2 transport security) NIS2 Art. 21(2)(a)
nis2.privacy_policy Privacy policy (NIS2 information sharing) GDPR Art. 13 NIS2 Art. 21(2)(f)
nis2.referrer_policy Referrer-Policy (NIS2 technical measure) NIS2 Art. 21(2)(a)
nis2.security_txt Vulnerability disclosure contact (security.txt) NIS2 Art. 21(2)(j) RFC 9116
nis2.security_txt_expires security.txt Expires field fresh NIS2 Art. 21(2)(j) RFC 9116
nis2.server_disclosure Server-version disclosure (NIS2 information minimisation) NIS2 Art. 21(2)(a)
nis2.sitemap Sitemap.xml (availability signal) NIS2 Art. 21(2)(a)
nis2.subresource_integrity Subresource Integrity (NIS2 supply-chain) NIS2 Art. 21(2)(d)
nis2.x_content_type X-Content-Type-Options (NIS2 technical measure) NIS2 Art. 21(2)(a)
Technical SEO
tech.anchor_text_descriptive Internal anchor text descriptive (not 'click here')
tech.breadcrumb_visible Visible breadcrumb matches BreadcrumbList schema
tech.canonical <link rel=canonical> present
tech.cls Cumulative Layout Shift <=0.1
tech.compression Gzip or Brotli compression enabled
tech.https_for_indexing HTTPS as Google ranking signal
tech.image_alt_text All <img> tags have alt attribute
tech.image_opportunities Images using modern formats + sizing
tech.inp Interaction to Next Paint <=200ms
tech.lcp Largest Contentful Paint <=2.5s
tech.meta_description <meta name=description> present
tech.mobile_friendly Mobile rendering: viewport + no fixed widths
tech.no_interstitials No intrusive mobile interstitials
tech.noindex_check Indexing not blocked by robots / X-Robots-Tag
tech.og_tags Open Graph tags present
tech.pagination_handled Pagination uses self-canonical, no rel=next/prev
tech.redirect_chains <=1 redirect to reach homepage
tech.render_blocking_css <=2 blocking stylesheets in <head>
tech.render_blocking_js No render-blocking <script> in <head>
tech.robots_present robots.txt reachable
tech.robots_valid robots.txt syntactically valid
tech.schema_org schema.org JSON-LD present
tech.schema_org_type schema.org primary type valid
tech.sitemap sitemap.xml reachable
tech.sitemap_in_robots Sitemap URL declared in robots.txt
tech.title_length <title> 50-60 chars (SERP sweet spot)
tech.ttfb_real Server response time (TTFB) <=800ms
tech.url_structure URL lowercase, hyphens, short, no special chars
tech.viewport_strict Viewport meta strict (no user-scalable=no)
AEO (answer-engine readiness)
aeo.about_page /about page with Organization schema
aeo.answer_conciseness >=1 paragraph in the 40-60 word snippet range
aeo.article_schema Article / BlogPosting schema with author + datePublished
aeo.author_entity Author / Organisation identified (schema or byline)
aeo.breadcrumb_schema BreadcrumbList schema for site hierarchy
aeo.content_freshness dateModified or visible 'Last updated' label
aeo.conversational_phrasing Second-person / conversational language present
aeo.definition_blocks Definition blocks (<dfn> or 'X is ...') in early content
aeo.direct_answer Opening 100 words contain a direct answer
aeo.external_authority_links Outbound links to authoritative sources
aeo.heading_hierarchy Single H1; no skipped heading levels (H1->H2->H3)
aeo.howto_schema HowTo schema present for step-by-step content
aeo.meta_tags Title / description / canonical / OG / lang / viewport
aeo.qa_headings H2/H3 headings phrased as questions (>=3)
aeo.schema_markup schema.org JSON-LD: Organization + FAQPage + Service
aeo.schema_validity JSON-LD blocks parse without errors
aeo.speakable_schema Speakable schema for voice-engine extraction
GEO (generative-engine readiness)
geo.ai_crawlers_allowed AI crawlers (GPTBot / ClaudeBot / etc.) not blocked
geo.author_credentials Author credentials explicit (role / years / cert)
geo.consistent_brand_name Brand name consistent: title / H1 / schema
geo.llms_txt /llms.txt present (llmstxt.org convention)
geo.named_sources Named external sources / citations
geo.no_hidden_content Key content not behind accordions / tabs
geo.no_js_required Core content in raw HTML (no JS required)
geo.original_data Original data / statistics present
geo.paragraph_length Paragraphs 40-80 words (no >120)
geo.prose_list_balance Lists <=60% of total content
geo.quotable_summary Quotable summary block (50-100 words near top)
geo.sameas_profiles Organization schema sameAs links (>=2)
geo.section_summaries H2 sections end with a tight summary (long pages)
geo.sitemap_freshness Sitemap <lastmod> within 90 days
geo.specific_statistics Specific numbers vs vague qualifiers
geo.topic_sentences Paragraph openers are direct topic statements
WCAG accessibility
acc.accessible_auth Accessible authentication (WCAG 3.3.8 A - added in 2.2)
acc.aria_landmarks ARIA landmark regions (WCAG 1.3.6 AAA)
acc.aria_validity ARIA attribute validity (WCAG 4.1.2 A)
acc.colour_contrast Colour contrast - inline (WCAG 1.4.3 AA)
acc.findable_help Findable help (WCAG 3.2.6 A - added in 2.2)
acc.focus_indicator Focus indicator (WCAG 2.4.7 AA)
acc.form_labels Form label associations (WCAG 1.3.1, 3.3.2 A)
acc.heading_hierarchy Heading hierarchy (WCAG 1.3.1, 2.4.6 A/AA)
acc.img_alt Image alt text (WCAG 1.1.1 A)
acc.interactive_semantics Interactive element semantics (WCAG 4.1.2 A)
acc.lang_declaration Language declaration (WCAG 3.1.1 A)
acc.media_transcripts Media captions & transcripts (WCAG 1.2.2, 1.2.3 A)
acc.semantic_structure Semantic HTML structure (WCAG 1.3.1 A)
acc.skip_nav Skip navigation link (WCAG 2.4.1 A)
acc.table_headers Table header cells (WCAG 1.3.1 A)
acc.target_size_aa Target size - inline (WCAG 2.5.8 AA - added in 2.2)
acc.touch_targets Touch target size - inline (WCAG 2.5.5 AAA)
acc.viewport_meta Viewport configuration (WCAG 1.4.4 AA)
In practice

What this means in practice

A clean WebAuditFix report is necessary-but-not-sufficient evidence of compliance. Our checks cover the publicly-observable surface — response headers, on-page markup, well-known files. They cannot tell you whether your offline policies are followed, whether your incident-response runbook works, whether your processors have a valid DPA on file, or whether you actually trained your staff. Those are the next layer; an automated scanner cannot reach them.

Every finding in the Premium PDF carries the article / RFC / OWASP category it maps to (see your most recent report if you have one) so an auditor reviewing your posture can verify our methodology against the same source documents we link above.