webauditlabs
← Geen developer? Bekijk het overzicht voor website-eigenaren en bureaus

Lokale website-audits vanuit uw terminal, CI of coding-agent.

De webauditlabs CLI draait Chromium op uw machine en schrijft gestructureerde bevindingen met screenshots. Geen account, geen API-sleutel. Dezelfde engine en hetzelfde resultaatformaat vormen de basis van webauditlabs Cloud.

Installeren$ npx webqa-platform audit http://localhost:5173

Eén run op een meertalige demosite

Onbewerkte CLI-uitvoer van de Nordhaus-demowinkel (Nederlands, Engels, Duits) met vijf ingebouwde fouten. Gemaakt met website/scripts/capture-demo.mjs.

$ webqa run webqa.json --allow-private
webqa issues found: 6 finding(s) on 6 page(s)
  warning http     [all] /en/
          1 resource failed to load.
  warning clipping [all] /de/
          The a "In den Warenkorb legen" does not fit; its text is cut off.
  warning overflow [mobile] /de/
          1 control sticks out of the viewport and is partly unreachable.
  error   overflow [mobile] /de/
          The page is 213px wider than the 390px viewport and scrolls sideways.
  warning links    [all] /nl/contact.html
          1 link on this "nl" page leads to locale "en".
  error   lang     [all] /en/products.html
          The page declares lang="nl" but belongs to locale "en".
Evidence: .webqa/runs/2026-10-24T14-28-38-216Z
Mobiele screenshot van de Duitse Nordhaus-homepage. De winkelknop loopt over de rechterrand van het scherm; het gebied is rood omlijnd.Bewijs: /de/ · mobiel 390px
Echte uitvoer van de webauditlabs CLI op de Nordhaus-demowinkel.

Wat de CLI detecteert

Veertien regelgebaseerde controles (toetsenbord is optioneel) met vaste identifiers (check/code). Dezelfde identifiers worden gebruikt door de CLI, webauditlabs Cloud, de REST API en MCP.

GebiedRegels
Runtime en netwerkhttp/http_statushttp/resource_failedhttp/api_failedhttp/console_errorhttp/third_party_failed
Linkslinks/link_deadlinks/link_server_errorlinks/link_redirect_looplinks/link_redirectslinks/anchor_brokenlinks/link_emptylinks/link_wrong_locale
Talen en vertalingenlang/lang_missinglang/lang_mismatchlang/translation_missinglang/hreflang_wrong_localelang/hreflang_brokenlang/hreflang_redirectlang/hreflang_not_reciprocal
Layoutoverflow/horizontal_overflowoverflow/control_offscreenclipping/text_clipped
Mediamedia/image_brokenmedia/image_not_loadedmedia/image_alt_missing
Inhoudcontent/placeholder_textcontent/template_leakcontent/heading_emptycontent/content_empty
Formulierenforms/field_unlabeledforms/button_unnamedforms/link_button_no_hrefforms/form_insecure_actionforms/form_offsite_action
SEOseo/title_missingseo/title_too_longseo/meta_description_missingseo/canonical_missingseo/canonical_offsiteseo/canonical_wrong_localeseo/heading_level_skippedseo/noindexseo/canonical_target_brokenseo/canonical_target_redirectsseo/structured_data_invalidseo/og_image_missingseo/og_image_brokenseo/robots_missingseo/robots_blocks_pageseo/robots_no_sitemapseo/soft_404seo/favicon_missingseo/sitemap_url_brokenseo/sitemap_url_redirectsseo/sitemap_url_noindexseo/sitemap_url_canonical_elsewhere
Toegankelijkheida11y/a11y_<axe rule> (ernstig en kritiek, axe-core)
Consistentieconsistency/price_mismatchconsistency/date_expiredconsistency/duplicate_text
Privacyprivacy/tracker_before_consentprivacy/tracker_after_rejectprivacy/tracker_without_bannerprivacy/consent_no_reject
Beveiligingsecurity/mixed_contentsecurity/http_not_redirectedsecurity/tls_expiringsecurity/hsts_missingsecurity/security_headers_missing
Toetsenbord (standaard uit)keyboard/focus_not_visiblekeyboard/focus_hidden_elementkeyboard/focus_trapkeyboard/skip_link_missing
Runtime en netwerkhttp/http_statushttp/resource_failedhttp/api_failedhttp/console_error
Linkslinks/link_deadlinks/link_server_errorlinks/link_redirect_looplinks/link_redirectslinks/anchor_brokenlinks/link_emptylinks/link_wrong_localelinks/contact_link_invalid
Talen en vertalingenlang/lang_missinglang/lang_mismatchlang/translation_missinglang/hreflang_wrong_localelang/hreflang_brokenlang/hreflang_redirectlang/hreflang_not_reciprocallang/untranslated_ui_text
Layoutoverflow/horizontal_overflowoverflow/control_offscreenoverflow/element_overlapoverflow/text_too_smallclipping/text_clipped
Mediamedia/image_brokenmedia/image_not_loadedmedia/image_alt_missing
Inhoudcontent/placeholder_textcontent/template_leakcontent/heading_emptycontent/content_emptycontent/copyright_outdated
Formulierenforms/field_unlabeledforms/button_unnamedforms/link_button_no_hrefforms/form_insecure_actionforms/form_offsite_actionforms/autocomplete_missingforms/input_type_mismatch
SEOseo/title_missingseo/title_too_longseo/meta_description_missingseo/canonical_missingseo/canonical_offsiteseo/canonical_wrong_localeseo/heading_level_skippedseo/noindex
Toegankelijkheida11y/a11y_<axe rule> (ernstig en kritiek, axe-core)
Consistentieconsistency/price_mismatchconsistency/date_expiredconsistency/duplicate_textconsistency/contact_mismatch
AI-stap (--ai, optioneel)Onvertaalde tekst en uitleg in gewone taal, gemarkeerd ter controle

