Metadata-Version: 2.4
Name: kitconcept.seo
Version: 2.1.2
Summary: SEO optimizations plugin for Plone
Home-page: https://pypi.python.org/pypi/kitconcept.seo
Author: kitconcept GmbH
Author-email: info@kitconcept.com
License: GPL version 2
Project-URL: PyPI, https://pypi.python.org/pypi/kitconcept.seo
Project-URL: Source, https://github.com/kitconcept/kitconcept.seo
Project-URL: Tracker, https://github.com/kitconcept/kitconcept.seo/issues
Keywords: Python Plone CMS
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Framework :: Plone
Classifier: Framework :: Plone :: Addon
Classifier: Framework :: Plone :: 6.0
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE.GPL
License-File: LICENSE.md
Requires-Dist: setuptools
Requires-Dist: Products.CMFPlone
Requires-Dist: plone.app.dexterity
Requires-Dist: plone.autoform
Requires-Dist: plone.behavior
Requires-Dist: plone.dexterity
Requires-Dist: plone.namedfile
Requires-Dist: plone.supermodel
Provides-Extra: test
Requires-Dist: zest.releaser[recommended]; extra == "test"
Requires-Dist: zestreleaser.towncrier; extra == "test"
Requires-Dist: plone.app.contenttypes[test]; extra == "test"
Requires-Dist: plone.app.testing; extra == "test"
Requires-Dist: plone.restapi[test]; extra == "test"
Requires-Dist: plone.app.iterate; extra == "test"
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Requires-Dist: pytest-plone>=0.2.0; extra == "test"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: project-url
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary


# kitconcept.seo

