# Entity Authority Signals V2.2 - Corrections majeures

## 🎯 Problèmes corrigés

### 1. ✅ Taxonomie "Types d'entités" maintenant visible

**Avant :**
- La meta box "Types d'entités" n'apparaissait pas dans l'éditeur
- Obligeait à utiliser "Modification rapide"

**Après :**
- Ajout de `'taxonomies' => ['entity_type']` dans `register_post_type()`
- La meta box apparaît maintenant dans la sidebar droite
- Sélection directe du type lors de la création

**Fichier modifié :** `includes/cpt-entity.php`

---

### 2. ✅ JSON-LD propre et correct

**Avant (INCORRECT) :**
```json
[
    {
        "@context": "https://schema.org",
        "@type": "Person",
        "worksFor": {
            "@type": "Organization",
            "@id": "http://localhost/#entity-110"
        }
    },
    {
        "@context": "https://schema.org",
        "@type": "worksFor",  // ❌ ERREUR: worksFor n'est pas un type
        "@id": "http://localhost/#entity-110",
        "name": "OceanSail"
    }
]
```

**Après (CORRECT) :**
```json
[
    {
        "@context": "https://schema.org",
        "@type": "Person",
        "@id": "http://localhost/#entity-122",
        "name": "Erwan Tanguy",
        "worksFor": {
            "@id": "http://localhost/#entity-110"  // ✅ Référence simple
        }
    },
    {
        "@context": "https://schema.org",
        "@type": "Organization",  // ✅ CORRECT: Organization est un type
        "@id": "http://localhost/#entity-110",
        "name": "OceanSail"
    }
]
```

**Changement :** `worksFor` et `memberOf` sont maintenant de simples références par `@id`, pas des entités complètes.

**Fichier modifié :** `includes/jsonld-output.php`

---

### 3. ✅ Faux positifs de doublons évités

**Avant :**
- Une Person "John Doe" était détectée comme doublon avec une Organization "John Doe"
- Logique trop simple (même nom = doublon)

**Après :**
- **Règle 1 :** Types différents = PAS un doublon
  - "John Doe" (Person) ≠ "John Doe" (Organization)
- **Règle 2 :** Même nom + même type = doublon potentiel
  - "OceanSail" (Organization) = "OceanSail" (Organization) ⚠️
- **Règle 3 :** Correspondance exacte uniquement
  - Nom doit correspondre exactement (pas de correspondance partielle)

**Fichier modifié :** `includes/duplicate-detection.php`

---

### 4. ✅ Support de l'Organization GEO Entities

**Problème :**
- Pour créer une Person avec `worksFor`, il fallait créer une Organization dans EAS
- Cela créait un doublon avec l'Organization de GEO Entities
- Résultat : 2 Organizations principales dans le JSON-LD

**Solution :**
- Nouvelle option dans les selects `worksFor` et `memberOf` :
  - **🌍 OceanSail (GEO Entities - principale)**
- Cette option référence directement l'Organization de GEO Entities via `@id: "/#organization"`
- Plus besoin de créer un doublon dans EAS

**Exemple de JSON-LD généré :**
```json
{
    "@context": "https://schema.org",
    "@type": "Person",
    "@id": "http://localhost/#entity-122",
    "name": "Erwan Tanguy",
    "worksFor": {
        "@id": "http://localhost/#organization"  // ✅ Référence GEO Entities
    }
}
```

