Aller au contenu principal
Jahia Store
FR

Page Quality Audit

community
Télécharger 1.6.0

Informations

Identifiant du module
page-audit
Identifiant de groupe
org.jahia.community.modules
Statut
community
Catégorie
Content Features, SEO & GEO, Platform, Pre-built templates and components
Auteur
Stephane Monier
Site web du développeur
http://www.jahia.com
Nécessite Jahia
8.2.0.0
Mis à jour
2026-09-15
Source
scm:git:git@github.com:Jahia/page-audit.git
Étiquettes
  • audit
  • accessibility
  • wcag
  • seo
  • quality
  • web-vitals
  • readability
  • link-checker
  • page-builder

Page Quality Audit adds a Page audit action to the Page Builder and jContent top menu bar. One click opens a side drawer that loads the current page in a live preview and audits it across eight tabs. Every tab leads with clear, severity-ranked recommendations written for content editors: what is wrong, why it matters, and how to fix it. Issues can be highlighted directly in the preview, results are cached per page with a "last audit" timestamp - and a notice tells you when the page changed since the audit - the preview collapses to give results the full height, and the whole interface ships in English and French.

When an LLM provider is configured, the audit does not only find problems - it proposes the fix. Ready-to-paste suggestions appear right next to the findings they address: meta descriptions, titles, keywords, heading rewrites and call-to-action labels in the SEO tab; alternative text for images without alt in the Accessibility tab; plain-language rewrites of the hardest sentences in the Readability tab; and a suggested correction on every wording issue of the AI review. Each suggestion has a Copy button, is written in the page's language because it will be published, and is generated only when you ask - nothing is ever written to the repository automatically.

Accessibility runs the full axe-core WCAG A / AA / AAA rule set with per-level scorecards. It is transparent about what automation can and cannot do: it shows the engine version and rules executed, lists the borderline cases that need human review, and includes a guided manual checklist for the WCAG criteria no tool can verify. With AI, every image without alt gets a suggested alternative text (with the picture itself analysed on vision-capable providers) and purely decorative images are flagged for an empty alt.

SEO checks title and meta description lengths, accidental noindex directives, canonical URLs, structured data (JSON-LD), language attributes, image alt coverage and generic link labels ("Read more", "Click here"), and renders a social sharing preview card from the page's Open Graph tags. With AI, it proposes title tags and meta descriptions with live character counts, og:title / og:description for the social card, a focus keyword with supporting terms, heading rewrites, and specific labels for every generic call to action.

Web Vitals measures TTFB, load milestones, layout shift and estimated LCP in the editor's browser, with diagnostics editors can act on: page weight, request count, oversized images and images without dimensions.

Readability scores the text with Flesch (English) or Kandel-Moles (French) formulas and checks sentence length, paragraph density and heading structure. With AI, the hardest sentences are rewritten in plain language - same facts, shorter sentences, common words - with before/after word counts.

Ecodesign runs page-level checks against the French RGESN 2024 eco-design referential (Frontend / Contents / UX / Architecture families): page weight, HTTP requests, DOM size, lazy-loading of below-the-fold images, web-font count and format, autoplay media, legacy vs modern image formats, oversized images and third-party origins - plus a manual checklist for the whole-service criteria (hosting, backend, governance) no page tool can judge. Explicitly not an RGESN conformity score.

Links verifies every internal link with the editor's session and lists broken ones, and flags hardcoded URLs, mixed content and unsafe new-tab links. Only read-only content URLs are ever requested; login, logout and action URLs are never fetched.

Jahia does what no generic web tool can: it queries the repository to find unpublished content blocks visitors cannot see, content missing translations in the site's languages, raw translation keys visible on the page, and leftover placeholder text.

AI review (optional) sends the page text and the audit findings to the LLM of your choice - Anthropic, OpenAI or DeepSeek - and returns an overall assessment plus up to 15 prioritized recommendations across dimensions no automated check covers: proofreading, factual accuracy, consistency, calls to action, localization quality, legal risk and eco-design. Recommendations are written in the editor's interface language, quoted wording is highlightable in the preview and comes with a ready-to-copy fix, and every review shows its token consumption and estimated cost. Configured server-side by an administrator - the API key never reaches the browser, the prompt is built on the server so the endpoint cannot be reused as a general-purpose LLM proxy, and each call requires an authenticated editor with read access to the page, is bound to the same origin and rate-limited per user. Disabled until configured.

