Metadata-Version: 2.4
Name: module-revolucy-seo
Version: 0.1.2
Summary: Moteur d'audit SEO & GEO (Generative Engine Optimization) pour Django.
Author-email: Revolucy <hello@revolucy.fr>
Project-URL: Homepage, https://revolucy.fr
Project-URL: Repository, https://gitlab.com/agence_revolucy/module-revolucy-seo
Classifier: Framework :: Django
Classifier: Framework :: Django :: 4.2
Classifier: Framework :: Django :: 5.0
Classifier: Framework :: Django :: 5.1
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: django>=4.2
Requires-Dist: requests
Requires-Dist: beautifulsoup4
Requires-Dist: lxml

# module-revolucy-seo

Moteur d'audit SEO & GEO (Generative Engine Optimization) pour Django.

Analyse une page web et produit un score sur 100 avec des recommandations, organisees en 4 categories : SEO, GEO & IA, Contenu, Technique.

## Installation

```sh
pip install module-revolucy-seo
```

## Configuration

```python
# settings.py
INSTALLED_APPS = [
    ...
    'revolucy_seo',
]

# urls.py
path('seo/', include('revolucy_seo.urls')),
```

Migration :
```sh
python manage.py migrate revolucy_seo
```

### Variables d'environnement

Toutes optionnelles :

| Variable | Usage | Sans la variable |
|---|---|---|
| `URL_PROTOCOL` | Protocole pour les URLs du panneau admin (`http` ou `https`) | Defaut : `https` |
| `URL_DOMAIN` | Domaine pour les URLs du panneau admin | Defaut : `localhost` |

## Categories d'analyse

### SEO (22 checks)

Titre, meta description, H1, H2, hierarchie des titres, mot-cle (titre, H1, slug, densite, premier paragraphe, 100 premiers mots), canonical, robots, hreflang, images alt, liens internes/externes, OpenGraph, Twitter Card.

### GEO & IA (9 checks)

Donnees structurees JSON-LD, Schema Organization/LocalBusiness, Schema BreadcrumbList, Schema FAQ, Schema WebSite, signaux E-E-A-T, Schema HowTo, liens vers des sources fiables (Wikipedia, .gouv.fr, Europa, etc.), fil d'Ariane HTML visible.

### Contenu (6 checks)

Nombre de mots (>= 300), contenu approfondi (>= 600 mots pour GEO), lisibilite Flesch FR, structure H2 + H3, listes ou tableaux, donnees chiffrees et statistiques.

### Technique (7 checks)

Attribut lang, meta viewport, longueur URL, profondeur URL, slug lisible, ancres vides, alt trop courts.

## Utilisation

### Analyse HTML (sans requete reseau)

```python
from revolucy_seo.services.analyzer import analyze_html

result = analyze_html(html, url, focus_kw="erp")
print(result['score'])  # 75
print(result['checks'])  # liste des checks avec category, ok, hint
```

### Panneau admin

Ajoute un panneau SEO & GEO en bas de n'importe quel ModelAdmin :

```python
from revolucy_seo.admin import SeoPanelAdminMixin

class PageAdmin(SeoPanelAdminMixin, admin.ModelAdmin):
    readonly_fields = ['seo_panel']
```

Le panneau pre-remplit l'URL de la page via `reverse()` si le modele a un champ `lien` qui correspond a un nom de route Django.

### Crawler CLI

```sh
python manage.py seo_audit --start-url https://exemple.fr --focus-kw "erp" --max-pages 50
```

Crawle le site en BFS et affiche le score SEO & GEO de chaque page.

## Dependances

- Django >= 4.2
- requests
- beautifulsoup4
- lxml (fallback automatique sur html.parser si absent)