**Fichiers modifiés :** 
- `includes/meta-boxes.php` (ajout de l'option GEO Entities)
- `includes/jsonld-output.php` (gestion de la valeur `geo_entities_org`)

---

## 📥 Installation

### Fichiers à remplacer

```
entity-authority-signals/
├── includes/
│   ├── cpt-entity.php              (MODIFIÉ)
│   ├── jsonld-output.php           (MODIFIÉ)
│   ├── duplicate-detection.php     (MODIFIÉ)
│   └── meta-boxes.php              (MODIFIÉ)
```

### Étapes

1. **Sauvegarder** les fichiers actuels
2. **Remplacer** les 4 fichiers dans `includes/`
3. **Désactiver** le plugin
4. **Réactiver** le plugin
5. **Vider le cache** si un plugin de cache est actif
6. **Tester** :
   - Créer une nouvelle entité Person
   - Vérifier que "Types d'entités" est visible à droite
   - Dans "Travaille pour", sélectionner l'option GEO Entities
   - Publier et vérifier le JSON-LD dans le code source

---

## 🧪 Scénarios de test

### Test 1 : Taxonomie visible

✅ **Action :**
1. Aller dans **Entités → Ajouter**
2. Observer la sidebar droite

✅ **Résultat attendu :**
- Meta box "Types d'entités" visible
- Liste déroulante avec Organization, Person, etc.

---

### Test 2 : JSON-LD propre

✅ **Action :**
1. Créer une Organization "Test Company"
2. Créer une Person "John Doe" avec `worksFor: Test Company`
3. Afficher le code source de la page d'accueil (Ctrl+U)
4. Chercher `<script type="application/ld+json">`

✅ **Résultat attendu :**
```json
{
  "@graph": [
    {
      "@type": "Person",
      "name": "John Doe",
      "worksFor": {
        "@id": "http://.../#entity-123"
      }
    },
    {
      "@type": "Organization",  // ✅ Pas "@type": "worksFor"
      "@id": "http://.../#entity-123",
      "name": "Test Company"
    }
  ]
}
```

---

### Test 3 : Pas de faux positif

✅ **Action :**
1. Créer une Organization "John Doe Inc."
2. Créer une Person "John Doe"
3. Observer la meta box "Vérification des doublons"

✅ **Résultat attendu :**
- ✅ **Aucun doublon détecté**
- Message : "Cette entité semble unique"

---

### Test 4 : Référence GEO Entities Organization

✅ **Action :**
1. S'assurer que GEO Entities est actif
2. Créer une Person "Jane Smith"
3. Dans "Travaille pour", sélectionner **🌍 OceanSail (GEO Entities - principale)**
4. Publier
5. Vérifier le JSON-LD

✅ **Résultat attendu :**
```json
{
  "@type": "Person",
  "name": "Jane Smith",
  "worksFor": {
    "@id": "http://localhost/#organization"  // ✅ Référence GEO Entities
  }
}
```

---

## 💡 Workflow recommandé

### Cas 1 : Site avec GEO Entities actif

**✅ RECOMMANDÉ :**
1. **NE PAS** créer d'Organization dans Entity Authority Signals
2. Créer uniquement des Person
3. Dans `worksFor`, sélectionner l'option **GEO Entities (principale)**

**Avantages :**
- ✅ Pas de doublon
- ✅ JSON-LD propre avec une seule Organization principale
- ✅ Les IA citent correctement votre site

---

### Cas 2 : Site sans GEO Entities

**✅ RECOMMANDÉ :**
1. Créer **UNE SEULE** Organization dans Entity Authority Signals
2. Créer les Person avec `worksFor` pointant vers cette Organization

**Attention :**
- ⚠️ Ne créer qu'une seule Organization principale
- Si plusieurs Organizations existent (clients, partenaires), les typer différemment (ex: "Business" au lieu de "Organization")

---

### Cas 3 : Migration depuis V2.0/V2.1

**Si vous avez créé un doublon Organization :**
1. Aller dans **Entités → Doublons**
2. Identifier les Organizations en doublon
3. **Option A :** Supprimer celle d'Entity Authority Signals, utiliser GEO Entities
4. **Option B :** Supprimer celle de GEO Entities (via bridge), garder celle d'EAS
5. Mettre à jour les relations `worksFor` dans les Person

---

## 📊 Impact sur le GEO

### Avant V2.2

```json
// ❌ MAUVAIS: 2 Organizations principales
{
  "@graph": [
    {
      "@type": "Organization",
      "@id": "http://site.com/#organization",  // GEO Entities
      "name": "OceanSail"
    },
    {
      "@type": "Organization",
      "@id": "http://site.com/#entity-110",    // EAS
      "name": "OceanSail"
    }
  ]
}
```

**Problème :** Les IA ne savent pas laquelle citer

---

### Après V2.2

```json
// ✅ BON: 1 seule Organization, références propres
{
  "@graph": [
    {
      "@type": "Organization",
      "@id": "http://site.com/#organization",
      "name": "OceanSail",
      "url": "http://site.com",
      "logo": "http://site.com/logo.png"
    },
    {
      "@type": "Person",
      "@id": "http://site.com/#entity-122",
      "name": "Erwan Tanguy",
      "worksFor": {
        "@id": "http://site.com/#organization"  // ✅ Référence unique
      }
    }
  ]
}
```

**Résultat :** Les IA citent correctement votre site comme source

---

## 🔧 Dépannage

### La taxonomie n'apparaît toujours pas

1. Vérifier que `'taxonomies' => ['entity_type']` est bien dans `cpt-entity.php`
2. Désactiver puis réactiver le plugin
3. Vider le cache du navigateur
4. Essayer avec un autre navigateur

---

### L'option GEO Entities n'apparaît pas

**Cause :** GEO Entities n'est pas actif ou `get_bloginfo('name')` est vide

**Solution :**
1. Vérifier que GEO Entities est actif
2. Aller dans **Réglages → Général** et vérifier que "Titre du site" est rempli

---

### Le JSON-LD montre encore `"@type": "worksFor"`

**Cause :** Ancien code toujours en cache

**Solution :**
1. Vider le cache du navigateur
2. Vider le cache WordPress (si plugin de cache)
3. Vérifier que `jsonld-output.php` est bien la nouvelle version

---

## 📝 Changelog V2.2

**Fixed :**
- ✅ Taxonomie `entity_type` maintenant visible dans l'éditeur
- ✅ JSON-LD corrigé : `worksFor` est une référence, pas un type
- ✅ Faux positifs de doublons évités (types différents = pas doublon)
- ✅ Support de l'Organization GEO Entities sans créer de doublon

**Added :**
- ✅ Option "GEO Entities (principale)" dans les selects `worksFor` et `memberOf`
- ✅ Message d'aide expliquant l'option GEO Entities
- ✅ Logique de détection de doublons améliorée avec règles claires

**Changed :**
- Structure JSON-LD simplifiée : références par `@id` uniquement
- Priorité d'exécution du hook `wp_head` ajustée (après GEO Entities)

---

**Version : 2.2.0**  
**Date : Janvier 2025**  
**Nécessite :** WordPress 5.8+, PHP 7.4+  
**Compatible avec :** GEO Entities Core V1.0+