[![Pypi](https://img.shields.io/pypi/status/kitconcept.seo.svg)](https://pypi.python.org/pypi/kitconcept.seo/)
[![Pypi version](https://img.shields.io/pypi/v/kitconcept.seo.svg)](https://pypi.python.org/pypi/kitconcept.seo/)
[![License](https://img.shields.io/pypi/l/kitconcept.seo.svg)](https://pypi.python.org/pypi/kitconcept.seo/)

[![kitconcept, GmbH](https://raw.githubusercontent.com/kitconcept/kitconcept.seo/master/kitconcept.png)](https://kitconcept.com/)

[SEO](https://en.wikipedia.org/wiki/Search_engine_optimization) enhancements for the Plone Content Management System.
`kitconcept.seo` works with the latest Plone 6 and its default frontend [Volto](https://github.com/plone/volto).
It might still work with Plone Classic but that is not officially supported.
If you are looking for a full featured SEO solution for Plone Classic or older versions of Plone, we suggest looking into [fourdigits.seo](https://pypi.org/project/fourdigits.seo/).


## Features

- Allows to override meta title and meta description per page
- Allows to set the noindex header to exclude pages from being indexed
- Allows to set a canonical URL
- Allows to set Open Graph title, description and image

## Examples

This add-on can be seen in action at the following sites:

- [German Aerospace Center (DLR)](www.dlr.de)
- [FZ Jülich](www.fz-juelich.de)
- [HI Ern](www.hi-ern.de/de)
- [Zeelandia](www.zeelandia.de)
- [VHS Ehrenamtsportal](www.vhs-ehrenamtsportal.de)

## Translations

This product has been translated into

- German

- Italian

- Spanish

## Installation

Install kitconcept.seo with `pip`:

```shell
pip install kitconcept.seo
```
And to create the Plone site:

```shell
make create_site
```

# Enable the SEO behavior

To enable the SEO tab for a specific content type you have to enable the `kitconcept.seo` behavior.
Go to the page setup and then to the Dexterity Content Types control panel.
Choose the content type you want to enable SEO for and enable the `kitconcept.seo` behavior.

## Enable the SEO behavior programmatically

Enable the `kitconcept.seo` behavior by adding the behavior to the Factory Type Information (FTI) of your type in your generic setup profile. E.g. to enable SEO for the document type, drop a `Document.xml` file into the `profiles/default/types` folder of your add-on product with the following content:

```xml
   <?xml version="1.0" encoding="utf-8"?>
   <object name="Document" meta_type="Dexterity FTI" i18n:domain="plone"
     xmlns:i18n="http://xml.zope.org/namespaces/i18n">
     <property name="behaviors" purge="False">
       <element value="kitconcept.seo" />
     </property>
   </object>
```

## Add to Volto project or add-on

To add `kitconcept.seo` to your Volto project/add-on you need to edit the component you want to use it for.
If you want use it for your whole page you can use it in the ``View.jsx`` (see [here](https://6.docs.plone.org/volto/development/customizing-views.html) for further information on editing views in Volto).

Than you use `react-helmet` Volto helper to set the title and description of the component. So import `react-helmet`
with:

```jsx
   import { Helmet } from '@plone/volto/helpers';
```

And finally add this to the `jsx` code of your component:

```jsx
   <Helmet
          title={
            this.props.content.seo_title
              ? this.props.content.seo_title
              : this.props.content.title
          }
          meta={
            this.props.content.seo_description
              ? [
                  {
                    name: 'description',
                    content: this.props.content.seo_description,
                  },
                ]
              : [
                  {
                    name: 'description',
                    content: this.props.content.description,
                  },
                ]
          }
          bodyAttributes={{
            class: `view-${viewName.toLowerCase()}`,
          }}
        />
```

## Usage

In your Volto page you need to go to the edit mode of the page you want to add a title and description for SEO and open the properties of the page by clicking the properties under the save button. Choose SEO there and add a title and description in the fields. When you are done hit the save button.

## Contribute

- [Issue Tracker](https://github.com/collective/kitconcept.seo/issues)
- [Source Code](https://github.com/collective/kitconcept.seo/)

## License

The project is licensed under GPLv2.


# Contributors

- kitconcept GmbH [info@kitconcept.com]


# Changelog

<!--
   You should *NOT* be adding new change log entries to this file.
   You should create a file in the news directory instead.
   For helpful instructions, please see:
   https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst
-->

<!-- towncrier release notes start -->

## 2.1.2 (2026-01-26)

### Bug fixes:

- Add new widget for seo title and description. @iFlameing


## 2.1.1 (2025-11-04)

### New features:

- Add Spanish translations #22 [macagua] (#22)

### Internal:

- Fix metadata for the package. @ericof
- Use pkgutil instead of deprecated pkg_resources. @ericof


## 2.1.0 (2024-05-30)


### New features:

- Add Plone 6 Support. @tisto (#13)
- Set the X-Robots-Tag response header when seo_noindex is True. @sneridagh, @davisagli (#17)

### Internal:

- Update internal package structure. @sneridagh, @davisagli (#16)


## 2.0.1 (2021-11-01)

- Explicitly include dependencies (supporting pip installations)
  [ericof]

- Use **plone/setup-plone@v1.0.0** in Github actions
  [ericof]

## 2.0.0 (2021-09-24)

- Add Python 3.8/3.9 support
  [tisto]

- Drop Python 2 support.
  [tisto]

- Drop Plone 5 support.
  [tisto]

- Add Italian translations.
  [cekk]

## 1.4.0 (2020-04-08)

- Remove maxlength parameter from seo fields.
  [tisto]

## 1.3.0 (2020-03-24)

- Add Open Graph title, description and image.
  [tisto]

- Add German translation.
  [tisto]

## 1.2.1 (2020-01-16)

- Re-release 1.2.0.
  [tisto]

## 1.2.0 (2020-01-16)

- Add canonical_url option.
  [tisto]

## 1.1.0 (2020-01-10)

- Add noindex option.
  [tisto]

## 1.0.0 (2019-05-14)

- Python 3 compatibility.
  [tisto]

- Plone 5.2 compatibility.
  [tisto]

- Remove unnecessary plone.directives.form test dependency.
  [tisto]

- Use black formatter.
  [tisto]

## 1.0.0a1 (2018-07-09)

- Initial release.
  [kitconcept]


