PHPackages                             hyperdigital/hd\_structureddata - 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. hyperdigital/hd\_structureddata

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

hyperdigital/hd\_structureddata
===============================

Extension for adding structured JSON-LD into page headers

1.0.3(4mo ago)04.0k↓25%[1 issues](https://github.com/hyperdigital/hd_structureddata/issues)GPL-2.0-or-laterPHP

Since Feb 5Pushed 4mo ago1 watchersCompare

[ Source](https://github.com/hyperdigital/hd_structureddata)[ Packagist](https://packagist.org/packages/hyperdigital/hd_structureddata)[ RSS](/packages/hyperdigital-hd-structureddata/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (2)Versions (35)Used By (0)

HD Structured data
==================

[](#hd-structured-data)

TYPO3 extension for handling Google structured data into your page.

Initialization
--------------

[](#initialization)

- install the extension
- include static typoscript file (HD Structured data)
- go to edit page properties
- open tab "Structured data"
- add a new structured data item

Existing structured data
------------------------

[](#existing-structured-data)

### Article

[](#article)

Source:

### Course

[](#course)

Source:

### FAQ

[](#faq)

Source:

### Organization

[](#organization)

Source:

### Job Posting

[](#job-posting)

Source:

### Video

[](#video)

Source:

### Review

[](#review)

Source:

### Products

[](#products)

Source:

### Events

[](#events)

Source:

#### Possibility to attach already used Organization as organizer

[](#possibility-to-attach-already-used-organization-as-organizer)

Events should contain organizer. It's possible to attach already exiting organization over field "Pointer to already existing organizers" where is possible to choose different structured data entries, but only Organization type would be used in Frontend output.

### Image

[](#image)

Source:

After installing this extension, a new ViewHelper with empty output is available for use in your Fluid templates: `{f:imageStructuredData(image: image, uri: 'https:\\www.web.com\fileadmin\img.jpg')}`. This ViewHelper integrates structured data for images across your TYPO3 website. The `image` parameter is used to pass the image object. If you need to provide an alternative URL instead of publicUrl, use the `uri` parameter (of type string).

#### Usage

[](#usage)

To use the `imageStructuredData` ViewHelper, include it in your Fluid templates as follows:

```

```

After installing this extension, a new ViewHelper with empty output is available for use in your Fluid templates: `{f:imageStructuredData(image: image, uri: 'https:\\www.web.com\fileadmin\img.jpg')}`. This ViewHelper integrates structured data for images across your TYPO3 website. The `image` parameter is used to pass the image object. If you need to provide an alternative URL instead of publicUrl, use the `uri` parameter (of type string).

Available image sources are:

- FileReference
- File
- Array where `id` is combined identifier ($image\['id'\] = '1:/foo.txt';)
- String like file typolink `t3://file?uid=12345`

### Sitelinks search box

[](#sitelinks-search-box)

Source:

Integration of searchbar inside the search results.

This data should be included only on homepage.

#### Search parameter (search\_parameter)

[](#search-parameter-search_parameter)

ExtensionURLIndexed search (indexed\_search)tx\_indexedsearch\_pi2%5Baction%5D=search&amp;tx\_indexedsearch\_pi2\[search\]\[sword\]=###SWORD###&amp;no\_cache=1Faceted Search (ke\_search)tx\_kesearch\_pi1\[sword\]=###SWORD###&amp;no\_cache=1Possibility to use it on detail pages (news, products, etc.)
------------------------------------------------------------

[](#possibility-to-use-it-on-detail-pages-news-products-etc)

First add a field into database and TCA

*ext\_tables.sql*

```
CREATE TABLE tx_news_domain_model_news (
    structured_data INT(11) DEFAULT 0 NOT NULL,
);
```

*Configuration/TCA/Overrides/tx\_news\_domain\_model\_news.php*

```
$tempColumns = [
    'structured_data' => [
        'label' => 'Structured data',
        'config' => [
            'type' => 'inline',
            'foreign_table' => 'tx_hdstructureddata_domain_model_structureddata',
            'foreign_field' => 'foreign_uid',
            'foreign_sortby' => 'sorting',
            'foreign_table_field' => 'tablename',
            'foreign_match_fields' => [
                'fieldname' => 'structured_data',
            ],
            'behaviour' => [
                'allowLanguageSynchronization' => true
            ],
        ],
    ]
];

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns("tx_news_domain_model_news", $tempColumns, 1);

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
    'tx_news_domain_model_news',
    '--div--;Structured Data, structured_data',
);
```

Then integrate the typoscript code.

*TypoScript*

```
[request && traverse(request.getQueryParams(), 'tx_news_pi1/news') > 0]
    # this part is not needed if default typoscript is used
    # page.headerData.90 = USER
    # page.headerData.90.userFunc = Hyperdigital\HdStructureddata\UserFunctions\StructuredDataPrint->printTags
    page.headerData.90 {
        tableName = tx_news_domain_model_news
        fieldName = structured_data
        parentUid = GP:tx_news_pi1|news
    }
[end]

```

Possibility to use it on listing pages (news, products, etc.)
-------------------------------------------------------------

[](#possibility-to-use-it-on-listing-pages-news-products-etc)

This needs template adaption. You can use fluid viewhelper for append the structured data for a specific table, like in the deail pages above.

The viewhelper has 2 possible ways:

**Using parent object**

```

```

**Using row uid**, but here be careful and use the in the translations the uid of the translated row instead of the default language.

```

```

Or there is also a possibility to use the data directly over controller:

```
 $dataService = GeneralUtility::makeInstance(GenerateDataService::class);
 $dataService->generateDataFromObject('tx_news_domain_model_news', 'structured_data', $newsItem);

 //Or for the specific UID
 $dataService->generateDataFromUid('tx_news_domain_model_news', 'structured_data', $newsItem->getUid());
```

###  Health Score

42

—

FairBetter than 90% of packages

Maintenance74

Regular maintenance activity

Popularity21

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity53

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 ~22 days

Recently: every ~11 days

Total

32

Last Release

142d ago

Major Versions

0.8.7 → 1.0.02025-09-02

0.8.9 → v12.x-dev2025-11-18

### Community

Maintainers

![](https://www.gravatar.com/avatar/570275984d4469e32ae0e63756acd240237e53a7275faecb1baa6b28e414aa6e?d=identicon)[hyperdigital](/maintainers/hyperdigital)

![](https://www.gravatar.com/avatar/1efd154aaea13b09575d581f8828321fa2969da7b08f3809095119c42e1048c3?d=identicon)[ununik](/maintainers/ununik)

---

Top Contributors

[![martinpribylhd](https://avatars.githubusercontent.com/u/153900403?v=4)](https://github.com/martinpribylhd "martinpribylhd (52 commits)")

### Embed Badge

![Health badge](/badges/hyperdigital-hd-structureddata/health.svg)

```
[![Health](https://phpackages.com/badges/hyperdigital-hd-structureddata/health.svg)](https://phpackages.com/packages/hyperdigital-hd-structureddata)
```

###  Alternatives

[jweiland/events2

Events 2 - Create single and recurring events

2062.4k2](/packages/jweiland-events2)[eliashaeussler/typo3-form-consent

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

1481.0k](/packages/eliashaeussler-typo3-form-consent)[b13/assetcollector

Add CSS and SVG files and strings as inline style tag/inline svg to the html code.

10118.4k](/packages/b13-assetcollector)[mfd/ai-filemetadata

Automatically generates FAL metadata for files by means of public LLMs

1142.1k](/packages/mfd-ai-filemetadata)[mautic/mautic-typo3

Add-on TYPO3 extension that enhances the "EXT:marketing\_automation" TYPO3 extension by connecting it to the Mautic Marketing Automation platform: Determine "Persona" from Mautic segments. Also provides additional services e.g. language synchronisation between Mautic and TYPO3.

236.3k](/packages/mautic-mautic-typo3)

PHPackages © 2026

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