Commandoreferentie

npx webqa-platform audit <url>

Detectie en controles in één commando, met een JSON- en HTML-rapport.

webqa init <url>

Detecteert taalversies via hreflang, het taalkeuzemenu of <html lang> en schrijft een aanpasbaar webqa.json.

webqa run <spec | url>

Legt pagina’s vast op elke ingestelde viewport (standaard desktop en mobiel), voert de controles uit en schrijft result.json en screenshots naar .webqa/runs/.

--json

Schrijft result.json naar stdout in plaats van de samenvatting, voor scripts en agents.

--checks a,b

Voert alleen de genoemde controles uit, bijvoorbeeld --checks links,seo.

--ai

Voegt de optionele AI-stap toe: onvertaalde tekst en uitleg in gewone taal, binnen een tokenbudget.

--allow-private

Staat localhost en privénetwerkadressen toe, voor lokale en stagingsites.

--mode remote-cdp

Gebruikt uw eigen browser-endpoint via het Chrome DevTools Protocol.

webqa mcp

Start de lokale MCP-server voor Claude Code, Cursor en andere MCP-clients.

webqa login · project link · --sync

Verbindt met webauditlabs Cloud en uploadt een bestaand lokaal resultaat.

  • Alleen-lezen: geen formulieren of niet-GET-verzoeken
  • Beperkt tot de hosts uit de configuratie
  • Privéadressen geblokkeerd tenzij --allow-private
  • Toolfouten worden apart van siteproblemen gemeld

Eén engine, drie manieren om de browser te draaien.

localChromium op uw machine. Geen account.
remote-cdpUw eigen compatibele browser-endpoint. Geen account.
cloudBeheerde browsers via de webauditlabs-backend. Inloggegevens van de browserprovider verlaten de backend nooit.

Uitvoer van een run

Elke run schrijft een resultaatbestand dat valideert tegen het gepubliceerde v1-schema, een screenshot van elke volledige pagina per viewport en een geannoteerde kopie voor pagina’s met bevindingen. Hetzelfde bevindingenformaat wordt gebruikt door de cloud, de API en MCP.