The audit runs on the default workspace, so editors check exactly what they are editing before publishing. Editor-only tooling (such as the jExperience persona preview) is automatically excluded from results. By default no external services are called and no data leaves the platform; the optional AI features are the single exception - they send page content (and, for alt text on vision-capable providers, downscaled images) to the LLM provider your administrator explicitly configures.

Requires Jahia 8.2+. Enable the module on each site where the action should appear.

Captures d'écran

Versions

1.6.0

New Features

  • Upgraded the accessibility engine to axe-core 4.13. The Accessibility tab picks up the new rule set automatically, because the audit runs by WCAG tag rather than a hardcoded rule list. Editors will notice that sectionheader and sectionfooter roles are recognised, deprecated ARIA attributes are now reported as "needs review" instead of ignored, whitespace alt on presentational images is accepted, and several colour-contrast false positives caused by stacking contexts are gone. A page can therefore show a different violation count than it did on 4.12 without its markup having changed.

Bug Fixes

  • Moved the module to the org.jahia.community.modules groupId. The bundle name, the Java package and the OSGi configuration file name are unchanged, so AI provider settings and per-site activation survive the move.

    Upgrading an instance that already runs an older release is not a drop-in install: Jahia identifies a module by its Id, and refuses to parse a bundle whose Id is already registered under a different groupId, leaving it stuck in STARTING with its resources unavailable. Uninstall every installed version of Page Quality Audit first, then install the new jar. The module defines no content types, so a full uninstall does not touch site content.

  • Held back dependency updates that would break the jContent host. The packages this bundle shares with jContent as Module Federation singletons (i18next, react-i18next, @jahia/data-helper, @jahia/ui-extender, @jahia/moonstone) now have their majors pinned, because Webpack elects the highest version among providers: a newer major shipped here would replace the host's copy for the whole back-office UI, and the build compiles either way so continuous integration cannot catch it. Also refreshed the build tooling (webpack 5.110.3, frontend-maven-plugin 2.0.2).

1.5.0 - 2026-09-07

AI moves from reviewing to assisting: suggestions appear next to the findings they address, in the page language, ready to copy.

Added

  • AI suggestions in the SEO tab (when a provider is configured): ready-to-paste <title> alternatives, meta descriptions with live character counts, a focus keyword plus supporting terms, and heading rewrites (current → suggested with a one-line reason, highlightable in the preview) - each with a Copy button. Suggestions are grounded in the page text and written in the page's language since they are published content; only the reasons follow the editor's UI language. Display-only: nothing is written to the repository. Served by the existing hardened endpoint as a second server-defined task (task: seo) with its own prompt and whitelisting parser; cached with the audit like the AI review. Also proposes og:title / og:description for the social sharing card.
  • AI alt text in the Accessibility tab (when a provider is configured and the page has images without alt): per image, a thumbnail, a suggested alt (≤125 chars, page language, Copy, highlight) and a one-line reason; purely decorative images are flagged for an empty alt. Vision-capable providers (Anthropic, OpenAI) receive a downscaled copy of each picture; DeepSeek is text-only, so suggestions there are inferred from file names and context and the UI says so. Third server-defined task (task: alt), 8 images per call.
  • Suggested fixes in the AI review: recommendations about specific wording now carry a ready-to-copy correction in the page language (typo fixed, stronger CTA label, consistent term…).
  • Call-to-action labels in the SEO assist: generic link/button labels ("Read more", "Click here", "Submit"… detected after stripping decorations like "Read More +") get 2-3 specific alternatives grounded in the CTA's surrounding text, with Copy and highlight. The SEO generic-anchor check now uses the same normalized matching and covers buttons.
  • AI plain-language rewrites in the Readability tab (when a provider is configured and the page has long sentences): up to 6 of the hardest paragraph sentences are rewritten in the page language - same facts, shorter sentences, common words - with before/after word counts, highlight of the original, Copy and a reason. Fourth server-defined task (task: simplify). Inline scripts inside content blocks are excluded from the candidates.

Changed

  • Results cache schema bumped to 3 (the SEO result gained weakCtas); older cached audits are discarded and re-run on the next opening.

