PHPackages                             enhancely/enhancely-for-typo3 - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. enhancely/enhancely-for-typo3

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

enhancely/enhancely-for-typo3
=============================

Enhancely JSON-LD integration for TYPO3 - AI-generated structured data for SEO

1.4.7(1mo ago)075GPL-2.0-or-laterPHPPHP ^8.2

Since Jan 29Pushed 1mo agoCompare

[ Source](https://github.com/dkd-dobberkau/enhancely-typo3)[ Packagist](https://packagist.org/packages/enhancely/enhancely-for-typo3)[ RSS](/packages/enhancely-enhancely-for-typo3/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (7)Dependencies (10)Versions (19)Used By (0)

Enhancely JSON-LD for TYPO3
===========================

[](#enhancely-json-ld-for-typo3)

AI-generated JSON-LD structured data for improved SEO and LLM visibility.

[![TYPO3](https://camo.githubusercontent.com/ea8d3b7799d61e3ad670eeb7c0b6e5a2e0e84bb8b1b3c8b9dd03047506e0679c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d313325323025374325323031342d6f72616e67652e737667)](https://typo3.org/)[![PHP](https://camo.githubusercontent.com/0f16581d1180dbfd4c0e13166ec1267d4ad2f2fab8281ea6d6b284cf5c65d921/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322532422d626c75652e737667)](https://php.net/)[![License](https://camo.githubusercontent.com/d865d3f061b5bdb93940bfc940d9e431166c9a28b20e625622a9d77854d1e3c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d47504c2d2d322e302d2d6f722d2d6c617465722d677265656e2e737667)](LICENSE)

What is Enhancely?
------------------

[](#what-is-enhancely)

Enhancely automatically generates Schema.org JSON-LD structured data for your web pages using AI. This helps search engines and AI platforms better understand your content, improving SEO and visibility.

Installation
------------

[](#installation)

### Composer (recommended)

[](#composer-recommended)

```
composer require enhancely/enhancely-for-typo3
vendor/bin/typo3 database:updateschema
```

In TYPO3 v12 (Classic Mode), activate the extension additionally via **Admin Tools &gt; Extensions**.

Configuration
-------------

[](#configuration)

1. Go to **Admin Tools &gt; Settings &gt; Extension Configuration**
2. Select **enhancely**
3. Configure:

SettingDescriptionDefaultAPI KeyYour Enhancely API key from [enhancely.ai](https://enhancely.ai)-EnabledEnable/disable JSON-LD generationtrueAPI Base URLBase URL without path (leave empty for default)`https://api.enhancely.ai`Excluded Page TypesComma-separated doktypes to skip (e.g., `404,403`)-Cache LifetimeCache duration in seconds86400 (24h)How It Works
------------

[](#how-it-works)

```
Request → Middleware → Enhancely API → JSON-LD injected in

```

1. PSR-15 middleware intercepts frontend responses
2. Calls Enhancely API with the page URL
3. API returns AI-generated JSON-LD
4. JSON-LD is injected before ``
5. ETags are cached to minimize API calls

Features
--------

[](#features)

- **Automatic JSON-LD**: No manual schema markup required
- **ETag Caching**: Conditional requests minimize API usage
- **TYPO3 Cache Integration**: Uses native caching framework
- **Graceful Degradation**: Page renders normally if API fails
- **URL Normalization**: Strips query params and fragments for consistent caching

Backend integration
-------------------

[](#backend-integration)

The extension ships a read-only Info-module tab that shows the Enhancely status for the currently selected page.

1. In the TYPO3 backend, open **Web › Info**.
2. Pick **Enhancely JSON-LD** from the function dropdown.
3. The tab shows:
    - Current Enhancely status (ready / processing / error / skipped)
    - Last crawl timestamp, ETag, hash
    - Sanity checks (BreadcrumbList absolute, title mismatch, crawl freshness, payload size)
    - The raw JSON-LD payload

A **Refresh** button re-fetches from Enhancely and invalidates the shared cache for that URL. The tab does not trigger a server-side re-crawl on Enhancely — that endpoint is not exposed to customers.

### Manual smoke test (for contributors)

[](#manual-smoke-test-for-contributors)

1. Install into a TYPO3 instance with the extension's API key configured.
2. Open a page in the BE with known Enhancely data → expect green "ready" badge.
3. Press Refresh → expect `Source: live (fresh)` and an updated cached\_at line.
4. Set an excluded doktype matching the page → expect gray "skipped".
5. Blank the API key → expect amber "not configured" banner.

API Response Handling
---------------------

[](#api-response-handling)

StatusMeaningAction200JSON-LD readyInject and cache201/202ProcessingSkip, retry on next request412Not modifiedUse cached versionRequirements
------------

[](#requirements)

- TYPO3 12.4+, 13.x or 14.x
- PHP 8.2+
- Enhancely API key

Security
--------

[](#security)

- The middleware reads the request URI (including the `Host` header) and sends the normalized URL to the Enhancely API. Make sure `$GLOBALS['TYPO3_CONF_VARS']['SYS']['trustedHostsPattern']` is configured to prevent host-header injection / cache pollution.
- The configured **API Base URL** must use `https://`. Non-HTTPS values are silently rejected and the default endpoint is used instead, so the API key (sent as Bearer token) is never transmitted in cleartext.
- API responses are capped at 1 MiB to prevent memory exhaustion.
- JSON-LD payloads are emitted with `JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT`, so embedded HTML cannot break out of the surrounding `` tag.

Development
-----------

[](#development)

```
# Install dependencies
composer install

# Run tests
composer test
```

License
-------

[](#license)

GPL-2.0-or-later. See [LICENSE](LICENSE).

Links
-----

[](#links)

- [Enhancely Website](https://enhancely.ai)
- [API Documentation](https://docs.enhancely.ai)

###  Health Score

44

—

FairBetter than 91% of packages

Maintenance92

Actively maintained with recent releases

Popularity12

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~7 days

Recently: every ~0 days

Total

17

Last Release

39d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/29404503?v=4)[olivierdo](/maintainers/olivierdo)[@olivierdo](https://github.com/olivierdo)

---

Top Contributors

[![dkd-dobberkau](https://avatars.githubusercontent.com/u/9196831?v=4)](https://github.com/dkd-dobberkau "dkd-dobberkau (25 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/enhancely-enhancely-for-typo3/health.svg)

```
[![Health](https://phpackages.com/badges/enhancely-enhancely-for-typo3/health.svg)](https://phpackages.com/packages/enhancely-enhancely-for-typo3)
```

###  Alternatives

[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

101466.4k45](/packages/friendsoftypo3-content-blocks)[fluidtypo3/flux

The flux package from FluidTYPO3

145999.7k24](/packages/fluidtypo3-flux)[pagemachine/typo3-formlog

Form log for TYPO3

23233.9k8](/packages/pagemachine-typo3-formlog)[eliashaeussler/typo3-warming

Warming - Warms up Frontend caches based on an XML sitemap. Cache warmup can be triggered via TYPO3 backend or using a console command. Supports multiple languages and custom crawler implementations.

22249.2k](/packages/eliashaeussler-typo3-warming)[eliashaeussler/typo3-form-consent

Extension for TYPO3 CMS that adds double opt-in functionality to EXT:form

1590.6k](/packages/eliashaeussler-typo3-form-consent)[wazum/sluggi

TYPO3 extension for URL slug management with inline editing, auto-sync, locking, access control, and redirects

41515.2k](/packages/wazum-sluggi)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
