LLM Pack club48sa

Site : club48sa

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": "club48sa",
  "market": {
    "primary_market": "ch",
    "target_countries": [
      "ch",
      "fr"
    ],
    "seo_scope": "national"
  },
  "context_pack": {
    "site_key": "club48sa",
    "task": "external llm pack",
    "lessons": [
      {
        "id": 177,
        "site_key": "club48sa",
        "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.club48sa.ch/blog/club-deal-immobilier",
              "clicks": 0,
              "position": 8.424242424242424,
              "top_query": "rendement club deal immobilier",
              "impressions": 33
            }
          ]
        },
        "created_at": "2026-06-03 00:01:08.571679+00:00",
        "updated_at": "2026-06-03 00:01:08.873016+00:00",
        "details": {
          "pages": [
            {
              "ctr": 0.0,
              "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "clicks": 0,
              "position": 8.424242424242424,
              "top_query": "rendement club deal immobilier",
              "impressions": 33
            }
          ]
        }
      }
    ],
    "sops": [
      {
        "id": 157,
        "site_key": "club48sa",
        "scope": "site",
        "name": "adaptive-feedback-playbook",
        "version": 8,
        "status": "validated",
        "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-06-02 00:01:14.384295+00:00",
        "updated_at": "2026-06-03 00:01:08.896957+00:00",
        "confidence_score": 0,
        "confidence_label": "low"
      }
    ],
    "recent_memory": [
      {
        "id": 291,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 157,
              "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": 8,
              "site_key": "club48sa",
              "created_at": "2026-06-02 00:01:14.384295+00:00",
              "updated_at": "2026-06-03 00:01:08.631632+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 41
          },
          "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 0x76ad9c0c6300>: 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": "club48sa",
            "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 0x76ad9c096150>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-06-03 00:01:08.823819+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 157,
              "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": 8,
              "site_key": "club48sa",
              "created_at": "2026-06-02 00:01:14.384295+00:00",
              "updated_at": "2026-06-03 00:01:08.631632+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 41
          },
          "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 0x76ad9c0c6300>: 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": "club48sa",
            "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 0x76ad9c096150>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 284,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 157,
              "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": 8,
              "site_key": "club48sa",
              "created_at": "2026-06-02 00:01:14.384295+00:00",
              "updated_at": "2026-06-02 00:01:14.384295+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 39
          },
          "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 0x7bdbc4828b00>: 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": "club48sa",
            "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 0x7bdbc4828770>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-06-02 00:01:14.581771+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 157,
              "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": 8,
              "site_key": "club48sa",
              "created_at": "2026-06-02 00:01:14.384295+00:00",
              "updated_at": "2026-06-02 00:01:14.384295+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 20,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 39
          },
          "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 0x7bdbc4828b00>: 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": "club48sa",
            "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 0x7bdbc4828770>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 277,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 146,
              "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": 7,
              "site_key": "club48sa",
              "created_at": "2026-05-31 00:01:11.281428+00:00",
              "updated_at": "2026-06-01 00:01:06.388777+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 19,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 38
          },
          "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 0x71b7c15d3530>: 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": "club48sa",
            "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 0x71b7bf9d0a10>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-06-01 00:01:06.608457+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 146,
              "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": 7,
              "site_key": "club48sa",
              "created_at": "2026-05-31 00:01:11.281428+00:00",
              "updated_at": "2026-06-01 00:01:06.388777+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 19,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 38
          },
          "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 0x71b7c15d3530>: 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": "club48sa",
            "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 0x71b7bf9d0a10>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 270,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 146,
              "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": 7,
              "site_key": "club48sa",
              "created_at": "2026-05-31 00:01:11.281428+00:00",
              "updated_at": "2026-05-31 00:01:11.281428+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 18,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 37
          },
          "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 0x7a6ba66bb380>: 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": "club48sa",
            "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 0x7a6ba8bdd010>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-05-31 00:01:11.497838+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 146,
              "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": 7,
              "site_key": "club48sa",
              "created_at": "2026-05-31 00:01:11.281428+00:00",
              "updated_at": "2026-05-31 00:01:11.281428+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 18,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 37
          },
          "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 0x7a6ba66bb380>: 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": "club48sa",
            "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 0x7a6ba8bdd010>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 263,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 137,
              "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": 6,
              "site_key": "club48sa",
              "created_at": "2026-05-29 00:00:57.725559+00:00",
              "updated_at": "2026-05-30 00:01:05.924479+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 17,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 35
          },
          "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 0x75c6348209e0>: 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": "club48sa",
            "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 0x75c636fc3b90>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-05-30 00:01:06.117417+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 137,
              "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": 6,
              "site_key": "club48sa",
              "created_at": "2026-05-29 00:00:57.725559+00:00",
              "updated_at": "2026-05-30 00:01:05.924479+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 17,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 35
          },
          "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 0x75c6348209e0>: 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": "club48sa",
            "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 0x75c636fc3b90>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 256,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 137,
              "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": 6,
              "site_key": "club48sa",
              "created_at": "2026-05-29 00:00:57.725559+00:00",
              "updated_at": "2026-05-29 00:00:57.725559+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 16,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 34
          },
          "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 0x74e8fabd4a10>: 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": "club48sa",
            "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 0x74e8f8ed5d30>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-05-29 00:00:57.974769+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 137,
              "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": 6,
              "site_key": "club48sa",
              "created_at": "2026-05-29 00:00:57.725559+00:00",
              "updated_at": "2026-05-29 00:00:57.725559+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 16,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 34
          },
          "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 0x74e8fabd4a10>: 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": "club48sa",
            "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 0x74e8f8ed5d30>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      },
      {
        "id": 249,
        "site_key": "club48sa",
        "category": "routine",
        "action": "daily_feedback_learning",
        "target": "club48sa",
        "outcome": "1 lessons derived",
        "quality": "good",
        "details_json": {
          "sop": {
            "sop": {
              "id": 128,
              "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": 5,
              "site_key": "club48sa",
              "created_at": "2026-05-27 00:01:06.259702+00:00",
              "updated_at": "2026-05-28 00:01:06.214149+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 15,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 33
          },
          "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 0x7570a46ff830>: 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": "club48sa",
            "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 0x7570a46fe8a0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        },
        "recorded_at": "2026-05-28 00:01:06.443279+00:00",
        "details": {
          "sop": {
            "sop": {
              "id": 128,
              "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": 5,
              "site_key": "club48sa",
              "created_at": "2026-05-27 00:01:06.259702+00:00",
              "updated_at": "2026-05-28 00:01:06.214149+00:00",
              "confidence_label": "low",
              "confidence_score": 0
            },
            "evidence": {
              "lesson_count": 15,
              "outcome_count": 0,
              "observation_count": 10
            },
            "site_key": "club48sa"
          },
          "feedback": {
            "site_key": "club48sa",
            "gsc_pages": 7,
            "queue_rows": 0,
            "gsc_queries": 15,
            "workflow_events": 33
          },
          "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 0x7570a46ff830>: 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": "club48sa",
            "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 0x7570a46fe8a0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
              "alerts_ok": false,
              "overview_ok": false,
              "health_score": null
            },
            "project_name": "Club 48 SA"
          }
        }
      }
    ],
    "recent_outcomes": [],
    "recent_observations": [
      {
        "id": 1191,
        "site_key": "club48sa",
        "source_type": "technical_audit",
        "subject_key": "club48sa",
        "payload_json": {
          "gsc": {
            "ok": true,
            "checked": true,
            "message": "Connexion GSC OK",
            "payload": {
              "sample_rows": 1,
              "properties_count": 5,
              "resolved_property": "https://www.club48sa.ch"
            },
            "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
            "sitemap_submission_ready": true
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.club48sa.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.club48sa.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.club48sa.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 18,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.club48sa.ch/",
                  "https://www.club48sa.ch/blog",
                  "https://www.club48sa.ch/contact",
                  "https://www.club48sa.ch/mentions-legales",
                  "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                  "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                  "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                  "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                  "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                  "https://www.club48sa.ch/blog/club-investisseurs",
                  "https://www.club48sa.ch/blog/investissement-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                  "https://www.club48sa.ch/blog/club-investissement-prive",
                  "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                  "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                  "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                  "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          },
          "site_key": "club48sa",
          "warnings": [],
          "pagespeed": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 54.0,
            "lcp_ms": 1055.497702821094,
            "mobile": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 54.0,
              "lcp_ms": 1055.497702821094,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 100.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 77.0,
              "lcp_ms": 430.29678364156854,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 100.0
            },
            "strategy": "mobile",
            "performance_score": 100.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "error": "",
                "clicks": 0,
                "position": 8.424242424242424,
                "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "indexable": true,
                "top_query": "rendement club deal immobilier",
                "redirected": false,
                "impressions": 33,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.25,
                "url": "https://www.club48sa.ch/",
                "error": "",
                "clicks": 7,
                "position": 4.214285714285714,
                "canonical": "https://www.club48sa.ch",
                "final_url": "https://www.club48sa.ch/",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 28,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.047619047619047616,
                "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "error": "",
                "clicks": 1,
                "position": 10.19047619047619,
                "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "indexable": true,
                "top_query": "reconnaissance de dette suisse",
                "redirected": false,
                "impressions": 21,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "error": "",
                "clicks": 0,
                "position": 8.933333333333334,
                "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "indexable": true,
                "top_query": "europe immobilier",
                "redirected": false,
                "impressions": 15,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.07692307692307693,
                "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "error": "",
                "clicks": 1,
                "position": 6.0,
                "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "indexable": true,
                "top_query": "rendement 15",
                "redirected": false,
                "impressions": 13,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "error": "",
                "clicks": 0,
                "position": 15.166666666666666,
                "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "indexable": true,
                "top_query": "achat appartement off-market genève",
                "redirected": false,
                "impressions": 6,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 7.0,
                "canonical": "https://www.club48sa.ch/blog",
                "final_url": "https://www.club48sa.ch/blog",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 2,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 7,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.club48sa.ch"
            ],
            "listed_url_sample_size": 18
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 100
        },
        "recorded_at": "2026-06-03 00:04:47.666807+00:00",
        "payload": {
          "gsc": {
            "ok": true,
            "checked": true,
            "message": "Connexion GSC OK",
            "payload": {
              "sample_rows": 1,
              "properties_count": 5,
              "resolved_property": "https://www.club48sa.ch"
            },
            "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
            "sitemap_submission_ready": true
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.club48sa.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.club48sa.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.club48sa.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 18,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.club48sa.ch/",
                  "https://www.club48sa.ch/blog",
                  "https://www.club48sa.ch/contact",
                  "https://www.club48sa.ch/mentions-legales",
                  "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                  "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                  "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                  "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                  "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                  "https://www.club48sa.ch/blog/club-investisseurs",
                  "https://www.club48sa.ch/blog/investissement-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                  "https://www.club48sa.ch/blog/club-investissement-prive",
                  "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                  "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                  "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                  "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          },
          "site_key": "club48sa",
          "warnings": [],
          "pagespeed": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 54.0,
            "lcp_ms": 1055.497702821094,
            "mobile": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 54.0,
              "lcp_ms": 1055.497702821094,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 100.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 77.0,
              "lcp_ms": 430.29678364156854,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 100.0
            },
            "strategy": "mobile",
            "performance_score": 100.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "error": "",
                "clicks": 0,
                "position": 8.424242424242424,
                "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "indexable": true,
                "top_query": "rendement club deal immobilier",
                "redirected": false,
                "impressions": 33,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.25,
                "url": "https://www.club48sa.ch/",
                "error": "",
                "clicks": 7,
                "position": 4.214285714285714,
                "canonical": "https://www.club48sa.ch",
                "final_url": "https://www.club48sa.ch/",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 28,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.047619047619047616,
                "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "error": "",
                "clicks": 1,
                "position": 10.19047619047619,
                "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "indexable": true,
                "top_query": "reconnaissance de dette suisse",
                "redirected": false,
                "impressions": 21,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "error": "",
                "clicks": 0,
                "position": 8.933333333333334,
                "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "indexable": true,
                "top_query": "europe immobilier",
                "redirected": false,
                "impressions": 15,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.07692307692307693,
                "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "error": "",
                "clicks": 1,
                "position": 6.0,
                "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "indexable": true,
                "top_query": "rendement 15",
                "redirected": false,
                "impressions": 13,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "error": "",
                "clicks": 0,
                "position": 15.166666666666666,
                "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "indexable": true,
                "top_query": "achat appartement off-market genève",
                "redirected": false,
                "impressions": 6,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 7.0,
                "canonical": "https://www.club48sa.ch/blog",
                "final_url": "https://www.club48sa.ch/blog",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 2,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 7,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.club48sa.ch"
            ],
            "listed_url_sample_size": 18
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 100
        }
      },
      {
        "id": 1185,
        "site_key": "club48sa",
        "source_type": "workflow_state",
        "subject_key": "recent_events",
        "payload_json": {
          "events": [
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-27T00:01:06.423335Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-05-27T20:30:23.001571Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-28T00:01:06.424216Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-29T00:00:57.942455Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-30T00:01:06.103224Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-05-30T20:30:43.280248Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-31T00:01:11.475811Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-01T00:01:06.589802Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-02T00:01:14.558304Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-06-02T20:45:27.000129Z"
            }
          ]
        },
        "recorded_at": "2026-06-03 00:01:06.505244+00:00",
        "payload": {
          "events": [
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-27T00:01:06.423335Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-05-27T20:30:23.001571Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-28T00:01:06.424216Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-29T00:00:57.942455Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-30T00:01:06.103224Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-05-30T20:30:43.280248Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-31T00:01:11.475811Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-01T00:01:06.589802Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-02T00:01:14.558304Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-06-02T20:45:27.000129Z"
            }
          ]
        }
      },
      {
        "id": 1184,
        "site_key": "club48sa",
        "source_type": "queue_state",
        "subject_key": "recent_queue",
        "payload_json": {
          "recent_rows": []
        },
        "recorded_at": "2026-06-03 00:01:06.492259+00:00",
        "payload": {
          "recent_rows": []
        }
      },
      {
        "id": 1183,
        "site_key": "club48sa",
        "source_type": "gsc_snapshot",
        "subject_key": "pages_28d",
        "payload_json": {
          "saved_at": "2026-05-22T10:09:06.487422Z",
          "top_pages": [
            {
              "ctr": 0.0,
              "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "clicks": 0,
              "position": 8.424242424242424,
              "top_query": "rendement club deal immobilier",
              "impressions": 33
            },
            {
              "ctr": 0.25,
              "page": "https://www.club48sa.ch/",
              "clicks": 7,
              "position": 4.214285714285714,
              "top_query": "club 48 sa",
              "impressions": 28
            },
            {
              "ctr": 0.047619047619047616,
              "page": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "clicks": 1,
              "position": 10.19047619047619,
              "top_query": "reconnaissance de dette suisse",
              "impressions": 21
            },
            {
              "ctr": 0.0,
              "page": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "clicks": 0,
              "position": 8.933333333333334,
              "top_query": "europe immobilier",
              "impressions": 15
            },
            {
              "ctr": 0.07692307692307693,
              "page": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "clicks": 1,
              "position": 6.0,
              "top_query": "rendement 15",
              "impressions": 13
            }
          ],
          "top_queries": [
            {
              "ctr": 0.18181818181818182,
              "query": "club 48 sa",
              "clicks": 2,
              "position": 4.181818181818182,
              "impressions": 11
            },
            {
              "ctr": 0.0,
              "query": "rendement 15",
              "clicks": 0,
              "position": 8.2,
              "impressions": 5
            },
            {
              "ctr": 0.5,
              "query": "club 48",
              "clicks": 2,
              "position": 5.0,
              "impressions": 4
            },
            {
              "ctr": 0.0,
              "query": "rendement club deal immobilier",
              "clicks": 0,
              "position": 8.25,
              "impressions": 4
            },
            {
              "ctr": 0.0,
              "query": "club48",
              "clicks": 0,
              "position": 8.0,
              "impressions": 3
            },
            {
              "ctr": 0.0,
              "query": "reconnaissance de dette suisse",
              "clicks": 0,
              "position": 12.333333333333334,
              "impressions": 3
            },
            {
              "ctr": 0.0,
              "query": "\"crowdfunding immobilier\" -site:reddit.com -site:twitter.com -site:x.com -site:wykop.pl -site:tripadvisor.com -site:youtube.com -site:yelp.com -site:booking.com -site:facebook.com -site:instagram.com -site:tiktok.com",
              "clicks": 0,
              "position": 3.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "achat appartement off-market genève",
              "clicks": 0,
              "position": 52.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "club deal",
              "clicks": 0,
              "position": 55.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "club deal immo",
              "clicks": 0,
              "position": 8.0,
              "impressions": 1
            }
          ]
        },
        "recorded_at": "2026-06-03 00:01:06.474955+00:00",
        "payload": {
          "saved_at": "2026-05-22T10:09:06.487422Z",
          "top_pages": [
            {
              "ctr": 0.0,
              "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "clicks": 0,
              "position": 8.424242424242424,
              "top_query": "rendement club deal immobilier",
              "impressions": 33
            },
            {
              "ctr": 0.25,
              "page": "https://www.club48sa.ch/",
              "clicks": 7,
              "position": 4.214285714285714,
              "top_query": "club 48 sa",
              "impressions": 28
            },
            {
              "ctr": 0.047619047619047616,
              "page": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "clicks": 1,
              "position": 10.19047619047619,
              "top_query": "reconnaissance de dette suisse",
              "impressions": 21
            },
            {
              "ctr": 0.0,
              "page": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "clicks": 0,
              "position": 8.933333333333334,
              "top_query": "europe immobilier",
              "impressions": 15
            },
            {
              "ctr": 0.07692307692307693,
              "page": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "clicks": 1,
              "position": 6.0,
              "top_query": "rendement 15",
              "impressions": 13
            }
          ],
          "top_queries": [
            {
              "ctr": 0.18181818181818182,
              "query": "club 48 sa",
              "clicks": 2,
              "position": 4.181818181818182,
              "impressions": 11
            },
            {
              "ctr": 0.0,
              "query": "rendement 15",
              "clicks": 0,
              "position": 8.2,
              "impressions": 5
            },
            {
              "ctr": 0.5,
              "query": "club 48",
              "clicks": 2,
              "position": 5.0,
              "impressions": 4
            },
            {
              "ctr": 0.0,
              "query": "rendement club deal immobilier",
              "clicks": 0,
              "position": 8.25,
              "impressions": 4
            },
            {
              "ctr": 0.0,
              "query": "club48",
              "clicks": 0,
              "position": 8.0,
              "impressions": 3
            },
            {
              "ctr": 0.0,
              "query": "reconnaissance de dette suisse",
              "clicks": 0,
              "position": 12.333333333333334,
              "impressions": 3
            },
            {
              "ctr": 0.0,
              "query": "\"crowdfunding immobilier\" -site:reddit.com -site:twitter.com -site:x.com -site:wykop.pl -site:tripadvisor.com -site:youtube.com -site:yelp.com -site:booking.com -site:facebook.com -site:instagram.com -site:tiktok.com",
              "clicks": 0,
              "position": 3.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "achat appartement off-market genève",
              "clicks": 0,
              "position": 52.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "club deal",
              "clicks": 0,
              "position": 55.0,
              "impressions": 1
            },
            {
              "ctr": 0.0,
              "query": "club deal immo",
              "clicks": 0,
              "position": 8.0,
              "impressions": 1
            }
          ]
        }
      },
      {
        "id": 1175,
        "site_key": "club48sa",
        "source_type": "learningseo_site_feedback",
        "subject_key": "club48sa",
        "payload_json": {
          "site_key": "club48sa",
          "project_name": "Club 48 SA",
          "applied_topics": [
            "fundamentals",
            "execution",
            "technical",
            "content",
            "links",
            "automation"
          ],
          "contradictions": [],
          "sop_candidates": [
            "Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.",
            "Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.",
            "Automated actions must emit events, measurements, and postmortems by default."
          ],
          "lessons_created": 6
        },
        "recorded_at": "2026-06-03 00:00:14.225368+00:00",
        "payload": {
          "site_key": "club48sa",
          "project_name": "Club 48 SA",
          "applied_topics": [
            "fundamentals",
            "execution",
            "technical",
            "content",
            "links",
            "automation"
          ],
          "contradictions": [],
          "sop_candidates": [
            "Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.",
            "Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.",
            "Automated actions must emit events, measurements, and postmortems by default."
          ],
          "lessons_created": 6
        }
      },
      {
        "id": 1164,
        "site_key": "club48sa",
        "source_type": "technical_audit",
        "subject_key": "club48sa",
        "payload_json": {
          "gsc": {
            "ok": true,
            "checked": true,
            "message": "Connexion GSC OK",
            "payload": {
              "sample_rows": 1,
              "properties_count": 5,
              "resolved_property": "https://www.club48sa.ch"
            },
            "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
            "sitemap_submission_ready": true
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.club48sa.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.club48sa.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.club48sa.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 18,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.club48sa.ch/",
                  "https://www.club48sa.ch/blog",
                  "https://www.club48sa.ch/contact",
                  "https://www.club48sa.ch/mentions-legales",
                  "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                  "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                  "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                  "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                  "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                  "https://www.club48sa.ch/blog/club-investisseurs",
                  "https://www.club48sa.ch/blog/investissement-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                  "https://www.club48sa.ch/blog/club-investissement-prive",
                  "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                  "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                  "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                  "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          },
          "site_key": "club48sa",
          "warnings": [],
          "pagespeed": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 82.0,
            "lcp_ms": 1659.0950332076677,
            "mobile": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 82.0,
              "lcp_ms": 1659.0950332076677,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 99.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 74.0,
              "lcp_ms": 441.2967807708637,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 100.0
            },
            "strategy": "mobile",
            "performance_score": 99.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "error": "",
                "clicks": 0,
                "position": 8.424242424242424,
                "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "indexable": true,
                "top_query": "rendement club deal immobilier",
                "redirected": false,
                "impressions": 33,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.25,
                "url": "https://www.club48sa.ch/",
                "error": "",
                "clicks": 7,
                "position": 4.214285714285714,
                "canonical": "https://www.club48sa.ch",
                "final_url": "https://www.club48sa.ch/",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 28,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.047619047619047616,
                "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "error": "",
                "clicks": 1,
                "position": 10.19047619047619,
                "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "indexable": true,
                "top_query": "reconnaissance de dette suisse",
                "redirected": false,
                "impressions": 21,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "error": "",
                "clicks": 0,
                "position": 8.933333333333334,
                "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "indexable": true,
                "top_query": "europe immobilier",
                "redirected": false,
                "impressions": 15,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.07692307692307693,
                "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "error": "",
                "clicks": 1,
                "position": 6.0,
                "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "indexable": true,
                "top_query": "rendement 15",
                "redirected": false,
                "impressions": 13,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "error": "",
                "clicks": 0,
                "position": 15.166666666666666,
                "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "indexable": true,
                "top_query": "achat appartement off-market genève",
                "redirected": false,
                "impressions": 6,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 7.0,
                "canonical": "https://www.club48sa.ch/blog",
                "final_url": "https://www.club48sa.ch/blog",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 2,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 7,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.club48sa.ch"
            ],
            "listed_url_sample_size": 18
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 100
        },
        "recorded_at": "2026-06-02 00:04:50.515137+00:00",
        "payload": {
          "gsc": {
            "ok": true,
            "checked": true,
            "message": "Connexion GSC OK",
            "payload": {
              "sample_rows": 1,
              "properties_count": 5,
              "resolved_property": "https://www.club48sa.ch"
            },
            "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
            "sitemap_submission_ready": true
          },
          "pages": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch",
              "error": "",
              "noindex": false,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "redirected": false,
              "robots_meta": "",
              "status_code": 200,
              "x_robots_tag": "",
              "redirect_chain": [],
              "robots_allowed": true,
              "canonical_present": true,
              "canonical_matches_url": true
            }
          ],
          "robots": {
            "ok": true,
            "url": "https://www.club48sa.ch/robots.txt",
            "error": "",
            "sitemaps": [
              "https://www.club48sa.ch/sitemap.xml"
            ],
            "blocks_all": false,
            "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
            "status_code": 200
          },
          "status": "ok",
          "checked": true,
          "sitemap": {
            "ok": true,
            "checked": [
              {
                "ok": true,
                "url": "https://www.club48sa.ch/sitemap.xml",
                "error": "",
                "root_tag": "urlset",
                "url_count": 18,
                "valid_xml": true,
                "status_code": 200,
                "child_checked": [],
                "child_sitemaps": [],
                "listed_sample_urls": [
                  "https://www.club48sa.ch/",
                  "https://www.club48sa.ch/blog",
                  "https://www.club48sa.ch/contact",
                  "https://www.club48sa.ch/mentions-legales",
                  "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                  "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                  "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                  "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                  "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                  "https://www.club48sa.ch/blog/club-investisseurs",
                  "https://www.club48sa.ch/blog/investissement-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                  "https://www.club48sa.ch/blog/club-investissement-prive",
                  "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                  "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                  "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                  "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                  "https://www.club48sa.ch/blog/club-deal-immobilier"
                ]
              }
            ],
            "selected": {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          },
          "site_key": "club48sa",
          "warnings": [],
          "pagespeed": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 82.0,
            "lcp_ms": 1659.0950332076677,
            "mobile": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 82.0,
              "lcp_ms": 1659.0950332076677,
              "source": "pagespeed_insights",
              "strategy": "mobile",
              "performance_score": 99.0
            },
            "source": "pagespeed_insights",
            "desktop": {
              "ok": true,
              "cls": 0.0,
              "inp_ms": 74.0,
              "lcp_ms": 441.2967807708637,
              "source": "pagespeed_insights",
              "strategy": "desktop",
              "performance_score": 100.0
            },
            "strategy": "mobile",
            "performance_score": 99.0
          },
          "gsc_live_urls": {
            "urls": [
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "error": "",
                "clicks": 0,
                "position": 8.424242424242424,
                "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
                "indexable": true,
                "top_query": "rendement club deal immobilier",
                "redirected": false,
                "impressions": 33,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.25,
                "url": "https://www.club48sa.ch/",
                "error": "",
                "clicks": 7,
                "position": 4.214285714285714,
                "canonical": "https://www.club48sa.ch",
                "final_url": "https://www.club48sa.ch/",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 28,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.047619047619047616,
                "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "error": "",
                "clicks": 1,
                "position": 10.19047619047619,
                "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "indexable": true,
                "top_query": "reconnaissance de dette suisse",
                "redirected": false,
                "impressions": 21,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "error": "",
                "clicks": 0,
                "position": 8.933333333333334,
                "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "indexable": true,
                "top_query": "europe immobilier",
                "redirected": false,
                "impressions": 15,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.07692307692307693,
                "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "error": "",
                "clicks": 1,
                "position": 6.0,
                "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "indexable": true,
                "top_query": "rendement 15",
                "redirected": false,
                "impressions": 13,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "error": "",
                "clicks": 0,
                "position": 15.166666666666666,
                "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "indexable": true,
                "top_query": "achat appartement off-market genève",
                "redirected": false,
                "impressions": 6,
                "status_code": 200
              },
              {
                "ok": true,
                "ctr": 0.0,
                "url": "https://www.club48sa.ch/blog",
                "error": "",
                "clicks": 0,
                "position": 7.0,
                "canonical": "https://www.club48sa.ch/blog",
                "final_url": "https://www.club48sa.ch/blog",
                "indexable": true,
                "top_query": "club 48 sa",
                "redirected": false,
                "impressions": 2,
                "status_code": 200
              }
            ],
            "source": "gsc_pages_28d",
            "checked": true,
            "broken_urls": [],
            "broken_count": 0,
            "checked_count": 7,
            "redirected_urls": [],
            "redirected_count": 0,
            "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
          },
          "blocking_issues": [],
          "safe_to_optimize": true,
          "sitemap_coverage": {
            "checked": true,
            "missing_urls": [],
            "expected_urls": [
              "https://www.club48sa.ch"
            ],
            "listed_url_sample_size": 18
          },
          "deployment_health": {
            "checked": false
          },
          "technical_health_score": 100
        }
      },
      {
        "id": 1158,
        "site_key": "club48sa",
        "source_type": "workflow_state",
        "subject_key": "recent_events",
        "payload_json": {
          "events": [
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-25T00:01:04.708380Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-26T00:00:50.281999Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-27T00:01:06.423335Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-05-27T20:30:23.001571Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-28T00:01:06.424216Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-29T00:00:57.942455Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-30T00:01:06.103224Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-05-30T20:30:43.280248Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-31T00:01:11.475811Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-01T00:01:06.589802Z"
            }
          ]
        },
        "recorded_at": "2026-06-02 00:01:12.371150+00:00",
        "payload": {
          "events": [
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-25T00:01:04.708380Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-26T00:00:50.281999Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-27T00:01:06.423335Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-05-27T20:30:23.001571Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-28T00:01:06.424216Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-29T00:00:57.942455Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-30T00:01:06.103224Z"
            },
            {
              "type": "hermes_content_lifecycle",
              "payload": {
                "merge_count": 0,
                "watch_count": 0,
                "create_count": 0,
                "deleted_count": 0,
                "optimize_count": 0
              },
              "recorded_at": "2026-05-30T20:30:43.280248Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-05-31T00:01:11.475811Z"
            },
            {
              "type": "hermes_daily_feedback_learning",
              "payload": {
                "sop_name": "adaptive-feedback-playbook",
                "lessons_created": 1
              },
              "recorded_at": "2026-06-01T00:01:06.589802Z"
            }
          ]
        }
      }
    ],
    "live_state": {
      "queue": {
        "by_status": {},
        "recent_items": []
      },
      "gsc": {
        "saved_at": "2026-05-22T10:09:06.487422Z",
        "top_pages": [
          {
            "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
            "clicks": 0,
            "impressions": 33,
            "ctr": 0.0,
            "position": 8.424242424242424,
            "top_query": "rendement club deal immobilier"
          },
          {
            "page": "https://www.club48sa.ch/",
            "clicks": 7,
            "impressions": 28,
            "ctr": 0.25,
            "position": 4.214285714285714,
            "top_query": "club 48 sa"
          },
          {
            "page": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
            "clicks": 1,
            "impressions": 21,
            "ctr": 0.047619047619047616,
            "position": 10.19047619047619,
            "top_query": "reconnaissance de dette suisse"
          }
        ],
        "top_queries": [
          {
            "query": "club 48 sa",
            "clicks": 2,
            "impressions": 11,
            "ctr": 0.18181818181818182,
            "position": 4.181818181818182
          },
          {
            "query": "rendement 15",
            "clicks": 0,
            "impressions": 5,
            "ctr": 0.0,
            "position": 8.2
          },
          {
            "query": "club 48",
            "clicks": 2,
            "impressions": 4,
            "ctr": 0.5,
            "position": 5.0
          },
          {
            "query": "rendement club deal immobilier",
            "clicks": 0,
            "impressions": 4,
            "ctr": 0.0,
            "position": 8.25
          },
          {
            "query": "club48",
            "clicks": 0,
            "impressions": 3,
            "ctr": 0.0,
            "position": 8.0
          }
        ]
      },
      "workflow": {
        "updated_at": "2026-06-03T00:01:08.807467Z",
        "recent_events": [
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "lessons_created": 1,
              "sop_name": "adaptive-feedback-playbook"
            },
            "recorded_at": "2026-05-31T00:01:11.475811Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "lessons_created": 1,
              "sop_name": "adaptive-feedback-playbook"
            },
            "recorded_at": "2026-06-01T00:01:06.589802Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "lessons_created": 1,
              "sop_name": "adaptive-feedback-playbook"
            },
            "recorded_at": "2026-06-02T00:01:14.558304Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "optimize_count": 0,
              "create_count": 0,
              "merge_count": 0,
              "watch_count": 0,
              "deleted_count": 0
            },
            "recorded_at": "2026-06-02T20:45:27.000129Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "lessons_created": 1,
              "sop_name": "adaptive-feedback-playbook"
            },
            "recorded_at": "2026-06-03T00:01:08.807302Z"
          }
        ]
      }
    },
    "site_context": {
      "site_key": "club48sa",
      "project_name": "Club 48 SA",
      "project_type": "repo_files",
      "site_url": "https://www.club48sa.ch",
      "base_url": "https://www.club48sa.ch",
      "gsc_property": "https://www.club48sa.ch",
      "gsc_blog_prefix": "https://www.club48sa.ch",
      "agent_mode": "full_autonomy",
      "operator_policy": "agent_driven",
      "primary_market": "ch",
      "target_countries": [
        "ch",
        "fr"
      ],
      "seo_scope": "national",
      "competitors": [],
      "editorial_policy": {
        "queue_target_max": 0,
        "queue_resume_threshold": 0,
        "publish_timezone": "Europe/Paris",
        "publish_hour_local": 9,
        "publish_weekdays_only": true,
        "max_daily_publishes": 0,
        "keyword_min_volume": 50,
        "keyword_max_difficulty": 45
      },
      "image_policy": {
        "style_guardrail": "editorial_photo",
        "subject_focus": "premium_real_estate_objects",
        "allow_humans": "limited",
        "fallback_enabled": true,
        "max_prompt_variants": 5,
        "min_quality_score": 72
      },
      "features": {
        "gsc_enabled": true,
        "writer_gsc_enabled": false,
        "gsc_opportunities_enabled": true,
        "seo_panel_enabled": true,
        "crawler_enabled": true,
        "linkmap_enabled": true
      }
    }
  },
  "validated_lessons": [
    {
      "id": 177,
      "site_key": "club48sa",
      "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.club48sa.ch/blog/club-deal-immobilier",
            "clicks": 0,
            "position": 8.424242424242424,
            "top_query": "rendement club deal immobilier",
            "impressions": 33
          }
        ]
      },
      "created_at": "2026-06-03 00:01:08.571679+00:00",
      "updated_at": "2026-06-03 00:01:08.873016+00:00",
      "details": {
        "pages": [
          {
            "ctr": 0.0,
            "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
            "clicks": 0,
            "position": 8.424242424242424,
            "top_query": "rendement club deal immobilier",
            "impressions": 33
          }
        ]
      }
    }
  ],
  "active_sops": [
    {
      "id": 157,
      "site_key": "club48sa",
      "scope": "site",
      "name": "adaptive-feedback-playbook",
      "version": 8,
      "status": "validated",
      "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-06-02 00:01:14.384295+00:00",
      "updated_at": "2026-06-03 00:01:08.896957+00:00",
      "confidence_score": 0,
      "confidence_label": "low"
    }
  ],
  "recent_outcomes": [],
  "recent_observations": [
    {
      "id": 1191,
      "site_key": "club48sa",
      "source_type": "technical_audit",
      "subject_key": "club48sa",
      "payload_json": {
        "gsc": {
          "ok": true,
          "checked": true,
          "message": "Connexion GSC OK",
          "payload": {
            "sample_rows": 1,
            "properties_count": 5,
            "resolved_property": "https://www.club48sa.ch"
          },
          "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
          "sitemap_submission_ready": true
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.club48sa.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.club48sa.ch",
            "final_url": "https://www.club48sa.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.club48sa.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.club48sa.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.club48sa.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 18,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.club48sa.ch/",
              "https://www.club48sa.ch/blog",
              "https://www.club48sa.ch/contact",
              "https://www.club48sa.ch/mentions-legales",
              "https://www.club48sa.ch/blog/off-market-suisse-geneve",
              "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
              "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
              "https://www.club48sa.ch/blog/acces-investisseur-off-market",
              "https://www.club48sa.ch/blog/opportunite-investissement-prive",
              "https://www.club48sa.ch/blog/club-investisseurs",
              "https://www.club48sa.ch/blog/investissement-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
              "https://www.club48sa.ch/blog/club-investissement-prive",
              "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier"
            ]
          }
        },
        "site_key": "club48sa",
        "warnings": [],
        "pagespeed": {
          "ok": true,
          "cls": 0.0,
          "inp_ms": 54.0,
          "lcp_ms": 1055.497702821094,
          "mobile": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 54.0,
            "lcp_ms": 1055.497702821094,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 100.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 77.0,
            "lcp_ms": 430.29678364156854,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 100.0
          },
          "strategy": "mobile",
          "performance_score": 100.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "error": "",
              "clicks": 0,
              "position": 8.424242424242424,
              "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "indexable": true,
              "top_query": "rendement club deal immobilier",
              "redirected": false,
              "impressions": 33,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.25,
              "url": "https://www.club48sa.ch/",
              "error": "",
              "clicks": 7,
              "position": 4.214285714285714,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 28,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.047619047619047616,
              "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "error": "",
              "clicks": 1,
              "position": 10.19047619047619,
              "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "indexable": true,
              "top_query": "reconnaissance de dette suisse",
              "redirected": false,
              "impressions": 21,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "error": "",
              "clicks": 0,
              "position": 8.933333333333334,
              "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "indexable": true,
              "top_query": "europe immobilier",
              "redirected": false,
              "impressions": 15,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.07692307692307693,
              "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "error": "",
              "clicks": 1,
              "position": 6.0,
              "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "indexable": true,
              "top_query": "rendement 15",
              "redirected": false,
              "impressions": 13,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "error": "",
              "clicks": 0,
              "position": 15.166666666666666,
              "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "indexable": true,
              "top_query": "achat appartement off-market genève",
              "redirected": false,
              "impressions": 6,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 7.0,
              "canonical": "https://www.club48sa.ch/blog",
              "final_url": "https://www.club48sa.ch/blog",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 2,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 7,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.club48sa.ch"
          ],
          "listed_url_sample_size": 18
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 100
      },
      "recorded_at": "2026-06-03 00:04:47.666807+00:00",
      "payload": {
        "gsc": {
          "ok": true,
          "checked": true,
          "message": "Connexion GSC OK",
          "payload": {
            "sample_rows": 1,
            "properties_count": 5,
            "resolved_property": "https://www.club48sa.ch"
          },
          "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
          "sitemap_submission_ready": true
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.club48sa.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.club48sa.ch",
            "final_url": "https://www.club48sa.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.club48sa.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.club48sa.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.club48sa.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 18,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.club48sa.ch/",
              "https://www.club48sa.ch/blog",
              "https://www.club48sa.ch/contact",
              "https://www.club48sa.ch/mentions-legales",
              "https://www.club48sa.ch/blog/off-market-suisse-geneve",
              "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
              "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
              "https://www.club48sa.ch/blog/acces-investisseur-off-market",
              "https://www.club48sa.ch/blog/opportunite-investissement-prive",
              "https://www.club48sa.ch/blog/club-investisseurs",
              "https://www.club48sa.ch/blog/investissement-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
              "https://www.club48sa.ch/blog/club-investissement-prive",
              "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier"
            ]
          }
        },
        "site_key": "club48sa",
        "warnings": [],
        "pagespeed": {
          "ok": true,
          "cls": 0.0,
          "inp_ms": 54.0,
          "lcp_ms": 1055.497702821094,
          "mobile": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 54.0,
            "lcp_ms": 1055.497702821094,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 100.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 77.0,
            "lcp_ms": 430.29678364156854,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 100.0
          },
          "strategy": "mobile",
          "performance_score": 100.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "error": "",
              "clicks": 0,
              "position": 8.424242424242424,
              "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "indexable": true,
              "top_query": "rendement club deal immobilier",
              "redirected": false,
              "impressions": 33,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.25,
              "url": "https://www.club48sa.ch/",
              "error": "",
              "clicks": 7,
              "position": 4.214285714285714,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 28,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.047619047619047616,
              "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "error": "",
              "clicks": 1,
              "position": 10.19047619047619,
              "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "indexable": true,
              "top_query": "reconnaissance de dette suisse",
              "redirected": false,
              "impressions": 21,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "error": "",
              "clicks": 0,
              "position": 8.933333333333334,
              "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "indexable": true,
              "top_query": "europe immobilier",
              "redirected": false,
              "impressions": 15,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.07692307692307693,
              "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "error": "",
              "clicks": 1,
              "position": 6.0,
              "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "indexable": true,
              "top_query": "rendement 15",
              "redirected": false,
              "impressions": 13,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "error": "",
              "clicks": 0,
              "position": 15.166666666666666,
              "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "indexable": true,
              "top_query": "achat appartement off-market genève",
              "redirected": false,
              "impressions": 6,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 7.0,
              "canonical": "https://www.club48sa.ch/blog",
              "final_url": "https://www.club48sa.ch/blog",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 2,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 7,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.club48sa.ch"
          ],
          "listed_url_sample_size": 18
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 100
      }
    },
    {
      "id": 1185,
      "site_key": "club48sa",
      "source_type": "workflow_state",
      "subject_key": "recent_events",
      "payload_json": {
        "events": [
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-27T00:01:06.423335Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-05-27T20:30:23.001571Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-28T00:01:06.424216Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-29T00:00:57.942455Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-30T00:01:06.103224Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-05-30T20:30:43.280248Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-31T00:01:11.475811Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-01T00:01:06.589802Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-02T00:01:14.558304Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-02T20:45:27.000129Z"
          }
        ]
      },
      "recorded_at": "2026-06-03 00:01:06.505244+00:00",
      "payload": {
        "events": [
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-27T00:01:06.423335Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-05-27T20:30:23.001571Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-28T00:01:06.424216Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-29T00:00:57.942455Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-30T00:01:06.103224Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-05-30T20:30:43.280248Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-31T00:01:11.475811Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-01T00:01:06.589802Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-02T00:01:14.558304Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-06-02T20:45:27.000129Z"
          }
        ]
      }
    },
    {
      "id": 1184,
      "site_key": "club48sa",
      "source_type": "queue_state",
      "subject_key": "recent_queue",
      "payload_json": {
        "recent_rows": []
      },
      "recorded_at": "2026-06-03 00:01:06.492259+00:00",
      "payload": {
        "recent_rows": []
      }
    },
    {
      "id": 1183,
      "site_key": "club48sa",
      "source_type": "gsc_snapshot",
      "subject_key": "pages_28d",
      "payload_json": {
        "saved_at": "2026-05-22T10:09:06.487422Z",
        "top_pages": [
          {
            "ctr": 0.0,
            "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
            "clicks": 0,
            "position": 8.424242424242424,
            "top_query": "rendement club deal immobilier",
            "impressions": 33
          },
          {
            "ctr": 0.25,
            "page": "https://www.club48sa.ch/",
            "clicks": 7,
            "position": 4.214285714285714,
            "top_query": "club 48 sa",
            "impressions": 28
          },
          {
            "ctr": 0.047619047619047616,
            "page": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
            "clicks": 1,
            "position": 10.19047619047619,
            "top_query": "reconnaissance de dette suisse",
            "impressions": 21
          },
          {
            "ctr": 0.0,
            "page": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
            "clicks": 0,
            "position": 8.933333333333334,
            "top_query": "europe immobilier",
            "impressions": 15
          },
          {
            "ctr": 0.07692307692307693,
            "page": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
            "clicks": 1,
            "position": 6.0,
            "top_query": "rendement 15",
            "impressions": 13
          }
        ],
        "top_queries": [
          {
            "ctr": 0.18181818181818182,
            "query": "club 48 sa",
            "clicks": 2,
            "position": 4.181818181818182,
            "impressions": 11
          },
          {
            "ctr": 0.0,
            "query": "rendement 15",
            "clicks": 0,
            "position": 8.2,
            "impressions": 5
          },
          {
            "ctr": 0.5,
            "query": "club 48",
            "clicks": 2,
            "position": 5.0,
            "impressions": 4
          },
          {
            "ctr": 0.0,
            "query": "rendement club deal immobilier",
            "clicks": 0,
            "position": 8.25,
            "impressions": 4
          },
          {
            "ctr": 0.0,
            "query": "club48",
            "clicks": 0,
            "position": 8.0,
            "impressions": 3
          },
          {
            "ctr": 0.0,
            "query": "reconnaissance de dette suisse",
            "clicks": 0,
            "position": 12.333333333333334,
            "impressions": 3
          },
          {
            "ctr": 0.0,
            "query": "\"crowdfunding immobilier\" -site:reddit.com -site:twitter.com -site:x.com -site:wykop.pl -site:tripadvisor.com -site:youtube.com -site:yelp.com -site:booking.com -site:facebook.com -site:instagram.com -site:tiktok.com",
            "clicks": 0,
            "position": 3.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "achat appartement off-market genève",
            "clicks": 0,
            "position": 52.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "club deal",
            "clicks": 0,
            "position": 55.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "club deal immo",
            "clicks": 0,
            "position": 8.0,
            "impressions": 1
          }
        ]
      },
      "recorded_at": "2026-06-03 00:01:06.474955+00:00",
      "payload": {
        "saved_at": "2026-05-22T10:09:06.487422Z",
        "top_pages": [
          {
            "ctr": 0.0,
            "page": "https://www.club48sa.ch/blog/club-deal-immobilier",
            "clicks": 0,
            "position": 8.424242424242424,
            "top_query": "rendement club deal immobilier",
            "impressions": 33
          },
          {
            "ctr": 0.25,
            "page": "https://www.club48sa.ch/",
            "clicks": 7,
            "position": 4.214285714285714,
            "top_query": "club 48 sa",
            "impressions": 28
          },
          {
            "ctr": 0.047619047619047616,
            "page": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
            "clicks": 1,
            "position": 10.19047619047619,
            "top_query": "reconnaissance de dette suisse",
            "impressions": 21
          },
          {
            "ctr": 0.0,
            "page": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
            "clicks": 0,
            "position": 8.933333333333334,
            "top_query": "europe immobilier",
            "impressions": 15
          },
          {
            "ctr": 0.07692307692307693,
            "page": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
            "clicks": 1,
            "position": 6.0,
            "top_query": "rendement 15",
            "impressions": 13
          }
        ],
        "top_queries": [
          {
            "ctr": 0.18181818181818182,
            "query": "club 48 sa",
            "clicks": 2,
            "position": 4.181818181818182,
            "impressions": 11
          },
          {
            "ctr": 0.0,
            "query": "rendement 15",
            "clicks": 0,
            "position": 8.2,
            "impressions": 5
          },
          {
            "ctr": 0.5,
            "query": "club 48",
            "clicks": 2,
            "position": 5.0,
            "impressions": 4
          },
          {
            "ctr": 0.0,
            "query": "rendement club deal immobilier",
            "clicks": 0,
            "position": 8.25,
            "impressions": 4
          },
          {
            "ctr": 0.0,
            "query": "club48",
            "clicks": 0,
            "position": 8.0,
            "impressions": 3
          },
          {
            "ctr": 0.0,
            "query": "reconnaissance de dette suisse",
            "clicks": 0,
            "position": 12.333333333333334,
            "impressions": 3
          },
          {
            "ctr": 0.0,
            "query": "\"crowdfunding immobilier\" -site:reddit.com -site:twitter.com -site:x.com -site:wykop.pl -site:tripadvisor.com -site:youtube.com -site:yelp.com -site:booking.com -site:facebook.com -site:instagram.com -site:tiktok.com",
            "clicks": 0,
            "position": 3.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "achat appartement off-market genève",
            "clicks": 0,
            "position": 52.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "club deal",
            "clicks": 0,
            "position": 55.0,
            "impressions": 1
          },
          {
            "ctr": 0.0,
            "query": "club deal immo",
            "clicks": 0,
            "position": 8.0,
            "impressions": 1
          }
        ]
      }
    },
    {
      "id": 1175,
      "site_key": "club48sa",
      "source_type": "learningseo_site_feedback",
      "subject_key": "club48sa",
      "payload_json": {
        "site_key": "club48sa",
        "project_name": "Club 48 SA",
        "applied_topics": [
          "fundamentals",
          "execution",
          "technical",
          "content",
          "links",
          "automation"
        ],
        "contradictions": [],
        "sop_candidates": [
          "Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.",
          "Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.",
          "Automated actions must emit events, measurements, and postmortems by default."
        ],
        "lessons_created": 6
      },
      "recorded_at": "2026-06-03 00:00:14.225368+00:00",
      "payload": {
        "site_key": "club48sa",
        "project_name": "Club 48 SA",
        "applied_topics": [
          "fundamentals",
          "execution",
          "technical",
          "content",
          "links",
          "automation"
        ],
        "contradictions": [],
        "sop_candidates": [
          "Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.",
          "Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.",
          "Automated actions must emit events, measurements, and postmortems by default."
        ],
        "lessons_created": 6
      }
    },
    {
      "id": 1164,
      "site_key": "club48sa",
      "source_type": "technical_audit",
      "subject_key": "club48sa",
      "payload_json": {
        "gsc": {
          "ok": true,
          "checked": true,
          "message": "Connexion GSC OK",
          "payload": {
            "sample_rows": 1,
            "properties_count": 5,
            "resolved_property": "https://www.club48sa.ch"
          },
          "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
          "sitemap_submission_ready": true
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.club48sa.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.club48sa.ch",
            "final_url": "https://www.club48sa.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.club48sa.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.club48sa.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.club48sa.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 18,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.club48sa.ch/",
              "https://www.club48sa.ch/blog",
              "https://www.club48sa.ch/contact",
              "https://www.club48sa.ch/mentions-legales",
              "https://www.club48sa.ch/blog/off-market-suisse-geneve",
              "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
              "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
              "https://www.club48sa.ch/blog/acces-investisseur-off-market",
              "https://www.club48sa.ch/blog/opportunite-investissement-prive",
              "https://www.club48sa.ch/blog/club-investisseurs",
              "https://www.club48sa.ch/blog/investissement-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
              "https://www.club48sa.ch/blog/club-investissement-prive",
              "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier"
            ]
          }
        },
        "site_key": "club48sa",
        "warnings": [],
        "pagespeed": {
          "ok": true,
          "cls": 0.0,
          "inp_ms": 82.0,
          "lcp_ms": 1659.0950332076677,
          "mobile": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 82.0,
            "lcp_ms": 1659.0950332076677,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 99.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 74.0,
            "lcp_ms": 441.2967807708637,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 100.0
          },
          "strategy": "mobile",
          "performance_score": 99.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "error": "",
              "clicks": 0,
              "position": 8.424242424242424,
              "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "indexable": true,
              "top_query": "rendement club deal immobilier",
              "redirected": false,
              "impressions": 33,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.25,
              "url": "https://www.club48sa.ch/",
              "error": "",
              "clicks": 7,
              "position": 4.214285714285714,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 28,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.047619047619047616,
              "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "error": "",
              "clicks": 1,
              "position": 10.19047619047619,
              "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "indexable": true,
              "top_query": "reconnaissance de dette suisse",
              "redirected": false,
              "impressions": 21,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "error": "",
              "clicks": 0,
              "position": 8.933333333333334,
              "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "indexable": true,
              "top_query": "europe immobilier",
              "redirected": false,
              "impressions": 15,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.07692307692307693,
              "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "error": "",
              "clicks": 1,
              "position": 6.0,
              "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "indexable": true,
              "top_query": "rendement 15",
              "redirected": false,
              "impressions": 13,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "error": "",
              "clicks": 0,
              "position": 15.166666666666666,
              "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "indexable": true,
              "top_query": "achat appartement off-market genève",
              "redirected": false,
              "impressions": 6,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 7.0,
              "canonical": "https://www.club48sa.ch/blog",
              "final_url": "https://www.club48sa.ch/blog",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 2,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 7,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.club48sa.ch"
          ],
          "listed_url_sample_size": 18
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 100
      },
      "recorded_at": "2026-06-02 00:04:50.515137+00:00",
      "payload": {
        "gsc": {
          "ok": true,
          "checked": true,
          "message": "Connexion GSC OK",
          "payload": {
            "sample_rows": 1,
            "properties_count": 5,
            "resolved_property": "https://www.club48sa.ch"
          },
          "sitemap_url": "https://www.club48sa.ch/sitemap.xml",
          "sitemap_submission_ready": true
        },
        "pages": [
          {
            "ok": true,
            "url": "https://www.club48sa.ch",
            "error": "",
            "noindex": false,
            "canonical": "https://www.club48sa.ch",
            "final_url": "https://www.club48sa.ch/",
            "indexable": true,
            "redirected": false,
            "robots_meta": "",
            "status_code": 200,
            "x_robots_tag": "",
            "redirect_chain": [],
            "robots_allowed": true,
            "canonical_present": true,
            "canonical_matches_url": true
          }
        ],
        "robots": {
          "ok": true,
          "url": "https://www.club48sa.ch/robots.txt",
          "error": "",
          "sitemaps": [
            "https://www.club48sa.ch/sitemap.xml"
          ],
          "blocks_all": false,
          "rules_text": "User-Agent: *\nAllow: /\n\nSitemap: https://www.club48sa.ch/sitemap.xml\n",
          "status_code": 200
        },
        "status": "ok",
        "checked": true,
        "sitemap": {
          "ok": true,
          "checked": [
            {
              "ok": true,
              "url": "https://www.club48sa.ch/sitemap.xml",
              "error": "",
              "root_tag": "urlset",
              "url_count": 18,
              "valid_xml": true,
              "status_code": 200,
              "child_checked": [],
              "child_sitemaps": [],
              "listed_sample_urls": [
                "https://www.club48sa.ch/",
                "https://www.club48sa.ch/blog",
                "https://www.club48sa.ch/contact",
                "https://www.club48sa.ch/mentions-legales",
                "https://www.club48sa.ch/blog/off-market-suisse-geneve",
                "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
                "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
                "https://www.club48sa.ch/blog/acces-investisseur-off-market",
                "https://www.club48sa.ch/blog/opportunite-investissement-prive",
                "https://www.club48sa.ch/blog/club-investisseurs",
                "https://www.club48sa.ch/blog/investissement-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
                "https://www.club48sa.ch/blog/club-investissement-prive",
                "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
                "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
                "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
                "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
                "https://www.club48sa.ch/blog/club-deal-immobilier"
              ]
            }
          ],
          "selected": {
            "ok": true,
            "url": "https://www.club48sa.ch/sitemap.xml",
            "error": "",
            "root_tag": "urlset",
            "url_count": 18,
            "valid_xml": true,
            "status_code": 200,
            "child_checked": [],
            "child_sitemaps": [],
            "listed_sample_urls": [
              "https://www.club48sa.ch/",
              "https://www.club48sa.ch/blog",
              "https://www.club48sa.ch/contact",
              "https://www.club48sa.ch/mentions-legales",
              "https://www.club48sa.ch/blog/off-market-suisse-geneve",
              "https://www.club48sa.ch/blog/recevoir-opportunites-immobilieres-off-market",
              "https://www.club48sa.ch/blog/dossier-immobilier-off-market-qualifie",
              "https://www.club48sa.ch/blog/acces-investisseur-off-market",
              "https://www.club48sa.ch/blog/opportunite-investissement-prive",
              "https://www.club48sa.ch/blog/club-investisseurs",
              "https://www.club48sa.ch/blog/investissement-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier-prive",
              "https://www.club48sa.ch/blog/club-investissement-prive",
              "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "https://www.club48sa.ch/blog/club-deal-immobilier"
            ]
          }
        },
        "site_key": "club48sa",
        "warnings": [],
        "pagespeed": {
          "ok": true,
          "cls": 0.0,
          "inp_ms": 82.0,
          "lcp_ms": 1659.0950332076677,
          "mobile": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 82.0,
            "lcp_ms": 1659.0950332076677,
            "source": "pagespeed_insights",
            "strategy": "mobile",
            "performance_score": 99.0
          },
          "source": "pagespeed_insights",
          "desktop": {
            "ok": true,
            "cls": 0.0,
            "inp_ms": 74.0,
            "lcp_ms": 441.2967807708637,
            "source": "pagespeed_insights",
            "strategy": "desktop",
            "performance_score": 100.0
          },
          "strategy": "mobile",
          "performance_score": 99.0
        },
        "gsc_live_urls": {
          "urls": [
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "error": "",
              "clicks": 0,
              "position": 8.424242424242424,
              "canonical": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "final_url": "https://www.club48sa.ch/blog/club-deal-immobilier",
              "indexable": true,
              "top_query": "rendement club deal immobilier",
              "redirected": false,
              "impressions": 33,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.25,
              "url": "https://www.club48sa.ch/",
              "error": "",
              "clicks": 7,
              "position": 4.214285714285714,
              "canonical": "https://www.club48sa.ch",
              "final_url": "https://www.club48sa.ch/",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 28,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.047619047619047616,
              "url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "error": "",
              "clicks": 1,
              "position": 10.19047619047619,
              "canonical": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "final_url": "https://www.club48sa.ch/blog/reconnaissance-de-dette-suisse-investissement",
              "indexable": true,
              "top_query": "reconnaissance de dette suisse",
              "redirected": false,
              "impressions": 21,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "error": "",
              "clicks": 0,
              "position": 8.933333333333334,
              "canonical": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "final_url": "https://www.club48sa.ch/blog/investir-immobilier-europe-suisse-france",
              "indexable": true,
              "top_query": "europe immobilier",
              "redirected": false,
              "impressions": 15,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.07692307692307693,
              "url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "error": "",
              "clicks": 1,
              "position": 6.0,
              "canonical": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "final_url": "https://www.club48sa.ch/blog/rendement-immobilier-8-15-pourcent",
              "indexable": true,
              "top_query": "rendement 15",
              "redirected": false,
              "impressions": 13,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "error": "",
              "clicks": 0,
              "position": 15.166666666666666,
              "canonical": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "final_url": "https://www.club48sa.ch/blog/investissement-immobilier-off-market",
              "indexable": true,
              "top_query": "achat appartement off-market genève",
              "redirected": false,
              "impressions": 6,
              "status_code": 200
            },
            {
              "ok": true,
              "ctr": 0.0,
              "url": "https://www.club48sa.ch/blog",
              "error": "",
              "clicks": 0,
              "position": 7.0,
              "canonical": "https://www.club48sa.ch/blog",
              "final_url": "https://www.club48sa.ch/blog",
              "indexable": true,
              "top_query": "club 48 sa",
              "redirected": false,
              "impressions": 2,
              "status_code": 200
            }
          ],
          "source": "gsc_pages_28d",
          "checked": true,
          "broken_urls": [],
          "broken_count": 0,
          "checked_count": 7,
          "redirected_urls": [],
          "redirected_count": 0,
          "snapshot_saved_at": "2026-05-22T10:09:06.487422Z"
        },
        "blocking_issues": [],
        "safe_to_optimize": true,
        "sitemap_coverage": {
          "checked": true,
          "missing_urls": [],
          "expected_urls": [
            "https://www.club48sa.ch"
          ],
          "listed_url_sample_size": 18
        },
        "deployment_health": {
          "checked": false
        },
        "technical_health_score": 100
      }
    },
    {
      "id": 1158,
      "site_key": "club48sa",
      "source_type": "workflow_state",
      "subject_key": "recent_events",
      "payload_json": {
        "events": [
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-25T00:01:04.708380Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-26T00:00:50.281999Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-27T00:01:06.423335Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-05-27T20:30:23.001571Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-28T00:01:06.424216Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-29T00:00:57.942455Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-30T00:01:06.103224Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-05-30T20:30:43.280248Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-31T00:01:11.475811Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-01T00:01:06.589802Z"
          }
        ]
      },
      "recorded_at": "2026-06-02 00:01:12.371150+00:00",
      "payload": {
        "events": [
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-25T00:01:04.708380Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-26T00:00:50.281999Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-27T00:01:06.423335Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-05-27T20:30:23.001571Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-28T00:01:06.424216Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-29T00:00:57.942455Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-30T00:01:06.103224Z"
          },
          {
            "type": "hermes_content_lifecycle",
            "payload": {
              "merge_count": 0,
              "watch_count": 0,
              "create_count": 0,
              "deleted_count": 0,
              "optimize_count": 0
            },
            "recorded_at": "2026-05-30T20:30:43.280248Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-05-31T00:01:11.475811Z"
          },
          {
            "type": "hermes_daily_feedback_learning",
            "payload": {
              "sop_name": "adaptive-feedback-playbook",
              "lessons_created": 1
            },
            "recorded_at": "2026-06-01T00:01:06.589802Z"
          }
        ]
      }
    },
    {
      "id": 1157,
      "site_key": "club48sa",
      "source_type": "queue_state",
      "subject_key": "recent_queue",
      "payload_json": {
        "recent_rows": []
      },
      "recorded_at": "2026-06-02 00:01:12.356078+00:00",
      "payload": {
        "recent_rows": []
      }
    }
  ]
}