Ocyan plugin seo
================

About
-----
``ocyan.plugin.seo`` is a small MandelBlogStack settings plugin.

It does **not** provide page-level SEO metadata, structured data, or Wagtail editor
fields. Its responsibility is narrower:

* enable ``seo-ville-slugger`` as the default Django file storage backend
* configure the SEO-friendly sorl-thumbnail backend and storage classes
* preserve a deterministic settings contract that other Mandel plugins can rely on

Runtime contract
----------------
When loaded through Ocyan's plugin system, the plugin contributes:

* ``STORAGES["default"]["BACKEND"] = "seo.ville.slugger.SEOStorage"``
* ``THUMBNAIL_BACKEND = "seo.ville.sorl.SEOThumbnailBackend"``
* ``THUMBNAIL_STORAGE = "seo.ville.sorl.SEOThumbnailStorage"``
* ``SEO_VILLE_SLUGGER_ALLOW_COPIES = True``

The plugin has no models, migrations, templates, static assets, signals, or Wagtail
hooks.

Compatibility
-------------
Supported release validation targets:

* Python 3.12
* Django 5.x

This package constrains Django to ``>=5,<6`` so clean installs stay on the supported
MandelBlogStack line even though ``seo-ville-slugger`` itself is broader.

Installation
------------
Add ``ocyan.plugin.seo`` to your project dependencies and Ocyan plugin list.

Validation
----------
Repository-owned validation covers:

* clean package import
* Ocyan plugin entrypoint import
* deterministic settings contribution
* Django system checks in an isolated repository settings module