.webqa/runs/2026-10-24T14-28-38-216Z/
├── result.json                    # result.v1
├── p03-desktop.png
├── p03-mobile.png
├── p03-mobile.annotated.png       # problem elements outlined
└── …
result.json · f4result.v1
{
  "id": "f4",
  "check": "overflow",
  "code": "horizontal_overflow",
  "severity": "error",
  "url": "http://127.0.0.1:8090/de/",
  "locale": "de",
  "viewport": "mobile",
  "message": "The page is 213px wider than the 390px viewport and scrolls sideways.",
  "provenance": "deterministic",
  "evidence": {
    "expected": "390px",
    "actual": "603px",
    "elements": [
      {
        "tag": "div",
        "selector": "body > section.hero:nth-of-type(1) > div.wrap > div",
        "rect": {
          "x": 18,
          "y": 599,
          "width": 585,
          "height": 415
        },
        "text": "HERBSTKOLLEKTION 2026 Handgemacht für jeden Tag Keramik, Leuchten und Textilien aus kleinen Werkstätten in Skandinavien "
      },
      {
        "tag": "img",
        "selector": "body > section.hero:nth-of-type(1) > div.wrap > img",
        "rect": {
          "x": 18,
          "y": 132,
          "width": 585,
          "height": 439
        }
      }
    ]
  }
}

Een controlestap die uw coding-agent zelf uitvoert.

Agents hebben een deterministische manier nodig om hun werk te controleren: audit draaien, gestructureerde bevindingen lezen, oplossen en opnieuw draaien.

  • Gestructureerde bevindingen

    Geversioneerde JSON met regel, ernst, pagina, viewport, elementen en pad naar de screenshot.

  • Controleren na een fix

    Exitcode 0 betekent dat er geen bevindingen meer zijn; 1 betekent dat er nog problemen zijn.

  • Lokale MCP-server

    webqa mcp via stdio voor Claude Code, Cursor en andere MCP-clients. Geen account.

  • REST API en remote MCP

    Cloudprojecten, runs en bevindingen voor agents en scripts, in elk cloudabonnement.

MCP-configuratie
{
  "mcpServers": {
    "webqa": { "command": "npx", "args": ["webqa-platform", "mcp"] }
  }
}

Lokale resultaten synchroniseren zonder opnieuw te scannen.

Optioneel. Synchronisatie uploadt result.json en de screenshots van een run die u al heeft gedaan naar een gekoppeld cloudproject. De run wordt opgeslagen met uitvoermodus local.

  1. localwebqa audit

    Draait lokaal in Chromium.

  2. localresult.json

    Bevindingen en screenshots op schijf.

  3. cloudwebqa audit --sync

    Uploadt het bestaande resultaat.

  4. cloudwebauditlabs Cloud

    Historie, inbox en teamtoegang.

01

Configuratiebestand

webqa init schrijft een webqa.json voor versiebeheer: talen, pagina’s of een sitemap met paginalimiet, viewports, controles en timeouts.

{
  "version": 1,
  "name": "www.example.nl",
  "locales": [
    { "code": "nl", "url": "https://www.example.nl/nl/" },
    { "code": "de", "url": "https://www.example.nl/de/" }
  ],
  "pages": { "sitemap": "https://www.example.nl/sitemap.xml", "maxPages": 50 },
  "viewports": [{ "name": "mobile", "width": 390, "height": 844 }],
  "checks": ["http", "lang", "overflow", "links", "clipping"],
  "timeouts": { "pageMs": 30000, "runMs": 600000 }
}
02

Exitcodes

Exitcodes maken onderscheid tussen siteproblemen en tool- of runtimefouten.

0passedGeen bevindingen
1issues_foundEen of meer bevindingen
2invalid inputOngeldige configuratie of argumenten
3execution_errorTool- of browserfout, geen siteprobleem
4timed_outRun heeft de tijdslimiet overschreden
03

CI-integratie

Laat een build falen bij bevindingen en bewaar de runmap als build-artifact.

# .github/workflows/webqa.yml
- run: npx playwright install --with-deps chromium
- run: npx webqa-platform audit https://staging.example.com --json > webqa-result.json
- uses: actions/upload-artifact@v4
  if: failure()
  with:
    name: webqa-evidence
    path: .webqa/runs/