Administration 

Backend user permissions 

Content Quality module 

Grant access in Administration > Backend Users in the backend user group, tab Access Rights, module Content > Content Quality.

The quality panel in Content > Layout is shown to every user who can open the page module. It does not need the module permission.

File list metadata button 

The button is only shown for files that are indexed and for which the user has the editMeta permission. Grant it in the backend user group, tab Mounts and Workspaces, File Operation Permissions.

Page permissions 

All actions respect the backend user's web mounts, page permissions, table permissions and language access:

Action Required permission
See the panel, the module page view and analysis results; analyse a page; check links; AI schema detection Show page
Generate, apply or discard title and meta description fixes; approve or remove the schema Edit page, and modify permission for the pages table
Generate, apply or discard ALT text fixes Edit content on the page, and modify permission for the sys_file_reference table
All pages overview, batch fixes, CSV export Only pages the user may show (or edit, for fixes) are included
File list metadata button editMeta on the file

Applied fixes are written with the TYPO3 DataHandler. Changes appear in the record history, respect workspaces and clear the page cache like a normal edit. For a translated page, the change is written to the translation.

Database tables 

tx_t3contentquality_result 

The latest analysis result per page and language. A new analysis replaces the previous row.

page_uid, language_uid
Page and language of the result.
overall_score, accessibility_score, seo_score, readability_score, schema_score
Scores from 0 to 100.
issues_json
JSON list of issues with category, severity, message and suggestion.
suggestions_json
JSON list of AI suggestions.
metadata_json
Page facts collected during the analysis, for example title, meta description, headings, Flesch score, link check results and schema detection details.
analyzed_at
Unix timestamp of the analysis.
model_used, provider_used
AI model and provider used.

tx_t3contentquality_history 

One row with the scores of every analysis run. Used for the score trend. Rows are never deleted automatically.

tx_t3contentquality_pending_fix 

AI proposals waiting for review. fix_type is title, description or alt_text. For alt_text, target_ref is the UID of the sys_file_reference record. Rows are deleted when they are applied or discarded. If the DataHandler rejects a change (for example missing permissions), the row stays pending.

tx_t3contentquality_schema 

Approved JSON-LD per page and language (schema_type, jsonld_json, approved, approved_at). Every row with approved = 1 is added to the frontend output of its page.

Maintenance 

Remove the history of old analysis runs, for example everything older than one year:

DELETE FROM tx_t3contentquality_history
WHERE analyzed_at < UNIX_TIMESTAMP() - 365 * 86400;
Copied!

Remove all analysis results (pages then show Not analysed yet.):

TRUNCATE tx_t3contentquality_result;
Copied!

Pages are only analysed when an editor starts the analysis. There is no scheduler task or console command for batch analysis in this version.

API keys 

API keys entered in the extension configuration are stored in plain text in config/system/settings.php. Set them from environment variables instead, see Keep API keys out of version control.

Further recommendations:

  • Allow outgoing HTTPS connections only to the provider you use: api.anthropic.com or api.openai.com.
  • Set a spending limit in the provider's dashboard.

Outgoing HTTP requests 

Besides the AI provider, the extension makes these HTTP requests from the web server:

  • During every analysis, a GET request to the frontend URL of the page (timeout 10 seconds) to read the rendered headings. The page must be reachable from the server; otherwise the headings are taken from the database.
  • When Check Links is clicked, HEAD requests to up to 30 links of the page.

The requests use the TYPO3 HTTP client settings in $GLOBALS['TYPO3_CONF_VARS']['HTTP'] (proxy, SSL verification).

Ollama 

The extension connects to the Ollama server set in ollamaUrl (default http://ollama:11434, the host name of an ollama container in a Docker Compose or DDEV setup).

Before each analysis request, the extension checks whether Ollama is reachable. If it is not, the AI part is skipped and a warning is logged.

Pull the configured model on the Ollama server:

ollama pull llama3.2
Copied!

For image descriptions in the file list, pull a model that supports images:

ollama pull llava
Copied!

Logging 

The extension logs through the TYPO3 logging API. Logger names start with Woit.T3ContentQuality.

Level Messages
error AI analysis failed, AI image metadata generation failed, AI text generation failed, Batch fix generation failed for page, Internal link suggestion failed
warning AI analysis skipped: Ollama not reachable, AI fix skipped: no API key configured, AI schema detection failed, AI schema detection skipped: Ollama not reachable, Pending fix rejected by DataHandler, Pending fix skipped: no page record for language
info File metadata updated, Image too large for AI vision

By default TYPO3 writes messages of level warning and higher to var/log/typo3_*.log. To also log info messages of this extension:

config/system/additional.php
$GLOBALS['TYPO3_CONF_VARS']['LOG']['Woit']['T3ContentQuality']['writerConfiguration'] = [
    \Psr\Log\LogLevel::INFO => [
        \TYPO3\CMS\Core\Log\Writer\FileWriter::class => [
            'logFileInfix' => 't3_content_quality',
        ],
    ],
];
Copied!