Metadata-Version: 2.1
Name: kitconcept.seo
Version: 2.1.0
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
Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
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"


# 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 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

## 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.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]


