LLM Pack optiprime

Site : optiprime

Usage

Ce document sert de contexte compact pour un humain ou un LLM externe. Il duplique l’essentiel de la base machine en Markdown lisible.

Pack JSON

{
  "site": "optiprime",
  "market": {
    "primary_market": "ch",
    "target_countries": [
      "ch",
      "fr"
    ],
    "seo_scope": "national"
  },
  "context_pack": {
    "site_key": "optiprime",
    "task": "external llm pack",
    "lessons": [
      {
        "id": 14,
        "category": "measurement",
        "lesson": "Toujours mesurer après action.",
        "confidence": "high",
        "status": "validated"
      },
      {
        "id": 17,
        "category": "measurement",
        "lesson": "Measured SEO actions are generating positive post-action deltas. Increase trust in SOPs that led to these actions.",
        "confidence": "high",
        "status": "validated"
      },
      {
        "id": 18,
        "category": "measurement",
        "lesson": "Mesurer après publication améliore la qualité des SOP.",
        "confidence": "high",
        "status": "validated"
      },
      {
        "id": 10,
        "category": "ctr_optimization",
        "lesson": "Several visible pages have low CTR. Prioritize title, meta description, and intent alignment refreshes before creating net new content.",
        "confidence": "high",
        "status": "deprecated"
      },
      {
        "id": 15,
        "category": "postmortem",
        "lesson": "A measured SEO action produced a negative post-action delta. Do not reinforce this SOP until the hypothesis, page scope, or review window is revised.",
        "confidence": "high",
        "status": "draft"
      },
      {
        "id": 150,
        "site_key": "optiprime",
        "category": "ctr_optimization",
        "lesson": "Several visible pages have low CTR. Prioritize title, meta description, and intent alignment refreshes before creating net new content.",
        "confidence": "high",
        "source": "feedback_loop",
        "status": "validated",
        "details_json": {
          "pages": [
            {
              "ctr": 0.0,
              "page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
              "clicks": 0,
              "position": 26.717409587888984,
              "top_query": "choix caisse-maladie",
              "impressions": 1189
            },
            {
              "ctr": 0.0,
              "page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "clicks": 0,
              "position": 18.845238095238095,
              "top_query": "classement assurance de base",
              "impressions": 336
            },
            {
              "ctr": 0.0,
              "page": "https://www.optiprime.ch/blog",
              "clicks": 0,
              "position": 36.07860262008734,
              "top_query": "lamal suisse pas chère",
              "impressions": 229
            },
            {
              "ctr": 0.0,
              "page": "https://www.optiprime.ch/blog/assurance-maladie",
              "clicks": 0,
              "position": 19.98989898989899,
              "top_query": "guide assurance maladie suisse",
              "impressions": 198
            },
            {
              "ctr": 0.0,
              "page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
              "clicks": 0,
              "position": 48.09090909090909,
              "top_query": "meilleures caisses maladie suisse 2026",
              "impressions": 132
            }
          ]
        },
        "created_at": "2026-05-26 00:00:22.059967+00:00",
        "updated_at": "2026-05-26 00:00:22.688378+00:00",
        "details": {
          "pages": [
            {
              "ctr": 0.0,
              "page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
              "clicks": 0,
              "position": 26.717409587888984,
              "top_query": "choix caisse-maladie",
              "impressions": 1189
            },
            {
              "ctr": 0.0,
              "page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "clicks": 0,
              "position": 18.845238095238095,
              "top_query": "classement assurance de base",
              "impressions": 336
            },
            {
              "ctr": 0.0,
              "page": "https://www.optiprime.ch/blog",
              "clicks": 0,
              "position": 36.07860262008734,
              "top_query": "lamal suisse pas chère",
              "impressions": 229
            },
            {
              "ctr": 0.0,
              "page": "https://www.optiprime.ch/blog/assurance-maladie",
              "clicks": 0,
              "position": 19.98989898989899,
              "top_query": "guide assurance maladie suisse",
              "impressions": 198
            },
            {
              "ctr": 0.0,
              "page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
              "clicks": 0,
              "position": 48.09090909090909,
              "top_query": "meilleures caisses maladie suisse 2026",
              "impressions": 132
            }
          ]
        }
      },
      {
        "id": 124,
        "site_key": "optiprime",
        "category": "throughput",
        "lesson": "Queue pressure is high. Reduce draft generation and prioritize review, refresh, and publishing throughput.",
        "confidence": "high",
        "source": "feedback_loop",
        "status": "validated",
        "details_json": {
          "failed_count": 0,
          "queued_count": 5
        },
        "created_at": "2026-05-16 00:00:12.014717+00:00",
        "updated_at": "2026-05-16 00:00:12.496888+00:00",
        "details": {
          "failed_count": 0,
          "queued_count": 5
        }
      }
    ],
    "sops": [
      {
        "id": 8,
        "name": "adaptive-feedback-playbook",
        "scope": "site",
        "status": "deprecated",
        "content": "Toujours mesurer après action."
      }
    ],
    "recent_memory": [
      {
        "id": 228,
        "site_key": "optiprime",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "optiprime",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 122,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 22,
              "site_key": "optiprime",
              "created_at": "2026-05-26 00:00:22.213806+00:00",
              "updated_at": "2026-05-26 00:00:22.213806+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 116,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e94fa776450>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e94fa7747d0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        },
        "recorded_at": "2026-05-26 00:00:22.604801+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 122,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 22,
              "site_key": "optiprime",
              "created_at": "2026-05-26 00:00:22.213806+00:00",
              "updated_at": "2026-05-26 00:00:22.213806+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 116,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e94fa776450>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e94fa7747d0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        }
      },
      {
        "id": 220,
        "site_key": "optiprime",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "optiprime",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 116,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 21,
              "site_key": "optiprime",
              "created_at": "2026-05-25 00:00:13.195343+00:00",
              "updated_at": "2026-05-25 00:00:13.195343+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 114,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x787c7c5921b0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x787c7c590530>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        },
        "recorded_at": "2026-05-25 00:00:14.152855+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 116,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 21,
              "site_key": "optiprime",
              "created_at": "2026-05-25 00:00:13.195343+00:00",
              "updated_at": "2026-05-25 00:00:13.195343+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 114,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x787c7c5921b0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x787c7c590530>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        }
      },
      {
        "id": 212,
        "site_key": "optiprime",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "optiprime",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 107,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 20,
              "site_key": "optiprime",
              "created_at": "2026-05-23 00:00:11.824106+00:00",
              "updated_at": "2026-05-24 00:00:20.084314+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 114,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e20b813e030>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e20b813c440>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        },
        "recorded_at": "2026-05-24 00:00:20.456287+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 107,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 20,
              "site_key": "optiprime",
              "created_at": "2026-05-23 00:00:11.824106+00:00",
              "updated_at": "2026-05-24 00:00:20.084314+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 114,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e20b813e030>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7e20b813c440>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        }
      },
      {
        "id": 204,
        "site_key": "optiprime",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "optiprime",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 107,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 20,
              "site_key": "optiprime",
              "created_at": "2026-05-23 00:00:11.824106+00:00",
              "updated_at": "2026-05-23 00:00:11.824106+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 114,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x73d360f32660>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x73d360f309e0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        },
        "recorded_at": "2026-05-23 00:00:12.341157+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 107,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 20,
              "site_key": "optiprime",
              "created_at": "2026-05-23 00:00:11.824106+00:00",
              "updated_at": "2026-05-23 00:00:11.824106+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 114,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x73d360f32660>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x73d360f309e0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        }
      },
      {
        "id": 196,
        "site_key": "optiprime",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "optiprime",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 100,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 19,
              "site_key": "optiprime",
              "created_at": "2026-05-21 00:00:17.132490+00:00",
              "updated_at": "2026-05-22 00:00:13.718949+00:00",
              "confidence_label": "high",
              "confidence_score": 96
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 114,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7839b4d326c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7839b4d30a40>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        },
        "recorded_at": "2026-05-22 00:00:13.976120+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 100,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 19,
              "site_key": "optiprime",
              "created_at": "2026-05-21 00:00:17.132490+00:00",
              "updated_at": "2026-05-22 00:00:13.718949+00:00",
              "confidence_label": "high",
              "confidence_score": 96
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 114,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7839b4d326c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7839b4d30a40>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        }
      },
      {
        "id": 188,
        "site_key": "optiprime",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "optiprime",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 100,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 19,
              "site_key": "optiprime",
              "created_at": "2026-05-21 00:00:17.132490+00:00",
              "updated_at": "2026-05-21 00:00:17.132490+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 116,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7580bc8fa420>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7580bc8f87a0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        },
        "recorded_at": "2026-05-21 00:00:17.680097+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 100,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 19,
              "site_key": "optiprime",
              "created_at": "2026-05-21 00:00:17.132490+00:00",
              "updated_at": "2026-05-21 00:00:17.132490+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 116,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7580bc8fa420>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7580bc8f87a0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        }
      },
      {
        "id": 180,
        "site_key": "optiprime",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "optiprime",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 94,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 18,
              "site_key": "optiprime",
              "created_at": "2026-05-19 00:00:14.564982+00:00",
              "updated_at": "2026-05-20 00:00:13.456750+00:00",
              "confidence_label": "high",
              "confidence_score": 96
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 116,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x77ec9f9023c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x77ec9f900770>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        },
        "recorded_at": "2026-05-20 00:00:13.755182+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 94,
              "name": "adaptive-feedback-playbook",
              "scope": "site",
              "source": "feedback_loop",
              "status": "draft",
              "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
              "version": 18,
              "site_key": "optiprime",
              "created_at": "2026-05-19 00:00:14.564982+00:00",
              "updated_at": "2026-05-20 00:00:13.456750+00:00",
              "confidence_label": "high",
              "confidence_score": 96
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 10,
              "observation_count": 10
            },
            "site_key": "optiprime"
          },
          "feedback": {
            "site_key": "optiprime",
            "gsc_pages": 5,
            "queue_rows": 20,
            "gsc_queries": 116,
            "workflow_events": 50
          },
          "business_feedback": {
            "crawler": {
              "ideas": [],
              "issues": [],
              "message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x77ec9f9023c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "crawl_ok": false,
              "acquisition_ok": false
            },
            "linkmap": {
              "result": {},
              "message": "Outil LinkMap introuvable pour pagerank.",
              "pagerank_ok": false,
              "strategy_ok": false
            },
            "site_key": "optiprime",
            "available": true,
            "seo_panel": {
              "alerts": [],
              "message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x77ec9f900770>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Optiprime"
          }
        }
      }
    ],
    "recent_outcomes": [
      {
        "id": 251,
        "site_key": "optiprime",
        "outcome_type": "measurement_result",
        "subject_key": "publish:comment-choisir-assurance-sante-suisse",
        "metric_name": "impact_score",
        "metric_value": 0.0,
        "payload_json": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
          "action_type": "publish",
          "impact_label": "neutral",
          "measurement_id": 26
        },
        "recorded_at": "2026-05-26 09:07:02.120461+00:00",
        "payload": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
          "action_type": "publish",
          "impact_label": "neutral",
          "measurement_id": 26
        }
      },
      {
        "id": 250,
        "site_key": "optiprime",
        "outcome_type": "gsc_delta",
        "subject_key": "publish:comment-choisir-assurance-sante-suisse",
        "metric_name": "position",
        "metric_value": 0.0,
        "payload_json": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "current": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "baseline": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
        },
        "recorded_at": "2026-05-26 09:07:02.096314+00:00",
        "payload": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "current": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "baseline": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
        }
      },
      {
        "id": 249,
        "site_key": "optiprime",
        "outcome_type": "gsc_delta",
        "subject_key": "publish:comment-choisir-assurance-sante-suisse",
        "metric_name": "ctr",
        "metric_value": 0.0,
        "payload_json": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "current": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "baseline": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
        },
        "recorded_at": "2026-05-26 09:07:02.076316+00:00",
        "payload": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "current": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "baseline": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
        }
      },
      {
        "id": 248,
        "site_key": "optiprime",
        "outcome_type": "gsc_delta",
        "subject_key": "publish:comment-choisir-assurance-sante-suisse",
        "metric_name": "impressions",
        "metric_value": 0.0,
        "payload_json": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "current": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "baseline": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
        },
        "recorded_at": "2026-05-26 09:07:02.059405+00:00",
        "payload": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "current": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "baseline": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
        }
      },
      {
        "id": 247,
        "site_key": "optiprime",
        "outcome_type": "gsc_delta",
        "subject_key": "publish:comment-choisir-assurance-sante-suisse",
        "metric_name": "clicks",
        "metric_value": 0.0,
        "payload_json": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "current": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "baseline": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
        },
        "recorded_at": "2026-05-26 09:07:02.022567+00:00",
        "payload": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "current": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "baseline": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.0,
            "impressions": 0.0
          },
          "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
        }
      }
    ],
    "recent_observations": [
      {
        "id": 970,
        "site_key": "optiprime",
        "source_type": "seo_experiment_concluded",
        "subject_key": "content-refresh:comparis-assurance-maladie",
        "payload_json": {
          "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
          "conclusion": {
            "delta": {
              "ctr": 0.0,
              "clicks": 0.0,
              "position": 0.5987592219986588,
              "impressions": 194.0
            },
            "success": false,
            "conclusion": "rejected",
            "hypothesis": {
              "slug": "comparis-assurance-maladie",
              "query": "est-ce que comparis est un bon comparateur d'assurances maladie en suisse?",
              "autonomy": "auto_correctable",
              "baseline": {
                "ctr": 0.0,
                "clicks": 0,
                "position": 18.246478873239436,
                "impressions": 142
              },
              "site_key": "optiprime",
              "reasoning": [
                "article assez mature (42j)",
                "position proche d'un gain SEO (18.2)",
                "potentiel impression détecté (142)",
                "perte de clics probable: CTR 0.00% pour 142 impressions",
                "écart concurrentiel aligné avec la requête",
                "intent map confirme un refresh de la page actuelle"
              ],
              "risk_level": "medium",
              "action_type": "content_refresh",
              "playbook_id": "gain_position",
              "playbook_name": "Gagner des positions",
              "primary_metric": "position",
              "secondary_metrics": [
                "clicks",
                "impressions",
                "query_coverage"
              ],
              "expected_direction": "decrease"
            },
            "impact_label": "positive",
            "primary_metric_delta": 0.5987592219986588
          },
          "action_type": "content_refresh",
          "measurement_id": 25
        },
        "recorded_at": "2026-05-26 00:07:02.038445+00:00",
        "payload": {
          "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
          "conclusion": {
            "delta": {
              "ctr": 0.0,
              "clicks": 0.0,
              "position": 0.5987592219986588,
              "impressions": 194.0
            },
            "success": false,
            "conclusion": "rejected",
            "hypothesis": {
              "slug": "comparis-assurance-maladie",
              "query": "est-ce que comparis est un bon comparateur d'assurances maladie en suisse?",
              "autonomy": "auto_correctable",
              "baseline": {
                "ctr": 0.0,
                "clicks": 0,
                "position": 18.246478873239436,
                "impressions": 142
              },
              "site_key": "optiprime",
              "reasoning": [
                "article assez mature (42j)",
                "position proche d'un gain SEO (18.2)",
                "potentiel impression détecté (142)",
                "perte de clics probable: CTR 0.00% pour 142 impressions",
                "écart concurrentiel aligné avec la requête",
                "intent map confirme un refresh de la page actuelle"
              ],
              "risk_level": "medium",
              "action_type": "content_refresh",
              "playbook_id": "gain_position",
              "playbook_name": "Gagner des positions",
              "primary_metric": "position",
              "secondary_metrics": [
                "clicks",
                "impressions",
                "query_coverage"
              ],
              "expected_direction": "decrease"
            },
            "impact_label": "positive",
            "primary_metric_delta": 0.5987592219986588
          },
          "action_type": "content_refresh",
          "measurement_id": 25
        }
      },
      {
        "id": 969,
        "site_key": "optiprime",
        "source_type": "seo_experiment_concluded",
        "subject_key": "refresh:comparis-assurance-maladie",
        "payload_json": {
          "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
          "conclusion": {
            "delta": {
              "ctr": 0.0,
              "clicks": 0.0,
              "position": 0.5987592219986588,
              "impressions": 194.0
            },
            "success": false,
            "conclusion": "rejected",
            "hypothesis": {
              "slug": "comparis-assurance-maladie",
              "query": "est-ce que comparis est un bon comparateur d'assurances maladie en suisse?",
              "autonomy": "auto_correctable",
              "baseline": {
                "ctr": 0.0,
                "clicks": 0,
                "position": 18.246478873239436,
                "impressions": 142
              },
              "site_key": "optiprime",
              "reasoning": [
                "article assez mature (42j)",
                "position proche d'un gain SEO (18.2)",
                "potentiel impression détecté (142)",
                "perte de clics probable: CTR 0.00% pour 142 impressions",
                "écart concurrentiel aligné avec la requête",
                "intent map confirme un refresh de la page actuelle"
              ],
              "risk_level": "medium",
              "action_type": "content_refresh",
              "playbook_id": "gain_position",
              "playbook_name": "Gagner des positions",
              "primary_metric": "position",
              "secondary_metrics": [
                "clicks",
                "impressions",
                "query_coverage"
              ],
              "expected_direction": "decrease"
            },
            "impact_label": "positive",
            "primary_metric_delta": 0.5987592219986588
          },
          "action_type": "refresh",
          "measurement_id": 24
        },
        "recorded_at": "2026-05-26 00:07:01.869092+00:00",
        "payload": {
          "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
          "conclusion": {
            "delta": {
              "ctr": 0.0,
              "clicks": 0.0,
              "position": 0.5987592219986588,
              "impressions": 194.0
            },
            "success": false,
            "conclusion": "rejected",
            "hypothesis": {
              "slug": "comparis-assurance-maladie",
              "query": "est-ce que comparis est un bon comparateur d'assurances maladie en suisse?",
              "autonomy": "auto_correctable",
              "baseline": {
                "ctr": 0.0,
                "clicks": 0,
                "position": 18.246478873239436,
                "impressions": 142
              },
              "site_key": "optiprime",
              "reasoning": [
                "article assez mature (42j)",
                "position proche d'un gain SEO (18.2)",
                "potentiel impression détecté (142)",
                "perte de clics probable: CTR 0.00% pour 142 impressions",
                "écart concurrentiel aligné avec la requête",
                "intent map confirme un refresh de la page actuelle"
              ],
              "risk_level": "medium",
              "action_type": "content_refresh",
              "playbook_id": "gain_position",
              "playbook_name": "Gagner des positions",
              "primary_metric": "position",
              "secondary_metrics": [
                "clicks",
                "impressions",
                "query_coverage"
              ],
              "expected_direction": "decrease"
            },
            "impact_label": "positive",
            "primary_metric_delta": 0.5987592219986588
          },
          "action_type": "refresh",
          "measurement_id": 24
        }
      },
      {
        "id": 968,
        "site_key": "optiprime",
        "source_type": "technical_audit",
        "subject_key": "optiprime",
        "payload_json": {
          "gsc": {
            "checked": false
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.optiprime.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.optiprime.ch",
              "final_url": "https://www.optiprime.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "index, follow",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            },
            {
              "ok": true,
              "url": "https://www.optiprime.ch/blog",
              "error": "",
              "noindex": false,
              "canonical": "https://www.optiprime.ch/blog",
              "final_url": "https://www.optiprime.ch/blog",
              "indexable": true,
              "redirected": false,
              "robots_meta": "index, follow",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.optiprime.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.optiprime.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.optiprime.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 21,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.optiprime.ch/",
                  "https://www.optiprime.ch/comparateur",
                  "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                  "https://www.optiprime.ch/assurance-maladie-suisse",
                  "https://www.optiprime.ch/assurance-maladie-pas-chere",
                  "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                  "https://www.optiprime.ch/prime-assurance-maladie-2026",
                  "https://www.optiprime.ch/blog",
                  "https://www.optiprime.ch/methodologie",
                  "https://www.optiprime.ch/confidentialite",
                  "https://www.optiprime.ch/blog/classement-assurance-de-base",
                  "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                  "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                  "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                  "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                  "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                  "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                  "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                  "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                  "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                  "https://www.optiprime.ch/blog/comparis-assurance-maladie"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.optiprime.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 21,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.optiprime.ch/",
                "https://www.optiprime.ch/comparateur",
                "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-pas-chere",
                "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                "https://www.optiprime.ch/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog",
                "https://www.optiprime.ch/methodologie",
                "https://www.optiprime.ch/confidentialite",
                "https://www.optiprime.ch/blog/classement-assurance-de-base",
                "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog/comparis-assurance-maladie"
              ]
            }
          },
          "site_key": "optiprime",
          "warnings": [
            "LCP mobile élevé (3092 ms)",
            "INP/FID desktop élevé (310 ms)"
          ],
          "pagespeed": {
            "ok": true,
            "cls": 0.002186,
            "inp_ms": 97.0,
            "lcp_ms": 3092.6307542905342,
            "mobile": {
              "ok": true,
              "cls": 0.002186,
              "inp_ms": 97.0,
              "lcp_ms": 3092.6307542905342,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 89.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.001698,
              "inp_ms": 310.9999999999999,
              "lcp_ms": 880.6986996400758,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 98.0
            },
            "strategy": "mobile",
            "performance_score": 89.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
                "error": "",
                "clicks": 0,
                "position": 26.717409587888984,
                "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
                "indexable": true,
                "top_query": "choix caisse-maladie",
                "redirected": false,
                "impressions": 1189,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 18.845238095238095,
                "canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "indexable": true,
                "top_query": "classement assurance de base",
                "redirected": false,
                "impressions": 336,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 36.07860262008734,
                "canonical": "https://www.optiprime.ch/blog",
                "final_url": "https://www.optiprime.ch/blog",
                "indexable": true,
                "top_query": "lamal suisse pas chère",
                "redirected": false,
                "impressions": 229,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 19.98989898989899,
                "canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/assurance-maladie",
                "indexable": true,
                "top_query": "guide assurance maladie suisse",
                "redirected": false,
                "impressions": 198,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 48.09090909090909,
                "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
                "indexable": true,
                "top_query": "meilleures caisses maladie suisse 2026",
                "redirected": false,
                "impressions": 132,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 5,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-25T18:15:03.736574Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.optiprime.ch",
              "https://www.optiprime.ch/blog"
            ],
            "listed_url_sample_size": 21
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 85
        },
        "recorded_at": "2026-05-26 00:06:58.177652+00:00",
        "payload": {
          "gsc": {
            "checked": false
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.optiprime.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.optiprime.ch",
              "final_url": "https://www.optiprime.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "index, follow",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            },
            {
              "ok": true,
              "url": "https://www.optiprime.ch/blog",
              "error": "",
              "noindex": false,
              "canonical": "https://www.optiprime.ch/blog",
              "final_url": "https://www.optiprime.ch/blog",
              "indexable": true,
              "redirected": false,
              "robots_meta": "index, follow",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.optiprime.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.optiprime.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.optiprime.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 21,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.optiprime.ch/",
                  "https://www.optiprime.ch/comparateur",
                  "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                  "https://www.optiprime.ch/assurance-maladie-suisse",
                  "https://www.optiprime.ch/assurance-maladie-pas-chere",
                  "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                  "https://www.optiprime.ch/prime-assurance-maladie-2026",
                  "https://www.optiprime.ch/blog",
                  "https://www.optiprime.ch/methodologie",
                  "https://www.optiprime.ch/confidentialite",
                  "https://www.optiprime.ch/blog/classement-assurance-de-base",
                  "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                  "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                  "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                  "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                  "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                  "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                  "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                  "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                  "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                  "https://www.optiprime.ch/blog/comparis-assurance-maladie"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.optiprime.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 21,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.optiprime.ch/",
                "https://www.optiprime.ch/comparateur",
                "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-pas-chere",
                "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                "https://www.optiprime.ch/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog",
                "https://www.optiprime.ch/methodologie",
                "https://www.optiprime.ch/confidentialite",
                "https://www.optiprime.ch/blog/classement-assurance-de-base",
                "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog/comparis-assurance-maladie"
              ]
            }
          },
          "site_key": "optiprime",
          "warnings": [
            "LCP mobile élevé (3092 ms)",
            "INP/FID desktop élevé (310 ms)"
          ],
          "pagespeed": {
            "ok": true,
            "cls": 0.002186,
            "inp_ms": 97.0,
            "lcp_ms": 3092.6307542905342,
            "mobile": {
              "ok": true,
              "cls": 0.002186,
              "inp_ms": 97.0,
              "lcp_ms": 3092.6307542905342,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 89.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.001698,
              "inp_ms": 310.9999999999999,
              "lcp_ms": 880.6986996400758,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 98.0
            },
            "strategy": "mobile",
            "performance_score": 89.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
                "error": "",
                "clicks": 0,
                "position": 26.717409587888984,
                "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
                "indexable": true,
                "top_query": "choix caisse-maladie",
                "redirected": false,
                "impressions": 1189,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 18.845238095238095,
                "canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "indexable": true,
                "top_query": "classement assurance de base",
                "redirected": false,
                "impressions": 336,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 36.07860262008734,
                "canonical": "https://www.optiprime.ch/blog",
                "final_url": "https://www.optiprime.ch/blog",
                "indexable": true,
                "top_query": "lamal suisse pas chère",
                "redirected": false,
                "impressions": 229,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 19.98989898989899,
                "canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/assurance-maladie",
                "indexable": true,
                "top_query": "guide assurance maladie suisse",
                "redirected": false,
                "impressions": 198,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 48.09090909090909,
                "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
                "indexable": true,
                "top_query": "meilleures caisses maladie suisse 2026",
                "redirected": false,
                "impressions": 132,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 5,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-25T18:15:03.736574Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.optiprime.ch",
              "https://www.optiprime.ch/blog"
            ],
            "listed_url_sample_size": 21
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 85
        }
      },
      {
        "id": 961,
        "site_key": "optiprime",
        "source_type": "technical_remediation",
        "subject_key": "optiprime",
        "payload_json": {
          "ok": true,
          "errors": [],
          "actions": [
            {
              "type": "optimize_lcp",
              "value": 6018.8,
              "metric": "lcp_ms",
              "target": "https://www.optiprime.ch",
              "priority": "high",
              "threshold": 2500,
              "recommended_changes": [
                "Identifier l'élément LCP mobile sur la home via PageSpeed/Lighthouse.",
                "Optimiser l'image ou le bloc hero responsable: format WebP/AVIF, dimensions adaptées, compression.",
                "Précharger ou prioriser uniquement l'asset LCP critique et différer les médias non critiques.",
                "Réduire CSS/JS bloquant au-dessus de la ligne de flottaison."
              ]
            }
          ],
          "changed": false,
          "attempted": true,
          "deployment": {
            "ok": true,
            "detail": "no_change",
            "checked": false
          }
        },
        "recorded_at": "2026-05-26 00:03:50.451281+00:00",
        "payload": {
          "ok": true,
          "errors": [],
          "actions": [
            {
              "type": "optimize_lcp",
              "value": 6018.8,
              "metric": "lcp_ms",
              "target": "https://www.optiprime.ch",
              "priority": "high",
              "threshold": 2500,
              "recommended_changes": [
                "Identifier l'élément LCP mobile sur la home via PageSpeed/Lighthouse.",
                "Optimiser l'image ou le bloc hero responsable: format WebP/AVIF, dimensions adaptées, compression.",
                "Précharger ou prioriser uniquement l'asset LCP critique et différer les médias non critiques.",
                "Réduire CSS/JS bloquant au-dessus de la ligne de flottaison."
              ]
            }
          ],
          "changed": false,
          "attempted": true,
          "deployment": {
            "ok": true,
            "detail": "no_change",
            "checked": false
          }
        }
      },
      {
        "id": 960,
        "site_key": "optiprime",
        "source_type": "technical_audit",
        "subject_key": "optiprime",
        "payload_json": {
          "gsc": {
            "ok": true,
            "checked": true,
            "message": "Connexion GSC OK",
            "payload": {
              "sample_rows": 1,
              "properties_count": 5,
              "resolved_property": "https://www.optiprime.ch"
            },
            "sitemap_url": "https://www.optiprime.ch/sitemap.xml",
            "sitemap_submission_ready": true
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.optiprime.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.optiprime.ch",
              "final_url": "https://www.optiprime.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "index, follow",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            },
            {
              "ok": true,
              "url": "https://www.optiprime.ch/blog",
              "error": "",
              "noindex": false,
              "canonical": "https://www.optiprime.ch/blog",
              "final_url": "https://www.optiprime.ch/blog",
              "indexable": true,
              "redirected": false,
              "robots_meta": "index, follow",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.optiprime.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.optiprime.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.optiprime.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 21,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.optiprime.ch/",
                  "https://www.optiprime.ch/comparateur",
                  "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                  "https://www.optiprime.ch/assurance-maladie-suisse",
                  "https://www.optiprime.ch/assurance-maladie-pas-chere",
                  "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                  "https://www.optiprime.ch/prime-assurance-maladie-2026",
                  "https://www.optiprime.ch/blog",
                  "https://www.optiprime.ch/methodologie",
                  "https://www.optiprime.ch/confidentialite",
                  "https://www.optiprime.ch/blog/classement-assurance-de-base",
                  "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                  "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                  "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                  "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                  "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                  "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                  "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                  "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                  "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                  "https://www.optiprime.ch/blog/comparis-assurance-maladie"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.optiprime.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 21,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.optiprime.ch/",
                "https://www.optiprime.ch/comparateur",
                "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-pas-chere",
                "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                "https://www.optiprime.ch/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog",
                "https://www.optiprime.ch/methodologie",
                "https://www.optiprime.ch/confidentialite",
                "https://www.optiprime.ch/blog/classement-assurance-de-base",
                "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog/comparis-assurance-maladie"
              ]
            }
          },
          "site_key": "optiprime",
          "warnings": [
            "LCP mobile élevé (6018 ms)",
            "INP/FID desktop élevé (1175 ms)"
          ],
          "pagespeed": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 119.0,
            "lcp_ms": 6018.827025234075,
            "mobile": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 119.0,
              "lcp_ms": 6018.827025234075,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 68.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.001698,
              "inp_ms": 1175.0,
              "lcp_ms": 1147.770754138626,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 62.0
            },
            "strategy": "mobile",
            "performance_score": 68.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
                "error": "",
                "clicks": 0,
                "position": 26.717409587888984,
                "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
                "indexable": true,
                "top_query": "choix caisse-maladie",
                "redirected": false,
                "impressions": 1189,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 18.845238095238095,
                "canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "indexable": true,
                "top_query": "classement assurance de base",
                "redirected": false,
                "impressions": 336,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 36.07860262008734,
                "canonical": "https://www.optiprime.ch/blog",
                "final_url": "https://www.optiprime.ch/blog",
                "indexable": true,
                "top_query": "lamal suisse pas chère",
                "redirected": false,
                "impressions": 229,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 19.98989898989899,
                "canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/assurance-maladie",
                "indexable": true,
                "top_query": "guide assurance maladie suisse",
                "redirected": false,
                "impressions": 198,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 48.09090909090909,
                "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
                "indexable": true,
                "top_query": "meilleures caisses maladie suisse 2026",
                "redirected": false,
                "impressions": 132,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 5,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-25T18:15:03.736574Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.optiprime.ch",
              "https://www.optiprime.ch/blog"
            ],
            "listed_url_sample_size": 21
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 85
        },
        "recorded_at": "2026-05-26 00:03:49.425298+00:00",
        "payload": {
          "gsc": {
            "ok": true,
            "checked": true,
            "message": "Connexion GSC OK",
            "payload": {
              "sample_rows": 1,
              "properties_count": 5,
              "resolved_property": "https://www.optiprime.ch"
            },
            "sitemap_url": "https://www.optiprime.ch/sitemap.xml",
            "sitemap_submission_ready": true
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.optiprime.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.optiprime.ch",
              "final_url": "https://www.optiprime.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "index, follow",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            },
            {
              "ok": true,
              "url": "https://www.optiprime.ch/blog",
              "error": "",
              "noindex": false,
              "canonical": "https://www.optiprime.ch/blog",
              "final_url": "https://www.optiprime.ch/blog",
              "indexable": true,
              "redirected": false,
              "robots_meta": "index, follow",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.optiprime.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.optiprime.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.optiprime.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 21,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.optiprime.ch/",
                  "https://www.optiprime.ch/comparateur",
                  "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                  "https://www.optiprime.ch/assurance-maladie-suisse",
                  "https://www.optiprime.ch/assurance-maladie-pas-chere",
                  "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                  "https://www.optiprime.ch/prime-assurance-maladie-2026",
                  "https://www.optiprime.ch/blog",
                  "https://www.optiprime.ch/methodologie",
                  "https://www.optiprime.ch/confidentialite",
                  "https://www.optiprime.ch/blog/classement-assurance-de-base",
                  "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                  "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                  "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                  "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                  "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                  "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                  "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                  "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                  "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                  "https://www.optiprime.ch/blog/comparis-assurance-maladie"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.optiprime.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 21,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.optiprime.ch/",
                "https://www.optiprime.ch/comparateur",
                "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-pas-chere",
                "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                "https://www.optiprime.ch/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog",
                "https://www.optiprime.ch/methodologie",
                "https://www.optiprime.ch/confidentialite",
                "https://www.optiprime.ch/blog/classement-assurance-de-base",
                "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog/comparis-assurance-maladie"
              ]
            }
          },
          "site_key": "optiprime",
          "warnings": [
            "LCP mobile élevé (6018 ms)",
            "INP/FID desktop élevé (1175 ms)"
          ],
          "pagespeed": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 119.0,
            "lcp_ms": 6018.827025234075,
            "mobile": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 119.0,
              "lcp_ms": 6018.827025234075,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 68.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.001698,
              "inp_ms": 1175.0,
              "lcp_ms": 1147.770754138626,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 62.0
            },
            "strategy": "mobile",
            "performance_score": 68.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
                "error": "",
                "clicks": 0,
                "position": 26.717409587888984,
                "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
                "indexable": true,
                "top_query": "choix caisse-maladie",
                "redirected": false,
                "impressions": 1189,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 18.845238095238095,
                "canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
                "indexable": true,
                "top_query": "classement assurance de base",
                "redirected": false,
                "impressions": 336,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 36.07860262008734,
                "canonical": "https://www.optiprime.ch/blog",
                "final_url": "https://www.optiprime.ch/blog",
                "indexable": true,
                "top_query": "lamal suisse pas chère",
                "redirected": false,
                "impressions": 229,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 19.98989898989899,
                "canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/assurance-maladie",
                "indexable": true,
                "top_query": "guide assurance maladie suisse",
                "redirected": false,
                "impressions": 198,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
                "error": "",
                "clicks": 0,
                "position": 48.09090909090909,
                "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
                "indexable": true,
                "top_query": "meilleures caisses maladie suisse 2026",
                "redirected": false,
                "impressions": 132,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 5,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-25T18:15:03.736574Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.optiprime.ch",
              "https://www.optiprime.ch/blog"
            ],
            "listed_url_sample_size": 21
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 85
        }
      },
      {
        "id": 952,
        "site_key": "optiprime",
        "source_type": "workflow_state",
        "subject_key": "recent_events",
        "payload_json": {
          "events": [
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 69,
                "queries_28d": 114,
                "page_query_28d": 180
              },
              "recorded_at": "2026-05-22T06:15:04.339053Z"
            },
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 69,
                "queries_28d": 114,
                "page_query_28d": 180
              },
              "recorded_at": "2026-05-22T12:15:03.370843Z"
            },
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 69,
                "queries_28d": 114,
                "page_query_28d": 180
              },
              "recorded_at": "2026-05-22T18:15:03.220237Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-23T00:00:12.242483Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-24T00:00:20.428130Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 1,
                "watch_count": 5,
                "create_count": 1,
                "deleted_count": 0,
                "optimize_count": 6
              },
              "recorded_at": "2026-05-24T20:15:02.820740Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-25T00:00:14.071260Z"
            },
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 63,
                "queries_28d": 116,
                "page_query_28d": 183
              },
              "recorded_at": "2026-05-25T06:15:03.269088Z"
            },
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 63,
                "queries_28d": 116,
                "page_query_28d": 183
              },
              "recorded_at": "2026-05-25T12:15:03.349442Z"
            },
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 63,
                "queries_28d": 116,
                "page_query_28d": 183
              },
              "recorded_at": "2026-05-25T18:15:03.748978Z"
            }
          ]
        },
        "recorded_at": "2026-05-26 00:00:19.638924+00:00",
        "payload": {
          "events": [
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 69,
                "queries_28d": 114,
                "page_query_28d": 180
              },
              "recorded_at": "2026-05-22T06:15:04.339053Z"
            },
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 69,
                "queries_28d": 114,
                "page_query_28d": 180
              },
              "recorded_at": "2026-05-22T12:15:03.370843Z"
            },
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 69,
                "queries_28d": 114,
                "page_query_28d": 180
              },
              "recorded_at": "2026-05-22T18:15:03.220237Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-23T00:00:12.242483Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-24T00:00:20.428130Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 1,
                "watch_count": 5,
                "create_count": 1,
                "deleted_count": 0,
                "optimize_count": 6
              },
              "recorded_at": "2026-05-24T20:15:02.820740Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-25T00:00:14.071260Z"
            },
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 63,
                "queries_28d": 116,
                "page_query_28d": 183
              },
              "recorded_at": "2026-05-25T06:15:03.269088Z"
            },
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 63,
                "queries_28d": 116,
                "page_query_28d": 183
              },
              "recorded_at": "2026-05-25T12:15:03.349442Z"
            },
            {
              "type": "gsc_sync",
              "payload": {
                "pages_7d": 5,
                "pages_28d": 5,
                "queries_7d": 63,
                "queries_28d": 116,
                "page_query_28d": 183
              },
              "recorded_at": "2026-05-25T18:15:03.748978Z"
            }
          ]
        }
      },
      {
        "id": 951,
        "site_key": "optiprime",
        "source_type": "queue_state",
        "subject_key": "recent_queue",
        "payload_json": {
          "recent_rows": [
            {
              "id": 325,
              "slug": "classement-assurance-de-base",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-25T09:00:32.731572+00:00",
              "scheduled_at": "2026-05-25T07:00:00+00:00"
            },
            {
              "id": 295,
              "slug": "meilleures-caisses-maladie-suisse-2026",
              "error": "not present in local blog inventory",
              "status": "scheduled",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": null,
              "scheduled_at": "2026-06-03T07:00:00+00:00"
            },
            {
              "id": 294,
              "slug": "lamal-suisse-pas-chere",
              "error": "not present in local blog inventory",
              "status": "scheduled",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": null,
              "scheduled_at": "2026-06-02T07:00:00+00:00"
            },
            {
              "id": 293,
              "slug": "guide-assurance-maladie-suisse",
              "error": "not present in local blog inventory",
              "status": "scheduled",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": null,
              "scheduled_at": "2026-06-04T07:00:00+00:00"
            },
            {
              "id": 108,
              "slug": "prime-assurance-maladie-2026",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-08",
              "scheduled_at": null
            },
            {
              "id": 107,
              "slug": "changer-assurance-maladie-suisse",
              "error": "not present in local blog inventory",
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-15T09:00:38.440609+00:00",
              "scheduled_at": "2026-05-15T07:00:00+00:00"
            },
            {
              "id": 106,
              "slug": "meilleure-lamal-suisse",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-06",
              "scheduled_at": null
            },
            {
              "id": 105,
              "slug": "comparaison-assurance-de-base",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-05",
              "scheduled_at": null
            },
            {
              "id": 104,
              "slug": "comment-choisir-assurance-sante-suisse",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-04",
              "scheduled_at": null
            },
            {
              "id": 98,
              "slug": "groupe-mutuel",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 97,
              "slug": "css-assurance",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 96,
              "slug": "comparis-assurance-maladie",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 95,
              "slug": "comparatif-assurance-maladie",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-28",
              "scheduled_at": null
            },
            {
              "id": 94,
              "slug": "comparateur-assurance-maladie-suisse",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-29",
              "scheduled_at": null
            },
            {
              "id": 93,
              "slug": "attenuer-l-assurance-maladie",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 92,
              "slug": "assurance-maladie-neuchatel",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 91,
              "slug": "assurance-comparative-maladie",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 90,
              "slug": "ameli",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 13,
              "slug": "franchise-assurance-maladie-suisse",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-06-01T07:00:00+00:00",
              "scheduled_at": null
            },
            {
              "id": 12,
              "slug": "criteres-assurance-maladie-suisse",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-05-29T07:00:00+00:00",
              "scheduled_at": null
            }
          ]
        },
        "recorded_at": "2026-05-26 00:00:19.610074+00:00",
        "payload": {
          "recent_rows": [
            {
              "id": 325,
              "slug": "classement-assurance-de-base",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-25T09:00:32.731572+00:00",
              "scheduled_at": "2026-05-25T07:00:00+00:00"
            },
            {
              "id": 295,
              "slug": "meilleures-caisses-maladie-suisse-2026",
              "error": "not present in local blog inventory",
              "status": "scheduled",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": null,
              "scheduled_at": "2026-06-03T07:00:00+00:00"
            },
            {
              "id": 294,
              "slug": "lamal-suisse-pas-chere",
              "error": "not present in local blog inventory",
              "status": "scheduled",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": null,
              "scheduled_at": "2026-06-02T07:00:00+00:00"
            },
            {
              "id": 293,
              "slug": "guide-assurance-maladie-suisse",
              "error": "not present in local blog inventory",
              "status": "scheduled",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": null,
              "scheduled_at": "2026-06-04T07:00:00+00:00"
            },
            {
              "id": 108,
              "slug": "prime-assurance-maladie-2026",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-08",
              "scheduled_at": null
            },
            {
              "id": 107,
              "slug": "changer-assurance-maladie-suisse",
              "error": "not present in local blog inventory",
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-15T09:00:38.440609+00:00",
              "scheduled_at": "2026-05-15T07:00:00+00:00"
            },
            {
              "id": 106,
              "slug": "meilleure-lamal-suisse",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-06",
              "scheduled_at": null
            },
            {
              "id": 105,
              "slug": "comparaison-assurance-de-base",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-05",
              "scheduled_at": null
            },
            {
              "id": 104,
              "slug": "comment-choisir-assurance-sante-suisse",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 1,
              "gsc_indexed": 0,
              "published_at": "2026-05-04",
              "scheduled_at": null
            },
            {
              "id": 98,
              "slug": "groupe-mutuel",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 97,
              "slug": "css-assurance",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 96,
              "slug": "comparis-assurance-maladie",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 95,
              "slug": "comparatif-assurance-maladie",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-28",
              "scheduled_at": null
            },
            {
              "id": 94,
              "slug": "comparateur-assurance-maladie-suisse",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-29",
              "scheduled_at": null
            },
            {
              "id": 93,
              "slug": "attenuer-l-assurance-maladie",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 92,
              "slug": "assurance-maladie-neuchatel",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 91,
              "slug": "assurance-comparative-maladie",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 90,
              "slug": "ameli",
              "error": null,
              "status": "deleted",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-03-31",
              "scheduled_at": null
            },
            {
              "id": 13,
              "slug": "franchise-assurance-maladie-suisse",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-06-01T07:00:00+00:00",
              "scheduled_at": null
            },
            {
              "id": 12,
              "slug": "criteres-assurance-maladie-suisse",
              "error": null,
              "status": "published",
              "attempts": 0,
              "vercel_ok": 0,
              "gsc_indexed": 0,
              "published_at": "2026-05-29T07:00:00+00:00",
              "scheduled_at": null
            }
          ]
        }
      }
    ],
    "live_state": {
      "queue": {
        "by_status": {
          "deleted": 6,
          "published": 14,
          "scheduled": 4
        },
        "recent_items": [
          {
            "id": 325,
            "slug": "classement-assurance-de-base",
            "status": "scheduled",
            "scheduled_at": "2026-06-05T07:00:00+00:00",
            "published_at": null,
            "error": "not present in local blog inventory",
            "attempts": 0
          },
          {
            "id": 295,
            "slug": "meilleures-caisses-maladie-suisse-2026",
            "status": "scheduled",
            "scheduled_at": "2026-06-03T07:00:00+00:00",
            "published_at": null,
            "error": "not present in local blog inventory",
            "attempts": 0
          },
          {
            "id": 294,
            "slug": "lamal-suisse-pas-chere",
            "status": "scheduled",
            "scheduled_at": "2026-06-02T07:00:00+00:00",
            "published_at": null,
            "error": "not present in local blog inventory",
            "attempts": 0
          },
          {
            "id": 293,
            "slug": "guide-assurance-maladie-suisse",
            "status": "scheduled",
            "scheduled_at": "2026-06-04T07:00:00+00:00",
            "published_at": null,
            "error": "not present in local blog inventory",
            "attempts": 0
          },
          {
            "id": 108,
            "slug": "prime-assurance-maladie-2026",
            "status": "published",
            "scheduled_at": null,
            "published_at": "2026-05-08",
            "error": null,
            "attempts": 0
          }
        ]
      },
      "gsc": {
        "saved_at": "2026-05-26T18:15:03.404964Z",
        "top_pages": [
          {
            "page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
            "clicks": 0,
            "impressions": 1177,
            "ctr": 0.0,
            "position": 26.832625318606627,
            "top_query": "choix caisse-maladie"
          },
          {
            "page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
            "clicks": 0,
            "impressions": 339,
            "ctr": 0.0,
            "position": 18.991150442477878,
            "top_query": "classement assurance de base"
          },
          {
            "page": "https://www.optiprime.ch/blog",
            "clicks": 0,
            "impressions": 240,
            "ctr": 0.0,
            "position": 36.0875,
            "top_query": "lamal suisse pas chère"
          }
        ],
        "top_queries": [
          {
            "query": "assurance obligatoire la moins chère",
            "clicks": 0,
            "impressions": 98,
            "ctr": 0.0,
            "position": 24.79591836734694
          },
          {
            "query": "comparer assurance obligatoire",
            "clicks": 0,
            "impressions": 94,
            "ctr": 0.0,
            "position": 23.0
          },
          {
            "query": "choix caisse-maladie",
            "clicks": 0,
            "impressions": 93,
            "ctr": 0.0,
            "position": 26.827956989247312
          },
          {
            "query": "choix caisse maladie",
            "clicks": 0,
            "impressions": 86,
            "ctr": 0.0,
            "position": 26.63953488372093
          },
          {
            "query": "assurance maladie suisse pas chère",
            "clicks": 0,
            "impressions": 67,
            "ctr": 0.0,
            "position": 26.52238805970149
          }
        ]
      },
      "workflow": {
        "updated_at": "2026-05-26T18:15:03.414343Z",
        "recent_events": [
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 63,
              "queries_28d": 116,
              "page_query_28d": 183
            },
            "recorded_at": "2026-05-25T18:15:03.748978Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "lessons_created": 1,
              "sop_name": "adaptive-feedback-playbook"
            },
            "recorded_at": "2026-05-26T00:00:22.573754Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 58,
              "queries_28d": 118,
              "page_query_28d": 185
            },
            "recorded_at": "2026-05-26T06:15:04.062628Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 58,
              "queries_28d": 118,
              "page_query_28d": 185
            },
            "recorded_at": "2026-05-26T12:15:05.132889Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 58,
              "queries_28d": 118,
              "page_query_28d": 185
            },
            "recorded_at": "2026-05-26T18:15:03.414212Z"
          }
        ]
      }
    },
    "site_context": {
      "site_key": "optiprime",
      "project_name": "Optiprime",
      "project_type": "repo_files",
      "site_url": "https://www.optiprime.ch",
      "base_url": "https://www.optiprime.ch/blog",
      "gsc_property": "https://www.optiprime.ch",
      "gsc_blog_prefix": "https://www.optiprime.ch/blog",
      "agent_mode": "full_autonomy",
      "operator_policy": "agent_driven",
      "primary_market": "ch",
      "target_countries": [
        "ch",
        "fr"
      ],
      "seo_scope": "national",
      "competitors": [
        {
          "label": "Sante.app LAMal",
          "url": "https://sante.app/lamal/",
          "notes": ""
        },
        {
          "label": "Komparator Assurance Maladie",
          "url": "https://www.komparator.ch/comparateur-assurances-maladie/",
          "notes": ""
        }
      ],
      "editorial_policy": {
        "queue_target_max": 10,
        "queue_resume_threshold": 2,
        "publish_timezone": "Europe/Paris",
        "publish_hour_local": 9,
        "publish_weekdays_only": true,
        "max_daily_publishes": 1,
        "keyword_min_volume": 50,
        "keyword_max_difficulty": 45
      },
      "image_policy": {
        "style_guardrail": "editorial_photo",
        "subject_focus": "advisory_objects",
        "allow_humans": "limited",
        "fallback_enabled": true,
        "max_prompt_variants": 5,
        "min_quality_score": 70
      },
      "features": {
        "gsc_enabled": true,
        "writer_gsc_enabled": true,
        "gsc_opportunities_enabled": true,
        "seo_panel_enabled": true,
        "crawler_enabled": true,
        "linkmap_enabled": true
      }
    }
  },
  "validated_lessons": [
    {
      "id": 150,
      "site_key": "optiprime",
      "category": "ctr_optimization",
      "lesson": "Several visible pages have low CTR. Prioritize title, meta description, and intent alignment refreshes before creating net new content.",
      "confidence": "high",
      "source": "feedback_loop",
      "status": "validated",
      "details_json": {
        "pages": [
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
            "clicks": 0,
            "position": 26.717409587888984,
            "top_query": "choix caisse-maladie",
            "impressions": 1189
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
            "clicks": 0,
            "position": 18.845238095238095,
            "top_query": "classement assurance de base",
            "impressions": 336
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog",
            "clicks": 0,
            "position": 36.07860262008734,
            "top_query": "lamal suisse pas chère",
            "impressions": 229
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/assurance-maladie",
            "clicks": 0,
            "position": 19.98989898989899,
            "top_query": "guide assurance maladie suisse",
            "impressions": 198
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
            "clicks": 0,
            "position": 48.09090909090909,
            "top_query": "meilleures caisses maladie suisse 2026",
            "impressions": 132
          }
        ]
      },
      "created_at": "2026-05-26 00:00:22.059967+00:00",
      "updated_at": "2026-05-26 00:00:22.688378+00:00",
      "details": {
        "pages": [
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
            "clicks": 0,
            "position": 26.717409587888984,
            "top_query": "choix caisse-maladie",
            "impressions": 1189
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
            "clicks": 0,
            "position": 18.845238095238095,
            "top_query": "classement assurance de base",
            "impressions": 336
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog",
            "clicks": 0,
            "position": 36.07860262008734,
            "top_query": "lamal suisse pas chère",
            "impressions": 229
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/assurance-maladie",
            "clicks": 0,
            "position": 19.98989898989899,
            "top_query": "guide assurance maladie suisse",
            "impressions": 198
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
            "clicks": 0,
            "position": 48.09090909090909,
            "top_query": "meilleures caisses maladie suisse 2026",
            "impressions": 132
          }
        ]
      }
    },
    {
      "id": 124,
      "site_key": "optiprime",
      "category": "throughput",
      "lesson": "Queue pressure is high. Reduce draft generation and prioritize review, refresh, and publishing throughput.",
      "confidence": "high",
      "source": "feedback_loop",
      "status": "validated",
      "details_json": {
        "failed_count": 0,
        "queued_count": 5
      },
      "created_at": "2026-05-16 00:00:12.014717+00:00",
      "updated_at": "2026-05-16 00:00:12.496888+00:00",
      "details": {
        "failed_count": 0,
        "queued_count": 5
      }
    },
    {
      "id": 18,
      "site_key": "optiprime",
      "category": "measurement",
      "lesson": "Mesurer après publication améliore la qualité des SOP.",
      "confidence": "high",
      "source": "manual",
      "status": "validated",
      "details_json": {},
      "created_at": "2026-04-24 13:35:15.566161+00:00",
      "updated_at": "2026-04-24 13:35:15.566161+00:00",
      "details": {}
    },
    {
      "id": 17,
      "site_key": "optiprime",
      "category": "measurement",
      "lesson": "Measured SEO actions are generating positive post-action deltas. Increase trust in SOPs that led to these actions.",
      "confidence": "high",
      "source": "measurement_loop",
      "status": "validated",
      "details_json": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.5987592219986588,
          "impressions": 194.0
        },
        "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
        "action_type": "content_refresh",
        "subject_key": "content-refresh:comparis-assurance-maladie",
        "impact_label": "positive",
        "impact_score": 18.202481556002684,
        "measurement_id": 25
      },
      "created_at": "2026-04-24 13:35:15.533922+00:00",
      "updated_at": "2026-05-26 00:07:02.077574+00:00",
      "details": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.5987592219986588,
          "impressions": 194.0
        },
        "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
        "action_type": "content_refresh",
        "subject_key": "content-refresh:comparis-assurance-maladie",
        "impact_label": "positive",
        "impact_score": 18.202481556002684,
        "measurement_id": 25
      }
    },
    {
      "id": 14,
      "site_key": "optiprime",
      "category": "measurement",
      "lesson": "Toujours mesurer après action.",
      "confidence": "high",
      "source": "manual",
      "status": "validated",
      "details_json": {},
      "created_at": "2026-04-24 13:35:15.426383+00:00",
      "updated_at": "2026-04-24 13:35:15.426383+00:00",
      "details": {}
    }
  ],
  "active_sops": [
    {
      "id": 122,
      "site_key": "optiprime",
      "scope": "site",
      "name": "adaptive-feedback-playbook",
      "version": 22,
      "status": "draft",
      "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
      "source": "feedback_loop",
      "created_at": "2026-05-26 00:00:22.213806+00:00",
      "updated_at": "2026-05-26 09:07:02.279125+00:00",
      "confidence_score": 100,
      "confidence_label": "high"
    },
    {
      "id": 119,
      "site_key": "optiprime",
      "scope": "site",
      "name": "learningseo-site-improvement-playbook",
      "version": 33,
      "status": "draft",
      "content": "1. Before new draft creation, verify that the target intent is not already partially served by an existing URL.\n2. Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.\n3. Prioritize title/H1/intent refreshes on visible pages before creating new pages for adjacent intents.\n4. Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.\n5. Automated actions must emit events, measurements, and postmortems by default.",
      "source": "learningseo_daily",
      "created_at": "2026-05-26 00:00:15.500694+00:00",
      "updated_at": "2026-05-26 09:07:02.265885+00:00",
      "confidence_score": 100,
      "confidence_label": "high"
    },
    {
      "id": 116,
      "site_key": "optiprime",
      "scope": "site",
      "name": "adaptive-feedback-playbook",
      "version": 21,
      "status": "deprecated",
      "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
      "source": "feedback_loop",
      "created_at": "2026-05-25 00:00:13.195343+00:00",
      "updated_at": "2026-05-26 09:07:02.901311+00:00",
      "confidence_score": 100,
      "confidence_label": "high"
    },
    {
      "id": 86,
      "site_key": "optiprime",
      "scope": "site",
      "name": "learningseo-site-improvement-playbook",
      "version": 24,
      "status": "deprecated",
      "content": "1. Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.\n2. Prioritize title/H1/intent refreshes on visible pages before creating new pages for adjacent intents.\n3. Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.\n4. Automated actions must emit events, measurements, and postmortems by default.",
      "source": "learningseo_daily",
      "created_at": "2026-05-17 00:00:12.338838+00:00",
      "updated_at": "2026-05-26 09:07:02.888898+00:00",
      "confidence_score": 100,
      "confidence_label": "high"
    },
    {
      "id": 84,
      "site_key": "optiprime",
      "scope": "site",
      "name": "adaptive-feedback-playbook",
      "version": 16,
      "status": "deprecated",
      "content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
      "source": "feedback_loop",
      "created_at": "2026-05-16 00:00:12.103808+00:00",
      "updated_at": "2026-05-26 09:07:02.876590+00:00",
      "confidence_score": 100,
      "confidence_label": "high"
    }
  ],
  "recent_outcomes": [
    {
      "id": 251,
      "site_key": "optiprime",
      "outcome_type": "measurement_result",
      "subject_key": "publish:comment-choisir-assurance-sante-suisse",
      "metric_name": "impact_score",
      "metric_value": 0.0,
      "payload_json": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
        "action_type": "publish",
        "impact_label": "neutral",
        "measurement_id": 26
      },
      "recorded_at": "2026-05-26 09:07:02.120461+00:00",
      "payload": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
        "action_type": "publish",
        "impact_label": "neutral",
        "measurement_id": 26
      }
    },
    {
      "id": 250,
      "site_key": "optiprime",
      "outcome_type": "gsc_delta",
      "subject_key": "publish:comment-choisir-assurance-sante-suisse",
      "metric_name": "position",
      "metric_value": 0.0,
      "payload_json": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "current": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "baseline": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
      },
      "recorded_at": "2026-05-26 09:07:02.096314+00:00",
      "payload": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "current": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "baseline": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
      }
    },
    {
      "id": 249,
      "site_key": "optiprime",
      "outcome_type": "gsc_delta",
      "subject_key": "publish:comment-choisir-assurance-sante-suisse",
      "metric_name": "ctr",
      "metric_value": 0.0,
      "payload_json": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "current": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "baseline": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
      },
      "recorded_at": "2026-05-26 09:07:02.076316+00:00",
      "payload": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "current": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "baseline": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
      }
    },
    {
      "id": 248,
      "site_key": "optiprime",
      "outcome_type": "gsc_delta",
      "subject_key": "publish:comment-choisir-assurance-sante-suisse",
      "metric_name": "impressions",
      "metric_value": 0.0,
      "payload_json": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "current": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "baseline": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
      },
      "recorded_at": "2026-05-26 09:07:02.059405+00:00",
      "payload": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "current": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "baseline": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
      }
    },
    {
      "id": 247,
      "site_key": "optiprime",
      "outcome_type": "gsc_delta",
      "subject_key": "publish:comment-choisir-assurance-sante-suisse",
      "metric_name": "clicks",
      "metric_value": 0.0,
      "payload_json": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "current": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "baseline": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
      },
      "recorded_at": "2026-05-26 09:07:02.022567+00:00",
      "payload": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "current": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "baseline": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.0,
          "impressions": 0.0
        },
        "page_url": "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse"
      }
    },
    {
      "id": 246,
      "site_key": "optiprime",
      "outcome_type": "seo_experiment_result",
      "subject_key": "content-refresh:comparis-assurance-maladie",
      "metric_name": "position",
      "metric_value": 0.5987592219986588,
      "payload_json": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.5987592219986588,
          "impressions": 194.0
        },
        "success": false,
        "conclusion": "rejected",
        "hypothesis": {
          "slug": "comparis-assurance-maladie",
          "query": "est-ce que comparis est un bon comparateur d'assurances maladie en suisse?",
          "autonomy": "auto_correctable",
          "baseline": {
            "ctr": 0.0,
            "clicks": 0,
            "position": 18.246478873239436,
            "impressions": 142
          },
          "site_key": "optiprime",
          "reasoning": [
            "article assez mature (42j)",
            "position proche d'un gain SEO (18.2)",
            "potentiel impression détecté (142)",
            "perte de clics probable: CTR 0.00% pour 142 impressions",
            "écart concurrentiel aligné avec la requête",
            "intent map confirme un refresh de la page actuelle"
          ],
          "risk_level": "medium",
          "action_type": "content_refresh",
          "playbook_id": "gain_position",
          "playbook_name": "Gagner des positions",
          "primary_metric": "position",
          "secondary_metrics": [
            "clicks",
            "impressions",
            "query_coverage"
          ],
          "expected_direction": "decrease"
        },
        "impact_label": "positive",
        "primary_metric_delta": 0.5987592219986588
      },
      "recorded_at": "2026-05-26 00:07:02.072245+00:00",
      "payload": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.5987592219986588,
          "impressions": 194.0
        },
        "success": false,
        "conclusion": "rejected",
        "hypothesis": {
          "slug": "comparis-assurance-maladie",
          "query": "est-ce que comparis est un bon comparateur d'assurances maladie en suisse?",
          "autonomy": "auto_correctable",
          "baseline": {
            "ctr": 0.0,
            "clicks": 0,
            "position": 18.246478873239436,
            "impressions": 142
          },
          "site_key": "optiprime",
          "reasoning": [
            "article assez mature (42j)",
            "position proche d'un gain SEO (18.2)",
            "potentiel impression détecté (142)",
            "perte de clics probable: CTR 0.00% pour 142 impressions",
            "écart concurrentiel aligné avec la requête",
            "intent map confirme un refresh de la page actuelle"
          ],
          "risk_level": "medium",
          "action_type": "content_refresh",
          "playbook_id": "gain_position",
          "playbook_name": "Gagner des positions",
          "primary_metric": "position",
          "secondary_metrics": [
            "clicks",
            "impressions",
            "query_coverage"
          ],
          "expected_direction": "decrease"
        },
        "impact_label": "positive",
        "primary_metric_delta": 0.5987592219986588
      }
    },
    {
      "id": 245,
      "site_key": "optiprime",
      "outcome_type": "measurement_result",
      "subject_key": "content-refresh:comparis-assurance-maladie",
      "metric_name": "impact_score",
      "metric_value": 18.202481556002684,
      "payload_json": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.5987592219986588,
          "impressions": 194.0
        },
        "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
        "action_type": "content_refresh",
        "impact_label": "positive",
        "measurement_id": 25
      },
      "recorded_at": "2026-05-26 00:07:02.006456+00:00",
      "payload": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.5987592219986588,
          "impressions": 194.0
        },
        "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
        "action_type": "content_refresh",
        "impact_label": "positive",
        "measurement_id": 25
      }
    },
    {
      "id": 244,
      "site_key": "optiprime",
      "outcome_type": "gsc_delta",
      "subject_key": "content-refresh:comparis-assurance-maladie",
      "metric_name": "position",
      "metric_value": 0.5987592219986588,
      "payload_json": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.5987592219986588,
          "impressions": 194.0
        },
        "current": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 18.845238095238095,
          "impressions": 336.0
        },
        "baseline": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 18.246478873239436,
          "impressions": 142.0
        },
        "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie"
      },
      "recorded_at": "2026-05-26 00:07:01.986621+00:00",
      "payload": {
        "delta": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 0.5987592219986588,
          "impressions": 194.0
        },
        "current": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 18.845238095238095,
          "impressions": 336.0
        },
        "baseline": {
          "ctr": 0.0,
          "clicks": 0.0,
          "position": 18.246478873239436,
          "impressions": 142.0
        },
        "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie"
      }
    }
  ],
  "recent_observations": [
    {
      "id": 970,
      "site_key": "optiprime",
      "source_type": "seo_experiment_concluded",
      "subject_key": "content-refresh:comparis-assurance-maladie",
      "payload_json": {
        "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
        "conclusion": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.5987592219986588,
            "impressions": 194.0
          },
          "success": false,
          "conclusion": "rejected",
          "hypothesis": {
            "slug": "comparis-assurance-maladie",
            "query": "est-ce que comparis est un bon comparateur d'assurances maladie en suisse?",
            "autonomy": "auto_correctable",
            "baseline": {
              "ctr": 0.0,
              "clicks": 0,
              "position": 18.246478873239436,
              "impressions": 142
            },
            "site_key": "optiprime",
            "reasoning": [
              "article assez mature (42j)",
              "position proche d'un gain SEO (18.2)",
              "potentiel impression détecté (142)",
              "perte de clics probable: CTR 0.00% pour 142 impressions",
              "écart concurrentiel aligné avec la requête",
              "intent map confirme un refresh de la page actuelle"
            ],
            "risk_level": "medium",
            "action_type": "content_refresh",
            "playbook_id": "gain_position",
            "playbook_name": "Gagner des positions",
            "primary_metric": "position",
            "secondary_metrics": [
              "clicks",
              "impressions",
              "query_coverage"
            ],
            "expected_direction": "decrease"
          },
          "impact_label": "positive",
          "primary_metric_delta": 0.5987592219986588
        },
        "action_type": "content_refresh",
        "measurement_id": 25
      },
      "recorded_at": "2026-05-26 00:07:02.038445+00:00",
      "payload": {
        "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
        "conclusion": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.5987592219986588,
            "impressions": 194.0
          },
          "success": false,
          "conclusion": "rejected",
          "hypothesis": {
            "slug": "comparis-assurance-maladie",
            "query": "est-ce que comparis est un bon comparateur d'assurances maladie en suisse?",
            "autonomy": "auto_correctable",
            "baseline": {
              "ctr": 0.0,
              "clicks": 0,
              "position": 18.246478873239436,
              "impressions": 142
            },
            "site_key": "optiprime",
            "reasoning": [
              "article assez mature (42j)",
              "position proche d'un gain SEO (18.2)",
              "potentiel impression détecté (142)",
              "perte de clics probable: CTR 0.00% pour 142 impressions",
              "écart concurrentiel aligné avec la requête",
              "intent map confirme un refresh de la page actuelle"
            ],
            "risk_level": "medium",
            "action_type": "content_refresh",
            "playbook_id": "gain_position",
            "playbook_name": "Gagner des positions",
            "primary_metric": "position",
            "secondary_metrics": [
              "clicks",
              "impressions",
              "query_coverage"
            ],
            "expected_direction": "decrease"
          },
          "impact_label": "positive",
          "primary_metric_delta": 0.5987592219986588
        },
        "action_type": "content_refresh",
        "measurement_id": 25
      }
    },
    {
      "id": 969,
      "site_key": "optiprime",
      "source_type": "seo_experiment_concluded",
      "subject_key": "refresh:comparis-assurance-maladie",
      "payload_json": {
        "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
        "conclusion": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.5987592219986588,
            "impressions": 194.0
          },
          "success": false,
          "conclusion": "rejected",
          "hypothesis": {
            "slug": "comparis-assurance-maladie",
            "query": "est-ce que comparis est un bon comparateur d'assurances maladie en suisse?",
            "autonomy": "auto_correctable",
            "baseline": {
              "ctr": 0.0,
              "clicks": 0,
              "position": 18.246478873239436,
              "impressions": 142
            },
            "site_key": "optiprime",
            "reasoning": [
              "article assez mature (42j)",
              "position proche d'un gain SEO (18.2)",
              "potentiel impression détecté (142)",
              "perte de clics probable: CTR 0.00% pour 142 impressions",
              "écart concurrentiel aligné avec la requête",
              "intent map confirme un refresh de la page actuelle"
            ],
            "risk_level": "medium",
            "action_type": "content_refresh",
            "playbook_id": "gain_position",
            "playbook_name": "Gagner des positions",
            "primary_metric": "position",
            "secondary_metrics": [
              "clicks",
              "impressions",
              "query_coverage"
            ],
            "expected_direction": "decrease"
          },
          "impact_label": "positive",
          "primary_metric_delta": 0.5987592219986588
        },
        "action_type": "refresh",
        "measurement_id": 24
      },
      "recorded_at": "2026-05-26 00:07:01.869092+00:00",
      "payload": {
        "page_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
        "conclusion": {
          "delta": {
            "ctr": 0.0,
            "clicks": 0.0,
            "position": 0.5987592219986588,
            "impressions": 194.0
          },
          "success": false,
          "conclusion": "rejected",
          "hypothesis": {
            "slug": "comparis-assurance-maladie",
            "query": "est-ce que comparis est un bon comparateur d'assurances maladie en suisse?",
            "autonomy": "auto_correctable",
            "baseline": {
              "ctr": 0.0,
              "clicks": 0,
              "position": 18.246478873239436,
              "impressions": 142
            },
            "site_key": "optiprime",
            "reasoning": [
              "article assez mature (42j)",
              "position proche d'un gain SEO (18.2)",
              "potentiel impression détecté (142)",
              "perte de clics probable: CTR 0.00% pour 142 impressions",
              "écart concurrentiel aligné avec la requête",
              "intent map confirme un refresh de la page actuelle"
            ],
            "risk_level": "medium",
            "action_type": "content_refresh",
            "playbook_id": "gain_position",
            "playbook_name": "Gagner des positions",
            "primary_metric": "position",
            "secondary_metrics": [
              "clicks",
              "impressions",
              "query_coverage"
            ],
            "expected_direction": "decrease"
          },
          "impact_label": "positive",
          "primary_metric_delta": 0.5987592219986588
        },
        "action_type": "refresh",
        "measurement_id": 24
      }
    },
    {
      "id": 968,
      "site_key": "optiprime",
      "source_type": "technical_audit",
      "subject_key": "optiprime",
      "payload_json": {
        "gsc": {
          "checked": false
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.optiprime.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.optiprime.ch",
            "final_url": "https://www.optiprime.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "index, follow",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          },
          {
            "ok": true,
            "url": "https://www.optiprime.ch/blog",
            "error": "",
            "noindex": false,
            "canonical": "https://www.optiprime.ch/blog",
            "final_url": "https://www.optiprime.ch/blog",
            "indexable": true,
            "redirected": false,
            "robots_meta": "index, follow",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.optiprime.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.optiprime.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.optiprime.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 21,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.optiprime.ch/",
                "https://www.optiprime.ch/comparateur",
                "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-pas-chere",
                "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                "https://www.optiprime.ch/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog",
                "https://www.optiprime.ch/methodologie",
                "https://www.optiprime.ch/confidentialite",
                "https://www.optiprime.ch/blog/classement-assurance-de-base",
                "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog/comparis-assurance-maladie"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.optiprime.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 21,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.optiprime.ch/",
              "https://www.optiprime.ch/comparateur",
              "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "https://www.optiprime.ch/assurance-maladie-suisse",
              "https://www.optiprime.ch/assurance-maladie-pas-chere",
              "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
              "https://www.optiprime.ch/prime-assurance-maladie-2026",
              "https://www.optiprime.ch/blog",
              "https://www.optiprime.ch/methodologie",
              "https://www.optiprime.ch/confidentialite",
              "https://www.optiprime.ch/blog/classement-assurance-de-base",
              "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
              "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
              "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
              "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
              "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
              "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
              "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
              "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
              "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
              "https://www.optiprime.ch/blog/comparis-assurance-maladie"
            ]
          }
        },
        "site_key": "optiprime",
        "warnings": [
          "LCP mobile élevé (3092 ms)",
          "INP/FID desktop élevé (310 ms)"
        ],
        "pagespeed": {
          "ok": true,
          "cls": 0.002186,
          "inp_ms": 97.0,
          "lcp_ms": 3092.6307542905342,
          "mobile": {
            "ok": true,
            "cls": 0.002186,
            "inp_ms": 97.0,
            "lcp_ms": 3092.6307542905342,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 89.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.001698,
            "inp_ms": 310.9999999999999,
            "lcp_ms": 880.6986996400758,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 98.0
          },
          "strategy": "mobile",
          "performance_score": 89.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
              "error": "",
              "clicks": 0,
              "position": 26.717409587888984,
              "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
              "indexable": true,
              "top_query": "choix caisse-maladie",
              "redirected": false,
              "impressions": 1189,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 18.845238095238095,
              "canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "indexable": true,
              "top_query": "classement assurance de base",
              "redirected": false,
              "impressions": 336,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 36.07860262008734,
              "canonical": "https://www.optiprime.ch/blog",
              "final_url": "https://www.optiprime.ch/blog",
              "indexable": true,
              "top_query": "lamal suisse pas chère",
              "redirected": false,
              "impressions": 229,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 19.98989898989899,
              "canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/assurance-maladie",
              "indexable": true,
              "top_query": "guide assurance maladie suisse",
              "redirected": false,
              "impressions": 198,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 48.09090909090909,
              "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
              "indexable": true,
              "top_query": "meilleures caisses maladie suisse 2026",
              "redirected": false,
              "impressions": 132,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 5,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-25T18:15:03.736574Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.optiprime.ch",
            "https://www.optiprime.ch/blog"
          ],
          "listed_url_sample_size": 21
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 85
      },
      "recorded_at": "2026-05-26 00:06:58.177652+00:00",
      "payload": {
        "gsc": {
          "checked": false
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.optiprime.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.optiprime.ch",
            "final_url": "https://www.optiprime.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "index, follow",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          },
          {
            "ok": true,
            "url": "https://www.optiprime.ch/blog",
            "error": "",
            "noindex": false,
            "canonical": "https://www.optiprime.ch/blog",
            "final_url": "https://www.optiprime.ch/blog",
            "indexable": true,
            "redirected": false,
            "robots_meta": "index, follow",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.optiprime.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.optiprime.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.optiprime.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 21,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.optiprime.ch/",
                "https://www.optiprime.ch/comparateur",
                "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-pas-chere",
                "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                "https://www.optiprime.ch/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog",
                "https://www.optiprime.ch/methodologie",
                "https://www.optiprime.ch/confidentialite",
                "https://www.optiprime.ch/blog/classement-assurance-de-base",
                "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog/comparis-assurance-maladie"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.optiprime.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 21,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.optiprime.ch/",
              "https://www.optiprime.ch/comparateur",
              "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "https://www.optiprime.ch/assurance-maladie-suisse",
              "https://www.optiprime.ch/assurance-maladie-pas-chere",
              "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
              "https://www.optiprime.ch/prime-assurance-maladie-2026",
              "https://www.optiprime.ch/blog",
              "https://www.optiprime.ch/methodologie",
              "https://www.optiprime.ch/confidentialite",
              "https://www.optiprime.ch/blog/classement-assurance-de-base",
              "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
              "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
              "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
              "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
              "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
              "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
              "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
              "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
              "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
              "https://www.optiprime.ch/blog/comparis-assurance-maladie"
            ]
          }
        },
        "site_key": "optiprime",
        "warnings": [
          "LCP mobile élevé (3092 ms)",
          "INP/FID desktop élevé (310 ms)"
        ],
        "pagespeed": {
          "ok": true,
          "cls": 0.002186,
          "inp_ms": 97.0,
          "lcp_ms": 3092.6307542905342,
          "mobile": {
            "ok": true,
            "cls": 0.002186,
            "inp_ms": 97.0,
            "lcp_ms": 3092.6307542905342,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 89.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.001698,
            "inp_ms": 310.9999999999999,
            "lcp_ms": 880.6986996400758,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 98.0
          },
          "strategy": "mobile",
          "performance_score": 89.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
              "error": "",
              "clicks": 0,
              "position": 26.717409587888984,
              "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
              "indexable": true,
              "top_query": "choix caisse-maladie",
              "redirected": false,
              "impressions": 1189,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 18.845238095238095,
              "canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "indexable": true,
              "top_query": "classement assurance de base",
              "redirected": false,
              "impressions": 336,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 36.07860262008734,
              "canonical": "https://www.optiprime.ch/blog",
              "final_url": "https://www.optiprime.ch/blog",
              "indexable": true,
              "top_query": "lamal suisse pas chère",
              "redirected": false,
              "impressions": 229,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 19.98989898989899,
              "canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/assurance-maladie",
              "indexable": true,
              "top_query": "guide assurance maladie suisse",
              "redirected": false,
              "impressions": 198,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 48.09090909090909,
              "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
              "indexable": true,
              "top_query": "meilleures caisses maladie suisse 2026",
              "redirected": false,
              "impressions": 132,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 5,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-25T18:15:03.736574Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.optiprime.ch",
            "https://www.optiprime.ch/blog"
          ],
          "listed_url_sample_size": 21
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 85
      }
    },
    {
      "id": 961,
      "site_key": "optiprime",
      "source_type": "technical_remediation",
      "subject_key": "optiprime",
      "payload_json": {
        "ok": true,
        "errors": [],
        "actions": [
          {
            "type": "optimize_lcp",
            "value": 6018.8,
            "metric": "lcp_ms",
            "target": "https://www.optiprime.ch",
            "priority": "high",
            "threshold": 2500,
            "recommended_changes": [
              "Identifier l'élément LCP mobile sur la home via PageSpeed/Lighthouse.",
              "Optimiser l'image ou le bloc hero responsable: format WebP/AVIF, dimensions adaptées, compression.",
              "Précharger ou prioriser uniquement l'asset LCP critique et différer les médias non critiques.",
              "Réduire CSS/JS bloquant au-dessus de la ligne de flottaison."
            ]
          }
        ],
        "changed": false,
        "attempted": true,
        "deployment": {
          "ok": true,
          "detail": "no_change",
          "checked": false
        }
      },
      "recorded_at": "2026-05-26 00:03:50.451281+00:00",
      "payload": {
        "ok": true,
        "errors": [],
        "actions": [
          {
            "type": "optimize_lcp",
            "value": 6018.8,
            "metric": "lcp_ms",
            "target": "https://www.optiprime.ch",
            "priority": "high",
            "threshold": 2500,
            "recommended_changes": [
              "Identifier l'élément LCP mobile sur la home via PageSpeed/Lighthouse.",
              "Optimiser l'image ou le bloc hero responsable: format WebP/AVIF, dimensions adaptées, compression.",
              "Précharger ou prioriser uniquement l'asset LCP critique et différer les médias non critiques.",
              "Réduire CSS/JS bloquant au-dessus de la ligne de flottaison."
            ]
          }
        ],
        "changed": false,
        "attempted": true,
        "deployment": {
          "ok": true,
          "detail": "no_change",
          "checked": false
        }
      }
    },
    {
      "id": 960,
      "site_key": "optiprime",
      "source_type": "technical_audit",
      "subject_key": "optiprime",
      "payload_json": {
        "gsc": {
          "ok": true,
          "checked": true,
          "message": "Connexion GSC OK",
          "payload": {
            "sample_rows": 1,
            "properties_count": 5,
            "resolved_property": "https://www.optiprime.ch"
          },
          "sitemap_url": "https://www.optiprime.ch/sitemap.xml",
          "sitemap_submission_ready": true
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.optiprime.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.optiprime.ch",
            "final_url": "https://www.optiprime.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "index, follow",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          },
          {
            "ok": true,
            "url": "https://www.optiprime.ch/blog",
            "error": "",
            "noindex": false,
            "canonical": "https://www.optiprime.ch/blog",
            "final_url": "https://www.optiprime.ch/blog",
            "indexable": true,
            "redirected": false,
            "robots_meta": "index, follow",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.optiprime.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.optiprime.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.optiprime.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 21,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.optiprime.ch/",
                "https://www.optiprime.ch/comparateur",
                "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-pas-chere",
                "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                "https://www.optiprime.ch/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog",
                "https://www.optiprime.ch/methodologie",
                "https://www.optiprime.ch/confidentialite",
                "https://www.optiprime.ch/blog/classement-assurance-de-base",
                "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog/comparis-assurance-maladie"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.optiprime.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 21,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.optiprime.ch/",
              "https://www.optiprime.ch/comparateur",
              "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "https://www.optiprime.ch/assurance-maladie-suisse",
              "https://www.optiprime.ch/assurance-maladie-pas-chere",
              "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
              "https://www.optiprime.ch/prime-assurance-maladie-2026",
              "https://www.optiprime.ch/blog",
              "https://www.optiprime.ch/methodologie",
              "https://www.optiprime.ch/confidentialite",
              "https://www.optiprime.ch/blog/classement-assurance-de-base",
              "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
              "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
              "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
              "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
              "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
              "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
              "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
              "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
              "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
              "https://www.optiprime.ch/blog/comparis-assurance-maladie"
            ]
          }
        },
        "site_key": "optiprime",
        "warnings": [
          "LCP mobile élevé (6018 ms)",
          "INP/FID desktop élevé (1175 ms)"
        ],
        "pagespeed": {
          "ok": true,
          "cls": 0.0,
          "inp_ms": 119.0,
          "lcp_ms": 6018.827025234075,
          "mobile": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 119.0,
            "lcp_ms": 6018.827025234075,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 68.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.001698,
            "inp_ms": 1175.0,
            "lcp_ms": 1147.770754138626,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 62.0
          },
          "strategy": "mobile",
          "performance_score": 68.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
              "error": "",
              "clicks": 0,
              "position": 26.717409587888984,
              "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
              "indexable": true,
              "top_query": "choix caisse-maladie",
              "redirected": false,
              "impressions": 1189,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 18.845238095238095,
              "canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "indexable": true,
              "top_query": "classement assurance de base",
              "redirected": false,
              "impressions": 336,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 36.07860262008734,
              "canonical": "https://www.optiprime.ch/blog",
              "final_url": "https://www.optiprime.ch/blog",
              "indexable": true,
              "top_query": "lamal suisse pas chère",
              "redirected": false,
              "impressions": 229,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 19.98989898989899,
              "canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/assurance-maladie",
              "indexable": true,
              "top_query": "guide assurance maladie suisse",
              "redirected": false,
              "impressions": 198,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 48.09090909090909,
              "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
              "indexable": true,
              "top_query": "meilleures caisses maladie suisse 2026",
              "redirected": false,
              "impressions": 132,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 5,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-25T18:15:03.736574Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.optiprime.ch",
            "https://www.optiprime.ch/blog"
          ],
          "listed_url_sample_size": 21
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 85
      },
      "recorded_at": "2026-05-26 00:03:49.425298+00:00",
      "payload": {
        "gsc": {
          "ok": true,
          "checked": true,
          "message": "Connexion GSC OK",
          "payload": {
            "sample_rows": 1,
            "properties_count": 5,
            "resolved_property": "https://www.optiprime.ch"
          },
          "sitemap_url": "https://www.optiprime.ch/sitemap.xml",
          "sitemap_submission_ready": true
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.optiprime.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.optiprime.ch",
            "final_url": "https://www.optiprime.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "index, follow",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          },
          {
            "ok": true,
            "url": "https://www.optiprime.ch/blog",
            "error": "",
            "noindex": false,
            "canonical": "https://www.optiprime.ch/blog",
            "final_url": "https://www.optiprime.ch/blog",
            "indexable": true,
            "redirected": false,
            "robots_meta": "index, follow",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.optiprime.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.optiprime.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.optiprime.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 21,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.optiprime.ch/",
                "https://www.optiprime.ch/comparateur",
                "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-suisse",
                "https://www.optiprime.ch/assurance-maladie-pas-chere",
                "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
                "https://www.optiprime.ch/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog",
                "https://www.optiprime.ch/methodologie",
                "https://www.optiprime.ch/confidentialite",
                "https://www.optiprime.ch/blog/classement-assurance-de-base",
                "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
                "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
                "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
                "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
                "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
                "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
                "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
                "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
                "https://www.optiprime.ch/blog/comparis-assurance-maladie"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.optiprime.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 21,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.optiprime.ch/",
              "https://www.optiprime.ch/comparateur",
              "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "https://www.optiprime.ch/assurance-maladie-suisse",
              "https://www.optiprime.ch/assurance-maladie-pas-chere",
              "https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
              "https://www.optiprime.ch/prime-assurance-maladie-2026",
              "https://www.optiprime.ch/blog",
              "https://www.optiprime.ch/methodologie",
              "https://www.optiprime.ch/confidentialite",
              "https://www.optiprime.ch/blog/classement-assurance-de-base",
              "https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
              "https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
              "https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
              "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
              "https://www.optiprime.ch/blog/meilleure-lamal-suisse",
              "https://www.optiprime.ch/blog/comparaison-assurance-de-base",
              "https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
              "https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
              "https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
              "https://www.optiprime.ch/blog/comparis-assurance-maladie"
            ]
          }
        },
        "site_key": "optiprime",
        "warnings": [
          "LCP mobile élevé (6018 ms)",
          "INP/FID desktop élevé (1175 ms)"
        ],
        "pagespeed": {
          "ok": true,
          "cls": 0.0,
          "inp_ms": 119.0,
          "lcp_ms": 6018.827025234075,
          "mobile": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 119.0,
            "lcp_ms": 6018.827025234075,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 68.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.001698,
            "inp_ms": 1175.0,
            "lcp_ms": 1147.770754138626,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 62.0
          },
          "strategy": "mobile",
          "performance_score": 68.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
              "error": "",
              "clicks": 0,
              "position": 26.717409587888984,
              "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
              "indexable": true,
              "top_query": "choix caisse-maladie",
              "redirected": false,
              "impressions": 1189,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 18.845238095238095,
              "canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
              "indexable": true,
              "top_query": "classement assurance de base",
              "redirected": false,
              "impressions": 336,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 36.07860262008734,
              "canonical": "https://www.optiprime.ch/blog",
              "final_url": "https://www.optiprime.ch/blog",
              "indexable": true,
              "top_query": "lamal suisse pas chère",
              "redirected": false,
              "impressions": 229,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 19.98989898989899,
              "canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/assurance-maladie",
              "indexable": true,
              "top_query": "guide assurance maladie suisse",
              "redirected": false,
              "impressions": 198,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
              "error": "",
              "clicks": 0,
              "position": 48.09090909090909,
              "canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
              "final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
              "indexable": true,
              "top_query": "meilleures caisses maladie suisse 2026",
              "redirected": false,
              "impressions": 132,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 5,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-25T18:15:03.736574Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.optiprime.ch",
            "https://www.optiprime.ch/blog"
          ],
          "listed_url_sample_size": 21
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 85
      }
    },
    {
      "id": 952,
      "site_key": "optiprime",
      "source_type": "workflow_state",
      "subject_key": "recent_events",
      "payload_json": {
        "events": [
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 69,
              "queries_28d": 114,
              "page_query_28d": 180
            },
            "recorded_at": "2026-05-22T06:15:04.339053Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 69,
              "queries_28d": 114,
              "page_query_28d": 180
            },
            "recorded_at": "2026-05-22T12:15:03.370843Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 69,
              "queries_28d": 114,
              "page_query_28d": 180
            },
            "recorded_at": "2026-05-22T18:15:03.220237Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-23T00:00:12.242483Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-24T00:00:20.428130Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 1,
              "watch_count": 5,
              "create_count": 1,
              "deleted_count": 0,
              "optimize_count": 6
            },
            "recorded_at": "2026-05-24T20:15:02.820740Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-25T00:00:14.071260Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 63,
              "queries_28d": 116,
              "page_query_28d": 183
            },
            "recorded_at": "2026-05-25T06:15:03.269088Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 63,
              "queries_28d": 116,
              "page_query_28d": 183
            },
            "recorded_at": "2026-05-25T12:15:03.349442Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 63,
              "queries_28d": 116,
              "page_query_28d": 183
            },
            "recorded_at": "2026-05-25T18:15:03.748978Z"
          }
        ]
      },
      "recorded_at": "2026-05-26 00:00:19.638924+00:00",
      "payload": {
        "events": [
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 69,
              "queries_28d": 114,
              "page_query_28d": 180
            },
            "recorded_at": "2026-05-22T06:15:04.339053Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 69,
              "queries_28d": 114,
              "page_query_28d": 180
            },
            "recorded_at": "2026-05-22T12:15:03.370843Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 69,
              "queries_28d": 114,
              "page_query_28d": 180
            },
            "recorded_at": "2026-05-22T18:15:03.220237Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-23T00:00:12.242483Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-24T00:00:20.428130Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 1,
              "watch_count": 5,
              "create_count": 1,
              "deleted_count": 0,
              "optimize_count": 6
            },
            "recorded_at": "2026-05-24T20:15:02.820740Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-25T00:00:14.071260Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 63,
              "queries_28d": 116,
              "page_query_28d": 183
            },
            "recorded_at": "2026-05-25T06:15:03.269088Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 63,
              "queries_28d": 116,
              "page_query_28d": 183
            },
            "recorded_at": "2026-05-25T12:15:03.349442Z"
          },
          {
            "type": "gsc_sync",
            "payload": {
              "pages_7d": 5,
              "pages_28d": 5,
              "queries_7d": 63,
              "queries_28d": 116,
              "page_query_28d": 183
            },
            "recorded_at": "2026-05-25T18:15:03.748978Z"
          }
        ]
      }
    },
    {
      "id": 951,
      "site_key": "optiprime",
      "source_type": "queue_state",
      "subject_key": "recent_queue",
      "payload_json": {
        "recent_rows": [
          {
            "id": 325,
            "slug": "classement-assurance-de-base",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-25T09:00:32.731572+00:00",
            "scheduled_at": "2026-05-25T07:00:00+00:00"
          },
          {
            "id": 295,
            "slug": "meilleures-caisses-maladie-suisse-2026",
            "error": "not present in local blog inventory",
            "status": "scheduled",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": null,
            "scheduled_at": "2026-06-03T07:00:00+00:00"
          },
          {
            "id": 294,
            "slug": "lamal-suisse-pas-chere",
            "error": "not present in local blog inventory",
            "status": "scheduled",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": null,
            "scheduled_at": "2026-06-02T07:00:00+00:00"
          },
          {
            "id": 293,
            "slug": "guide-assurance-maladie-suisse",
            "error": "not present in local blog inventory",
            "status": "scheduled",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": null,
            "scheduled_at": "2026-06-04T07:00:00+00:00"
          },
          {
            "id": 108,
            "slug": "prime-assurance-maladie-2026",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-08",
            "scheduled_at": null
          },
          {
            "id": 107,
            "slug": "changer-assurance-maladie-suisse",
            "error": "not present in local blog inventory",
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-15T09:00:38.440609+00:00",
            "scheduled_at": "2026-05-15T07:00:00+00:00"
          },
          {
            "id": 106,
            "slug": "meilleure-lamal-suisse",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-06",
            "scheduled_at": null
          },
          {
            "id": 105,
            "slug": "comparaison-assurance-de-base",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-05",
            "scheduled_at": null
          },
          {
            "id": 104,
            "slug": "comment-choisir-assurance-sante-suisse",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-04",
            "scheduled_at": null
          },
          {
            "id": 98,
            "slug": "groupe-mutuel",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 97,
            "slug": "css-assurance",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 96,
            "slug": "comparis-assurance-maladie",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 95,
            "slug": "comparatif-assurance-maladie",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-28",
            "scheduled_at": null
          },
          {
            "id": 94,
            "slug": "comparateur-assurance-maladie-suisse",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-29",
            "scheduled_at": null
          },
          {
            "id": 93,
            "slug": "attenuer-l-assurance-maladie",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 92,
            "slug": "assurance-maladie-neuchatel",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 91,
            "slug": "assurance-comparative-maladie",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 90,
            "slug": "ameli",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 13,
            "slug": "franchise-assurance-maladie-suisse",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-06-01T07:00:00+00:00",
            "scheduled_at": null
          },
          {
            "id": 12,
            "slug": "criteres-assurance-maladie-suisse",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-05-29T07:00:00+00:00",
            "scheduled_at": null
          }
        ]
      },
      "recorded_at": "2026-05-26 00:00:19.610074+00:00",
      "payload": {
        "recent_rows": [
          {
            "id": 325,
            "slug": "classement-assurance-de-base",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-25T09:00:32.731572+00:00",
            "scheduled_at": "2026-05-25T07:00:00+00:00"
          },
          {
            "id": 295,
            "slug": "meilleures-caisses-maladie-suisse-2026",
            "error": "not present in local blog inventory",
            "status": "scheduled",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": null,
            "scheduled_at": "2026-06-03T07:00:00+00:00"
          },
          {
            "id": 294,
            "slug": "lamal-suisse-pas-chere",
            "error": "not present in local blog inventory",
            "status": "scheduled",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": null,
            "scheduled_at": "2026-06-02T07:00:00+00:00"
          },
          {
            "id": 293,
            "slug": "guide-assurance-maladie-suisse",
            "error": "not present in local blog inventory",
            "status": "scheduled",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": null,
            "scheduled_at": "2026-06-04T07:00:00+00:00"
          },
          {
            "id": 108,
            "slug": "prime-assurance-maladie-2026",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-08",
            "scheduled_at": null
          },
          {
            "id": 107,
            "slug": "changer-assurance-maladie-suisse",
            "error": "not present in local blog inventory",
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-15T09:00:38.440609+00:00",
            "scheduled_at": "2026-05-15T07:00:00+00:00"
          },
          {
            "id": 106,
            "slug": "meilleure-lamal-suisse",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-06",
            "scheduled_at": null
          },
          {
            "id": 105,
            "slug": "comparaison-assurance-de-base",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-05",
            "scheduled_at": null
          },
          {
            "id": 104,
            "slug": "comment-choisir-assurance-sante-suisse",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 1,
            "gsc_indexed": 0,
            "published_at": "2026-05-04",
            "scheduled_at": null
          },
          {
            "id": 98,
            "slug": "groupe-mutuel",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 97,
            "slug": "css-assurance",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 96,
            "slug": "comparis-assurance-maladie",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 95,
            "slug": "comparatif-assurance-maladie",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-28",
            "scheduled_at": null
          },
          {
            "id": 94,
            "slug": "comparateur-assurance-maladie-suisse",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-29",
            "scheduled_at": null
          },
          {
            "id": 93,
            "slug": "attenuer-l-assurance-maladie",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 92,
            "slug": "assurance-maladie-neuchatel",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 91,
            "slug": "assurance-comparative-maladie",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 90,
            "slug": "ameli",
            "error": null,
            "status": "deleted",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-03-31",
            "scheduled_at": null
          },
          {
            "id": 13,
            "slug": "franchise-assurance-maladie-suisse",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-06-01T07:00:00+00:00",
            "scheduled_at": null
          },
          {
            "id": 12,
            "slug": "criteres-assurance-maladie-suisse",
            "error": null,
            "status": "published",
            "attempts": 0,
            "vercel_ok": 0,
            "gsc_indexed": 0,
            "published_at": "2026-05-29T07:00:00+00:00",
            "scheduled_at": null
          }
        ]
      }
    },
    {
      "id": 950,
      "site_key": "optiprime",
      "source_type": "gsc_snapshot",
      "subject_key": "pages_28d",
      "payload_json": {
        "saved_at": "2026-05-25T18:15:03.736574Z",
        "top_pages": [
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
            "clicks": 0,
            "position": 26.717409587888984,
            "top_query": "choix caisse-maladie",
            "impressions": 1189
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
            "clicks": 0,
            "position": 18.845238095238095,
            "top_query": "classement assurance de base",
            "impressions": 336
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog",
            "clicks": 0,
            "position": 36.07860262008734,
            "top_query": "lamal suisse pas chère",
            "impressions": 229
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/assurance-maladie",
            "clicks": 0,
            "position": 19.98989898989899,
            "top_query": "guide assurance maladie suisse",
            "impressions": 198
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
            "clicks": 0,
            "position": 48.09090909090909,
            "top_query": "meilleures caisses maladie suisse 2026",
            "impressions": 132
          }
        ],
        "top_queries": [
          {
            "ctr": 0.0,
            "query": "assurance obligatoire la moins chère",
            "clicks": 0,
            "position": 24.7319587628866,
            "impressions": 97
          },
          {
            "ctr": 0.0,
            "query": "choix caisse-maladie",
            "clicks": 0,
            "position": 26.829787234042552,
            "impressions": 94
          },
          {
            "ctr": 0.0,
            "query": "comparer assurance obligatoire",
            "clicks": 0,
            "position": 22.978494623655912,
            "impressions": 93
          },
          {
            "ctr": 0.0,
            "query": "choix caisse maladie",
            "clicks": 0,
            "position": 26.64367816091954,
            "impressions": 87
          },
          {
            "ctr": 0.0,
            "query": "assurance maladie suisse pas chère",
            "clicks": 0,
            "position": 26.441176470588236,
            "impressions": 68
          },
          {
            "ctr": 0.0,
            "query": "caisse maladie suisse pas chère",
            "clicks": 0,
            "position": 25.636363636363637,
            "impressions": 66
          },
          {
            "ctr": 0.0,
            "query": "assurance de base suisse pas chère",
            "clicks": 0,
            "position": 28.096774193548388,
            "impressions": 62
          },
          {
            "ctr": 0.0,
            "query": "assurance lamal pas chère",
            "clicks": 0,
            "position": 25.548387096774192,
            "impressions": 62
          },
          {
            "ctr": 0.0,
            "query": "guide assurance maladie suisse",
            "clicks": 0,
            "position": 34.98275862068966,
            "impressions": 58
          },
          {
            "ctr": 0.0,
            "query": "assurance santé suisse pas chère",
            "clicks": 0,
            "position": 28.89090909090909,
            "impressions": 55
          }
        ]
      },
      "recorded_at": "2026-05-26 00:00:19.586445+00:00",
      "payload": {
        "saved_at": "2026-05-25T18:15:03.736574Z",
        "top_pages": [
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
            "clicks": 0,
            "position": 26.717409587888984,
            "top_query": "choix caisse-maladie",
            "impressions": 1189
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
            "clicks": 0,
            "position": 18.845238095238095,
            "top_query": "classement assurance de base",
            "impressions": 336
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog",
            "clicks": 0,
            "position": 36.07860262008734,
            "top_query": "lamal suisse pas chère",
            "impressions": 229
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/assurance-maladie",
            "clicks": 0,
            "position": 19.98989898989899,
            "top_query": "guide assurance maladie suisse",
            "impressions": 198
          },
          {
            "ctr": 0.0,
            "page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
            "clicks": 0,
            "position": 48.09090909090909,
            "top_query": "meilleures caisses maladie suisse 2026",
            "impressions": 132
          }
        ],
        "top_queries": [
          {
            "ctr": 0.0,
            "query": "assurance obligatoire la moins chère",
            "clicks": 0,
            "position": 24.7319587628866,
            "impressions": 97
          },
          {
            "ctr": 0.0,
            "query": "choix caisse-maladie",
            "clicks": 0,
            "position": 26.829787234042552,
            "impressions": 94
          },
          {
            "ctr": 0.0,
            "query": "comparer assurance obligatoire",
            "clicks": 0,
            "position": 22.978494623655912,
            "impressions": 93
          },
          {
            "ctr": 0.0,
            "query": "choix caisse maladie",
            "clicks": 0,
            "position": 26.64367816091954,
            "impressions": 87
          },
          {
            "ctr": 0.0,
            "query": "assurance maladie suisse pas chère",
            "clicks": 0,
            "position": 26.441176470588236,
            "impressions": 68
          },
          {
            "ctr": 0.0,
            "query": "caisse maladie suisse pas chère",
            "clicks": 0,
            "position": 25.636363636363637,
            "impressions": 66
          },
          {
            "ctr": 0.0,
            "query": "assurance de base suisse pas chère",
            "clicks": 0,
            "position": 28.096774193548388,
            "impressions": 62
          },
          {
            "ctr": 0.0,
            "query": "assurance lamal pas chère",
            "clicks": 0,
            "position": 25.548387096774192,
            "impressions": 62
          },
          {
            "ctr": 0.0,
            "query": "guide assurance maladie suisse",
            "clicks": 0,
            "position": 34.98275862068966,
            "impressions": 58
          },
          {
            "ctr": 0.0,
            "query": "assurance santé suisse pas chère",
            "clicks": 0,
            "position": 28.89090909090909,
            "impressions": 55
          }
        ]
      }
    }
  ]
}