Fixed

  • The AI review prompt gave the page language as a bare ISO code while the report language was spelled out, so a French-UI editor auditing an English page could be told to translate the page into French. Both languages are now named explicitly, with the rule that content in the page language is correct by definition.
  • DeepSeek V4 models reason by default, which consumed the whole AI_MAX_TOKENS budget (empty answer, 502) and made the visible answer ignore the JSON-only instruction. Reasoning is now disabled on DeepSeek requests, and an empty reasoning-only answer produces an explicit server-side diagnostic instead of "model did not return JSON".

1.4.0 - 2026-07-09

Added

  • Ecodesign (RGESN) tab: page-level checks against the French RGESN 2024 eco-design referential (Frontend / Contents / UX / Architecture families) - page weight, HTTP requests, DOM size, lazy-loading, web fonts, autoplay media, legacy image formats, oversized images, missing dimensions, third-party origins - each with an actionable recommendation, plus a manual checklist for the whole-service criteria (hosting, backend, governance) that a single page cannot assess. It is explicit in-UI that this is not an RGESN conformity score. Reuses the Web Vitals resource data.
  • AI review gains an ecodesign category so the LLM can flag digital-sustainability issues in prose.

Fixed

  • The localStorage results cache now carries a schema version; entries written by an older module version are discarded instead of restored, preventing a crash when the cached shape lacks a newly added analyzer key. Tab badges and dispatch are null-guarded as defense-in-depth.

1.3.0 - 2026-07-09

Security

  • Hardened the AI review endpoint against abuse of the operator's LLM key (fixes #16, PR #17):
    • Authorization - the review is bound to a page the caller can read (jcr:read); unreadable or missing paths are rejected with 403.
    • Rate limiting - per-user sliding window of 30 reviews / 10 minutes (429 beyond that), protecting the shared provider quota and cost.
    • Unauthenticated disclosure - the status GET now requires a non-guest user, so provider/model/enabled state is no longer readable anonymously.
    • CSRF - the POST requires Content-Type: application/json (415 otherwise) and rejects cross-origin browser requests via an Origin/Referer host check.
    • Error disclosure - provider/exception detail is logged server-side only; the client receives a generic message.
    • Link checker - only same-origin links on a read-only content-serving allowlist (/cms/render, /cms/file, /files) are verified with the editor's session; every other same-origin link is counted but never fetched, so a planted link cannot trigger a credentialed side-effect request from whoever audits the page.

1.2.0 - 2026-07-09

Fixed

  • AI review recommendations are now written in the editor's jContent UI language rather than the audited page's language (quoted page wording stays verbatim). The prompt states an explicit language name instead of an ISO code for reliable results.

Changed

  • More comfortable reading: base line-height raised to 1.55 across the drawer, with extra spacing in stat lists and recommendation details.

1.1.0 - 2026-07-08

Added

  • AI review tab (optional): sends the page text plus a digest of all audit findings to a configured LLM (Anthropic, OpenAI or DeepSeek) and returns an overall assessment plus up to 15 prioritized recommendations across 11 categories - including dimensions no automated check covers (proofreading, factuality, consistency, conversion, localization quality, legal risk). Exact wording is highlightable in the preview; the footer shows token consumption and estimated cost. Configured via org.jahia.se.modules.pageaudit.cfg.
  • Result caching per page and language in localStorage, with a "last audit" timestamp in the header; reopening the drawer restores instantly.
  • Staleness detection: a cheap repository probe flags when the page changed after the audit, keeping the old report visible as a fix-it checklist.
  • Collapsible page preview for full-height results.

Changed

  • Tab order: Accessibility, SEO, Web Vitals, Readability, Links, Jahia, AI review.
  • Text extraction joins text nodes with spaces (accurate readability counts, no spurious "missing spaces" findings); Jahia's preview title prefix is stripped from SEO title checks.

Fixed

  • Editor/preview tooling (e.g. jExperience persona panel) is excluded from all analyzers; HTTP 4xx/5xx preview renders are refused instead of scored.

1.0.0 - 2026-07-08

Added

  • Initial release. jContent UI extension adding a "Page audit" action that opens a side-drawer auditing the current page across six tabs: Accessibility (axe-core WCAG A/AA/AAA + manual checklist), SEO (with social preview), Web Vitals (lab), Readability (EN/FR), Links (internal verification), and Jahia content health (publication + translation coverage via GraphQL).
  • Every tab leads with severity-ranked, editor-friendly recommendations; results re-runnable and exportable as JSON. Full English + French UI.
  • MIT licensed; GitHub Actions CI and Dependabot with platform guardrails.
Nécessite Jahia 8.2.0.0Mis à jour 2026-09-15