{
"site_key": "optiprime",
"task": "obsidian export",
"lessons": [
{
"id": 14,
"category": "measurement",
"lesson": "Toujours mesurer après action.",
"confidence": "high",
"status": "validated"
},
{
"id": 17,
"category": "measurement",
"lesson": "Measured SEO actions are generating positive post-action deltas. Increase trust in SOPs that led to these actions.",
"confidence": "high",
"status": "validated"
},
{
"id": 18,
"category": "measurement",
"lesson": "Mesurer après publication améliore la qualité des SOP.",
"confidence": "high",
"status": "validated"
},
{
"id": 15,
"category": "postmortem",
"lesson": "A measured SEO action produced a negative post-action delta. Do not reinforce this SOP until the hypothesis, page scope, or review window is revised.",
"confidence": "high",
"status": "draft"
},
{
"id": 169,
"site_key": "optiprime",
"category": "ctr_optimization",
"lesson": "Several visible pages have low CTR. Prioritize title, meta description, and intent alignment refreshes before creating net new content.",
"confidence": "high",
"source": "feedback_loop",
"status": "validated",
"details_json": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 27.193933823529413,
"top_query": "comparer assurance obligatoire",
"impressions": 1088
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 19.761627906976745,
"top_query": "classement assurance de base",
"impressions": 344
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 33.01851851851852,
"top_query": "lamal suisse pas chère",
"impressions": 270
},
{
"ctr": 0.004878048780487805,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 19.98048780487805,
"top_query": "guide assurance maladie suisse",
"impressions": 205
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 50.776119402985074,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 134
}
]
},
"created_at": "2026-06-01 00:00:16.107204+00:00",
"updated_at": "2026-06-01 00:00:17.182142+00:00",
"details": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 27.193933823529413,
"top_query": "comparer assurance obligatoire",
"impressions": 1088
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 19.761627906976745,
"top_query": "classement assurance de base",
"impressions": 344
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 33.01851851851852,
"top_query": "lamal suisse pas chère",
"impressions": 270
},
{
"ctr": 0.004878048780487805,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 19.98048780487805,
"top_query": "guide assurance maladie suisse",
"impressions": 205
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 50.776119402985074,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 134
}
]
}
}
],
"sops": [
{
"id": 8,
"name": "adaptive-feedback-playbook",
"scope": "site",
"status": "deprecated",
"content": "Toujours mesurer après action."
}
],
"recent_memory": [
{
"id": 271,
"site_key": "optiprime",
"category": "routine",
"action": "daily_feedback_learning",
"target": "optiprime",
"outcome": "1 lessons derived",
"quality": "good",
"details_json": {
"sop": {
"sop": {
"id": 150,
"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": 25,
"site_key": "optiprime",
"created_at": "2026-06-01 00:00:16.468091+00:00",
"updated_at": "2026-06-01 00:00:16.468091+00:00",
"confidence_label": "low",
"confidence_score": 0
},
"evidence": {
"lesson_count": 20,
"outcome_count": 10,
"observation_count": 10
},
"site_key": "optiprime"
},
"feedback": {
"site_key": "optiprime",
"gsc_pages": 5,
"queue_rows": 20,
"gsc_queries": 114,
"workflow_events": 50
},
"business_feedback": {
"crawler": {
"ideas": [],
"issues": [],
"message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x71b7bfa36300>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"crawl_ok": false,
"acquisition_ok": false
},
"linkmap": {
"result": {},
"message": "Outil LinkMap introuvable pour pagerank.",
"pagerank_ok": false,
"strategy_ok": false
},
"site_key": "optiprime",
"available": true,
"seo_panel": {
"alerts": [],
"message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x71b7bfa34680>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"alerts_ok": false,
"overview_ok": false,
"health_score": null
},
"project_name": "Optiprime"
}
},
"recorded_at": "2026-06-01 00:00:17.025848+00:00",
"details": {
"sop": {
"sop": {
"id": 150,
"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": 25,
"site_key": "optiprime",
"created_at": "2026-06-01 00:00:16.468091+00:00",
"updated_at": "2026-06-01 00:00:16.468091+00:00",
"confidence_label": "low",
"confidence_score": 0
},
"evidence": {
"lesson_count": 20,
"outcome_count": 10,
"observation_count": 10
},
"site_key": "optiprime"
},
"feedback": {
"site_key": "optiprime",
"gsc_pages": 5,
"queue_rows": 20,
"gsc_queries": 114,
"workflow_events": 50
},
"business_feedback": {
"crawler": {
"ideas": [],
"issues": [],
"message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x71b7bfa36300>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"crawl_ok": false,
"acquisition_ok": false
},
"linkmap": {
"result": {},
"message": "Outil LinkMap introuvable pour pagerank.",
"pagerank_ok": false,
"strategy_ok": false
},
"site_key": "optiprime",
"available": true,
"seo_panel": {
"alerts": [],
"message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x71b7bfa34680>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"alerts_ok": false,
"overview_ok": false,
"health_score": null
},
"project_name": "Optiprime"
}
}
},
{
"id": 264,
"site_key": "optiprime",
"category": "routine",
"action": "daily_feedback_learning",
"target": "optiprime",
"outcome": "1 lessons derived",
"quality": "good",
"details_json": {
"sop": {
"sop": {
"id": 141,
"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": 24,
"site_key": "optiprime",
"created_at": "2026-05-30 00:00:19.259888+00:00",
"updated_at": "2026-05-31 00:00:17.573878+00:00",
"confidence_label": "low",
"confidence_score": 0
},
"evidence": {
"lesson_count": 20,
"outcome_count": 10,
"observation_count": 10
},
"site_key": "optiprime"
},
"feedback": {
"site_key": "optiprime",
"gsc_pages": 5,
"queue_rows": 20,
"gsc_queries": 114,
"workflow_events": 50
},
"business_feedback": {
"crawler": {
"ideas": [],
"issues": [],
"message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7a6ba675dc10>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"crawl_ok": false,
"acquisition_ok": false
},
"linkmap": {
"result": {},
"message": "Outil LinkMap introuvable pour pagerank.",
"pagerank_ok": false,
"strategy_ok": false
},
"site_key": "optiprime",
"available": true,
"seo_panel": {
"alerts": [],
"message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7a6ba675fa70>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"alerts_ok": false,
"overview_ok": false,
"health_score": null
},
"project_name": "Optiprime"
}
},
"recorded_at": "2026-05-31 00:00:18.343740+00:00",
"details": {
"sop": {
"sop": {
"id": 141,
"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": 24,
"site_key": "optiprime",
"created_at": "2026-05-30 00:00:19.259888+00:00",
"updated_at": "2026-05-31 00:00:17.573878+00:00",
"confidence_label": "low",
"confidence_score": 0
},
"evidence": {
"lesson_count": 20,
"outcome_count": 10,
"observation_count": 10
},
"site_key": "optiprime"
},
"feedback": {
"site_key": "optiprime",
"gsc_pages": 5,
"queue_rows": 20,
"gsc_queries": 114,
"workflow_events": 50
},
"business_feedback": {
"crawler": {
"ideas": [],
"issues": [],
"message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7a6ba675dc10>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"crawl_ok": false,
"acquisition_ok": false
},
"linkmap": {
"result": {},
"message": "Outil LinkMap introuvable pour pagerank.",
"pagerank_ok": false,
"strategy_ok": false
},
"site_key": "optiprime",
"available": true,
"seo_panel": {
"alerts": [],
"message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7a6ba675fa70>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"alerts_ok": false,
"overview_ok": false,
"health_score": null
},
"project_name": "Optiprime"
}
}
},
{
"id": 257,
"site_key": "optiprime",
"category": "routine",
"action": "daily_feedback_learning",
"target": "optiprime",
"outcome": "1 lessons derived",
"quality": "good",
"details_json": {
"sop": {
"sop": {
"id": 141,
"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": 24,
"site_key": "optiprime",
"created_at": "2026-05-30 00:00:19.259888+00:00",
"updated_at": "2026-05-30 00:00:19.259888+00:00",
"confidence_label": "low",
"confidence_score": 0
},
"evidence": {
"lesson_count": 20,
"outcome_count": 10,
"observation_count": 10
},
"site_key": "optiprime"
},
"feedback": {
"site_key": "optiprime",
"gsc_pages": 5,
"queue_rows": 20,
"gsc_queries": 114,
"workflow_events": 50
},
"business_feedback": {
"crawler": {
"ideas": [],
"issues": [],
"message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x75c6348223c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"crawl_ok": false,
"acquisition_ok": false
},
"linkmap": {
"result": {},
"message": "Outil LinkMap introuvable pour pagerank.",
"pagerank_ok": false,
"strategy_ok": false
},
"site_key": "optiprime",
"available": true,
"seo_panel": {
"alerts": [],
"message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x75c634820740>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"alerts_ok": false,
"overview_ok": false,
"health_score": null
},
"project_name": "Optiprime"
}
},
"recorded_at": "2026-05-30 00:00:19.959896+00:00",
"details": {
"sop": {
"sop": {
"id": 141,
"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": 24,
"site_key": "optiprime",
"created_at": "2026-05-30 00:00:19.259888+00:00",
"updated_at": "2026-05-30 00:00:19.259888+00:00",
"confidence_label": "low",
"confidence_score": 0
},
"evidence": {
"lesson_count": 20,
"outcome_count": 10,
"observation_count": 10
},
"site_key": "optiprime"
},
"feedback": {
"site_key": "optiprime",
"gsc_pages": 5,
"queue_rows": 20,
"gsc_queries": 114,
"workflow_events": 50
},
"business_feedback": {
"crawler": {
"ideas": [],
"issues": [],
"message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x75c6348223c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"crawl_ok": false,
"acquisition_ok": false
},
"linkmap": {
"result": {},
"message": "Outil LinkMap introuvable pour pagerank.",
"pagerank_ok": false,
"strategy_ok": false
},
"site_key": "optiprime",
"available": true,
"seo_panel": {
"alerts": [],
"message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x75c634820740>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"alerts_ok": false,
"overview_ok": false,
"health_score": null
},
"project_name": "Optiprime"
}
}
},
{
"id": 250,
"site_key": "optiprime",
"category": "routine",
"action": "daily_feedback_learning",
"target": "optiprime",
"outcome": "1 lessons derived",
"quality": "good",
"details_json": {
"sop": {
"sop": {
"id": 132,
"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": 23,
"site_key": "optiprime",
"created_at": "2026-05-28 00:00:17.516780+00:00",
"updated_at": "2026-05-29 00:00:18.024443+00:00",
"confidence_label": "high",
"confidence_score": 100
},
"evidence": {
"lesson_count": 20,
"outcome_count": 10,
"observation_count": 10
},
"site_key": "optiprime"
},
"feedback": {
"site_key": "optiprime",
"gsc_pages": 5,
"queue_rows": 20,
"gsc_queries": 113,
"workflow_events": 50
},
"business_feedback": {
"crawler": {
"ideas": [],
"issues": [],
"message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x74e8f8ede4e0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"crawl_ok": false,
"acquisition_ok": false
},
"linkmap": {
"result": {},
"message": "Outil LinkMap introuvable pour pagerank.",
"pagerank_ok": false,
"strategy_ok": false
},
"site_key": "optiprime",
"available": true,
"seo_panel": {
"alerts": [],
"message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x74e8f8edc890>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"alerts_ok": false,
"overview_ok": false,
"health_score": null
},
"project_name": "Optiprime"
}
},
"recorded_at": "2026-05-29 00:00:18.525609+00:00",
"details": {
"sop": {
"sop": {
"id": 132,
"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": 23,
"site_key": "optiprime",
"created_at": "2026-05-28 00:00:17.516780+00:00",
"updated_at": "2026-05-29 00:00:18.024443+00:00",
"confidence_label": "high",
"confidence_score": 100
},
"evidence": {
"lesson_count": 20,
"outcome_count": 10,
"observation_count": 10
},
"site_key": "optiprime"
},
"feedback": {
"site_key": "optiprime",
"gsc_pages": 5,
"queue_rows": 20,
"gsc_queries": 113,
"workflow_events": 50
},
"business_feedback": {
"crawler": {
"ideas": [],
"issues": [],
"message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x74e8f8ede4e0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"crawl_ok": false,
"acquisition_ok": false
},
"linkmap": {
"result": {},
"message": "Outil LinkMap introuvable pour pagerank.",
"pagerank_ok": false,
"strategy_ok": false
},
"site_key": "optiprime",
"available": true,
"seo_panel": {
"alerts": [],
"message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x74e8f8edc890>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"alerts_ok": false,
"overview_ok": false,
"health_score": null
},
"project_name": "Optiprime"
}
}
},
{
"id": 242,
"site_key": "optiprime",
"category": "routine",
"action": "daily_feedback_learning",
"target": "optiprime",
"outcome": "1 lessons derived",
"quality": "good",
"details_json": {
"sop": {
"sop": {
"id": 132,
"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": 23,
"site_key": "optiprime",
"created_at": "2026-05-28 00:00:17.516780+00:00",
"updated_at": "2026-05-28 00:00:17.516780+00:00",
"confidence_label": "low",
"confidence_score": 0
},
"evidence": {
"lesson_count": 20,
"outcome_count": 10,
"observation_count": 10
},
"site_key": "optiprime"
},
"feedback": {
"site_key": "optiprime",
"gsc_pages": 5,
"queue_rows": 20,
"gsc_queries": 117,
"workflow_events": 50
},
"business_feedback": {
"crawler": {
"ideas": [],
"issues": [],
"message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7570a46e23c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"crawl_ok": false,
"acquisition_ok": false
},
"linkmap": {
"result": {},
"message": "Outil LinkMap introuvable pour pagerank.",
"pagerank_ok": false,
"strategy_ok": false
},
"site_key": "optiprime",
"available": true,
"seo_panel": {
"alerts": [],
"message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7570a46e0770>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"alerts_ok": false,
"overview_ok": false,
"health_score": null
},
"project_name": "Optiprime"
}
},
"recorded_at": "2026-05-28 00:00:17.857617+00:00",
"details": {
"sop": {
"sop": {
"id": 132,
"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": 23,
"site_key": "optiprime",
"created_at": "2026-05-28 00:00:17.516780+00:00",
"updated_at": "2026-05-28 00:00:17.516780+00:00",
"confidence_label": "low",
"confidence_score": 0
},
"evidence": {
"lesson_count": 20,
"outcome_count": 10,
"observation_count": 10
},
"site_key": "optiprime"
},
"feedback": {
"site_key": "optiprime",
"gsc_pages": 5,
"queue_rows": 20,
"gsc_queries": 117,
"workflow_events": 50
},
"business_feedback": {
"crawler": {
"ideas": [],
"issues": [],
"message": "Erreur reseau Crawler MCP sur http://127.0.0.1:8866/mcp: HTTPConnectionPool(host='127.0.0.1', port=8866): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7570a46e23c0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"crawl_ok": false,
"acquisition_ok": false
},
"linkmap": {
"result": {},
"message": "Outil LinkMap introuvable pour pagerank.",
"pagerank_ok": false,
"strategy_ok": false
},
"site_key": "optiprime",
"available": true,
"seo_panel": {
"alerts": [],
"message": "Erreur reseau SEO Panel MCP sur http://127.0.0.1:8865/mcp: HTTPConnectionPool(host='127.0.0.1', port=8865): Max retries exceeded with url: /mcp (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7570a46e0770>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"alerts_ok": false,
"overview_ok": false,
"health_score": null
},
"project_name": "Optiprime"
}
}
}
],
"recent_outcomes": [
{
"id": 282,
"site_key": "optiprime",
"outcome_type": "measurement_result",
"subject_key": "publish:changer-assurance-maladie-suisse",
"metric_name": "impact_score",
"metric_value": 0.0,
"payload_json": {
"delta": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"page_url": "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
"action_type": "publish",
"impact_label": "neutral",
"measurement_id": 30
},
"recorded_at": "2026-05-29 09:07:02.010359+00:00",
"payload": {
"delta": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"page_url": "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
"action_type": "publish",
"impact_label": "neutral",
"measurement_id": 30
}
},
{
"id": 281,
"site_key": "optiprime",
"outcome_type": "gsc_delta",
"subject_key": "publish:changer-assurance-maladie-suisse",
"metric_name": "position",
"metric_value": 0.0,
"payload_json": {
"delta": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"current": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"baseline": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"page_url": "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse"
},
"recorded_at": "2026-05-29 09:07:01.985190+00:00",
"payload": {
"delta": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"current": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"baseline": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"page_url": "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse"
}
},
{
"id": 280,
"site_key": "optiprime",
"outcome_type": "gsc_delta",
"subject_key": "publish:changer-assurance-maladie-suisse",
"metric_name": "ctr",
"metric_value": 0.0,
"payload_json": {
"delta": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"current": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"baseline": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"page_url": "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse"
},
"recorded_at": "2026-05-29 09:07:01.971356+00:00",
"payload": {
"delta": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"current": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"baseline": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"page_url": "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse"
}
},
{
"id": 279,
"site_key": "optiprime",
"outcome_type": "gsc_delta",
"subject_key": "publish:changer-assurance-maladie-suisse",
"metric_name": "impressions",
"metric_value": 0.0,
"payload_json": {
"delta": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"current": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"baseline": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"page_url": "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse"
},
"recorded_at": "2026-05-29 09:07:01.955964+00:00",
"payload": {
"delta": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"current": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"baseline": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"page_url": "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse"
}
},
{
"id": 278,
"site_key": "optiprime",
"outcome_type": "gsc_delta",
"subject_key": "publish:changer-assurance-maladie-suisse",
"metric_name": "clicks",
"metric_value": 0.0,
"payload_json": {
"delta": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"current": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"baseline": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"page_url": "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse"
},
"recorded_at": "2026-05-29 09:07:01.929858+00:00",
"payload": {
"delta": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"current": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"baseline": {
"ctr": 0.0,
"clicks": 0.0,
"position": 0.0,
"impressions": 0.0
},
"page_url": "https://www.optiprime.ch/blog/changer-assurance-maladie-suisse"
}
}
],
"recent_observations": [
{
"id": 1142,
"site_key": "optiprime",
"source_type": "technical_audit",
"subject_key": "optiprime",
"payload_json": {
"gsc": {
"checked": false
},
"pages": [
{
"ok": true,
"url": "https://www.optiprime.ch",
"error": "",
"noindex": false,
"canonical": "https://www.optiprime.ch",
"final_url": "https://www.optiprime.ch/",
"indexable": true,
"redirected": false,
"robots_meta": "index, follow",
"status_code": 200,
"x_robots_tag": "",
"redirect_chain": [],
"robots_allowed": true,
"canonical_present": true,
"canonical_matches_url": true
},
{
"ok": true,
"url": "https://www.optiprime.ch/blog",
"error": "",
"noindex": false,
"canonical": "https://www.optiprime.ch/blog",
"final_url": "https://www.optiprime.ch/blog",
"indexable": true,
"redirected": false,
"robots_meta": "index, follow",
"status_code": 200,
"x_robots_tag": "",
"redirect_chain": [],
"robots_allowed": true,
"canonical_present": true,
"canonical_matches_url": true
}
],
"robots": {
"ok": true,
"url": "https://www.optiprime.ch/robots.txt",
"error": "",
"sitemaps": [
"https://www.optiprime.ch/sitemap.xml"
],
"blocks_all": false,
"rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
"status_code": 200
},
"status": "ok",
"checked": true,
"sitemap": {
"ok": true,
"checked": [
{
"ok": true,
"url": "https://www.optiprime.ch/sitemap.xml",
"error": "",
"root_tag": "urlset",
"url_count": 21,
"valid_xml": true,
"status_code": 200,
"child_checked": [],
"child_sitemaps": [],
"listed_sample_urls": [
"https://www.optiprime.ch/",
"https://www.optiprime.ch/comparateur",
"https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-pas-chere",
"https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
"https://www.optiprime.ch/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog",
"https://www.optiprime.ch/methodologie",
"https://www.optiprime.ch/confidentialite",
"https://www.optiprime.ch/blog/classement-assurance-de-base",
"https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
"https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
"https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleure-lamal-suisse",
"https://www.optiprime.ch/blog/comparaison-assurance-de-base",
"https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
"https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
"https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog/comparis-assurance-maladie"
]
}
],
"selected": {
"ok": true,
"url": "https://www.optiprime.ch/sitemap.xml",
"error": "",
"root_tag": "urlset",
"url_count": 21,
"valid_xml": true,
"status_code": 200,
"child_checked": [],
"child_sitemaps": [],
"listed_sample_urls": [
"https://www.optiprime.ch/",
"https://www.optiprime.ch/comparateur",
"https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-pas-chere",
"https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
"https://www.optiprime.ch/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog",
"https://www.optiprime.ch/methodologie",
"https://www.optiprime.ch/confidentialite",
"https://www.optiprime.ch/blog/classement-assurance-de-base",
"https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
"https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
"https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleure-lamal-suisse",
"https://www.optiprime.ch/blog/comparaison-assurance-de-base",
"https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
"https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
"https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog/comparis-assurance-maladie"
]
}
},
"site_key": "optiprime",
"warnings": [
"LCP mobile élevé (3192 ms)"
],
"pagespeed": {
"ok": true,
"cls": 0.030059,
"inp_ms": 59.0,
"lcp_ms": 3192.0438803389834,
"mobile": {
"ok": true,
"cls": 0.030059,
"inp_ms": 59.0,
"lcp_ms": 3192.0438803389834,
"source": "pagespeed_insights",
"strategy": "mobile",
"performance_score": 89.0
},
"source": "pagespeed_insights",
"desktop": {
"ok": true,
"cls": 0.0,
"inp_ms": 82.0,
"lcp_ms": 866.6981802393107,
"source": "pagespeed_insights",
"strategy": "desktop",
"performance_score": 99.0
},
"strategy": "mobile",
"performance_score": 89.0
},
"gsc_live_urls": {
"urls": [
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"error": "",
"clicks": 0,
"position": 27.193933823529413,
"canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"indexable": true,
"top_query": "comparer assurance obligatoire",
"redirected": false,
"impressions": 1088,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"error": "",
"clicks": 0,
"position": 19.761627906976745,
"canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"indexable": true,
"top_query": "classement assurance de base",
"redirected": false,
"impressions": 344,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog",
"error": "",
"clicks": 0,
"position": 33.01851851851852,
"canonical": "https://www.optiprime.ch/blog",
"final_url": "https://www.optiprime.ch/blog",
"indexable": true,
"top_query": "lamal suisse pas chère",
"redirected": false,
"impressions": 270,
"status_code": 200
},
{
"ok": true,
"ctr": 0.004878048780487805,
"url": "https://www.optiprime.ch/blog/assurance-maladie",
"error": "",
"clicks": 1,
"position": 19.98048780487805,
"canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/assurance-maladie",
"indexable": true,
"top_query": "guide assurance maladie suisse",
"redirected": false,
"impressions": 205,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"error": "",
"clicks": 0,
"position": 50.776119402985074,
"canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"indexable": true,
"top_query": "meilleures caisses maladie suisse 2026",
"redirected": false,
"impressions": 134,
"status_code": 200
}
],
"source": "gsc_pages_28d",
"checked": true,
"broken_urls": [],
"broken_count": 0,
"checked_count": 5,
"redirected_urls": [],
"redirected_count": 0,
"snapshot_saved_at": "2026-05-29T18:15:03.681950Z"
},
"blocking_issues": [],
"safe_to_optimize": true,
"sitemap_coverage": {
"checked": true,
"missing_urls": [],
"expected_urls": [
"https://www.optiprime.ch",
"https://www.optiprime.ch/blog"
],
"listed_url_sample_size": 21
},
"deployment_health": {
"checked": false
},
"technical_health_score": 90
},
"recorded_at": "2026-06-01 00:07:45.745254+00:00",
"payload": {
"gsc": {
"checked": false
},
"pages": [
{
"ok": true,
"url": "https://www.optiprime.ch",
"error": "",
"noindex": false,
"canonical": "https://www.optiprime.ch",
"final_url": "https://www.optiprime.ch/",
"indexable": true,
"redirected": false,
"robots_meta": "index, follow",
"status_code": 200,
"x_robots_tag": "",
"redirect_chain": [],
"robots_allowed": true,
"canonical_present": true,
"canonical_matches_url": true
},
{
"ok": true,
"url": "https://www.optiprime.ch/blog",
"error": "",
"noindex": false,
"canonical": "https://www.optiprime.ch/blog",
"final_url": "https://www.optiprime.ch/blog",
"indexable": true,
"redirected": false,
"robots_meta": "index, follow",
"status_code": 200,
"x_robots_tag": "",
"redirect_chain": [],
"robots_allowed": true,
"canonical_present": true,
"canonical_matches_url": true
}
],
"robots": {
"ok": true,
"url": "https://www.optiprime.ch/robots.txt",
"error": "",
"sitemaps": [
"https://www.optiprime.ch/sitemap.xml"
],
"blocks_all": false,
"rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
"status_code": 200
},
"status": "ok",
"checked": true,
"sitemap": {
"ok": true,
"checked": [
{
"ok": true,
"url": "https://www.optiprime.ch/sitemap.xml",
"error": "",
"root_tag": "urlset",
"url_count": 21,
"valid_xml": true,
"status_code": 200,
"child_checked": [],
"child_sitemaps": [],
"listed_sample_urls": [
"https://www.optiprime.ch/",
"https://www.optiprime.ch/comparateur",
"https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-pas-chere",
"https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
"https://www.optiprime.ch/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog",
"https://www.optiprime.ch/methodologie",
"https://www.optiprime.ch/confidentialite",
"https://www.optiprime.ch/blog/classement-assurance-de-base",
"https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
"https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
"https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleure-lamal-suisse",
"https://www.optiprime.ch/blog/comparaison-assurance-de-base",
"https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
"https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
"https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog/comparis-assurance-maladie"
]
}
],
"selected": {
"ok": true,
"url": "https://www.optiprime.ch/sitemap.xml",
"error": "",
"root_tag": "urlset",
"url_count": 21,
"valid_xml": true,
"status_code": 200,
"child_checked": [],
"child_sitemaps": [],
"listed_sample_urls": [
"https://www.optiprime.ch/",
"https://www.optiprime.ch/comparateur",
"https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-pas-chere",
"https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
"https://www.optiprime.ch/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog",
"https://www.optiprime.ch/methodologie",
"https://www.optiprime.ch/confidentialite",
"https://www.optiprime.ch/blog/classement-assurance-de-base",
"https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
"https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
"https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleure-lamal-suisse",
"https://www.optiprime.ch/blog/comparaison-assurance-de-base",
"https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
"https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
"https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog/comparis-assurance-maladie"
]
}
},
"site_key": "optiprime",
"warnings": [
"LCP mobile élevé (3192 ms)"
],
"pagespeed": {
"ok": true,
"cls": 0.030059,
"inp_ms": 59.0,
"lcp_ms": 3192.0438803389834,
"mobile": {
"ok": true,
"cls": 0.030059,
"inp_ms": 59.0,
"lcp_ms": 3192.0438803389834,
"source": "pagespeed_insights",
"strategy": "mobile",
"performance_score": 89.0
},
"source": "pagespeed_insights",
"desktop": {
"ok": true,
"cls": 0.0,
"inp_ms": 82.0,
"lcp_ms": 866.6981802393107,
"source": "pagespeed_insights",
"strategy": "desktop",
"performance_score": 99.0
},
"strategy": "mobile",
"performance_score": 89.0
},
"gsc_live_urls": {
"urls": [
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"error": "",
"clicks": 0,
"position": 27.193933823529413,
"canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"indexable": true,
"top_query": "comparer assurance obligatoire",
"redirected": false,
"impressions": 1088,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"error": "",
"clicks": 0,
"position": 19.761627906976745,
"canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"indexable": true,
"top_query": "classement assurance de base",
"redirected": false,
"impressions": 344,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog",
"error": "",
"clicks": 0,
"position": 33.01851851851852,
"canonical": "https://www.optiprime.ch/blog",
"final_url": "https://www.optiprime.ch/blog",
"indexable": true,
"top_query": "lamal suisse pas chère",
"redirected": false,
"impressions": 270,
"status_code": 200
},
{
"ok": true,
"ctr": 0.004878048780487805,
"url": "https://www.optiprime.ch/blog/assurance-maladie",
"error": "",
"clicks": 1,
"position": 19.98048780487805,
"canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/assurance-maladie",
"indexable": true,
"top_query": "guide assurance maladie suisse",
"redirected": false,
"impressions": 205,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"error": "",
"clicks": 0,
"position": 50.776119402985074,
"canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"indexable": true,
"top_query": "meilleures caisses maladie suisse 2026",
"redirected": false,
"impressions": 134,
"status_code": 200
}
],
"source": "gsc_pages_28d",
"checked": true,
"broken_urls": [],
"broken_count": 0,
"checked_count": 5,
"redirected_urls": [],
"redirected_count": 0,
"snapshot_saved_at": "2026-05-29T18:15:03.681950Z"
},
"blocking_issues": [],
"safe_to_optimize": true,
"sitemap_coverage": {
"checked": true,
"missing_urls": [],
"expected_urls": [
"https://www.optiprime.ch",
"https://www.optiprime.ch/blog"
],
"listed_url_sample_size": 21
},
"deployment_health": {
"checked": false
},
"technical_health_score": 90
}
},
{
"id": 1135,
"site_key": "optiprime",
"source_type": "technical_remediation",
"subject_key": "optiprime",
"payload_json": {
"ok": true,
"errors": [],
"actions": [
{
"type": "optimize_lcp",
"value": 2866.3,
"metric": "lcp_ms",
"target": "https://www.optiprime.ch",
"priority": "high",
"threshold": 2500,
"recommended_changes": [
"Identifier l'élément LCP mobile sur la home via PageSpeed/Lighthouse.",
"Optimiser l'image ou le bloc hero responsable: format WebP/AVIF, dimensions adaptées, compression.",
"Précharger ou prioriser uniquement l'asset LCP critique et différer les médias non critiques.",
"Réduire CSS/JS bloquant au-dessus de la ligne de flottaison."
]
}
],
"changed": false,
"attempted": true,
"deployment": {
"ok": true,
"detail": "no_change",
"checked": false
}
},
"recorded_at": "2026-06-01 00:05:11.433550+00:00",
"payload": {
"ok": true,
"errors": [],
"actions": [
{
"type": "optimize_lcp",
"value": 2866.3,
"metric": "lcp_ms",
"target": "https://www.optiprime.ch",
"priority": "high",
"threshold": 2500,
"recommended_changes": [
"Identifier l'élément LCP mobile sur la home via PageSpeed/Lighthouse.",
"Optimiser l'image ou le bloc hero responsable: format WebP/AVIF, dimensions adaptées, compression.",
"Précharger ou prioriser uniquement l'asset LCP critique et différer les médias non critiques.",
"Réduire CSS/JS bloquant au-dessus de la ligne de flottaison."
]
}
],
"changed": false,
"attempted": true,
"deployment": {
"ok": true,
"detail": "no_change",
"checked": false
}
}
},
{
"id": 1134,
"site_key": "optiprime",
"source_type": "technical_audit",
"subject_key": "optiprime",
"payload_json": {
"gsc": {
"ok": true,
"checked": true,
"message": "Connexion GSC OK",
"payload": {
"sample_rows": 1,
"properties_count": 5,
"resolved_property": "https://www.optiprime.ch"
},
"sitemap_url": "https://www.optiprime.ch/sitemap.xml",
"sitemap_submission_ready": true
},
"pages": [
{
"ok": true,
"url": "https://www.optiprime.ch",
"error": "",
"noindex": false,
"canonical": "https://www.optiprime.ch",
"final_url": "https://www.optiprime.ch/",
"indexable": true,
"redirected": false,
"robots_meta": "index, follow",
"status_code": 200,
"x_robots_tag": "",
"redirect_chain": [],
"robots_allowed": true,
"canonical_present": true,
"canonical_matches_url": true
},
{
"ok": true,
"url": "https://www.optiprime.ch/blog",
"error": "",
"noindex": false,
"canonical": "https://www.optiprime.ch/blog",
"final_url": "https://www.optiprime.ch/blog",
"indexable": true,
"redirected": false,
"robots_meta": "index, follow",
"status_code": 200,
"x_robots_tag": "",
"redirect_chain": [],
"robots_allowed": true,
"canonical_present": true,
"canonical_matches_url": true
}
],
"robots": {
"ok": true,
"url": "https://www.optiprime.ch/robots.txt",
"error": "",
"sitemaps": [
"https://www.optiprime.ch/sitemap.xml"
],
"blocks_all": false,
"rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
"status_code": 200
},
"status": "ok",
"checked": true,
"sitemap": {
"ok": true,
"checked": [
{
"ok": true,
"url": "https://www.optiprime.ch/sitemap.xml",
"error": "",
"root_tag": "urlset",
"url_count": 21,
"valid_xml": true,
"status_code": 200,
"child_checked": [],
"child_sitemaps": [],
"listed_sample_urls": [
"https://www.optiprime.ch/",
"https://www.optiprime.ch/comparateur",
"https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-pas-chere",
"https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
"https://www.optiprime.ch/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog",
"https://www.optiprime.ch/methodologie",
"https://www.optiprime.ch/confidentialite",
"https://www.optiprime.ch/blog/classement-assurance-de-base",
"https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
"https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
"https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleure-lamal-suisse",
"https://www.optiprime.ch/blog/comparaison-assurance-de-base",
"https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
"https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
"https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog/comparis-assurance-maladie"
]
}
],
"selected": {
"ok": true,
"url": "https://www.optiprime.ch/sitemap.xml",
"error": "",
"root_tag": "urlset",
"url_count": 21,
"valid_xml": true,
"status_code": 200,
"child_checked": [],
"child_sitemaps": [],
"listed_sample_urls": [
"https://www.optiprime.ch/",
"https://www.optiprime.ch/comparateur",
"https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-pas-chere",
"https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
"https://www.optiprime.ch/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog",
"https://www.optiprime.ch/methodologie",
"https://www.optiprime.ch/confidentialite",
"https://www.optiprime.ch/blog/classement-assurance-de-base",
"https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
"https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
"https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleure-lamal-suisse",
"https://www.optiprime.ch/blog/comparaison-assurance-de-base",
"https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
"https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
"https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog/comparis-assurance-maladie"
]
}
},
"site_key": "optiprime",
"warnings": [
"LCP mobile élevé (2866 ms)"
],
"pagespeed": {
"ok": true,
"cls": 0.024099,
"inp_ms": 71.0,
"lcp_ms": 2866.2911617389727,
"mobile": {
"ok": true,
"cls": 0.024099,
"inp_ms": 71.0,
"lcp_ms": 2866.2911617389727,
"source": "pagespeed_insights",
"strategy": "mobile",
"performance_score": 91.0
},
"source": "pagespeed_insights",
"desktop": {
"ok": true,
"cls": 0.001698,
"inp_ms": 63.999999999999886,
"lcp_ms": 851.6588601874184,
"source": "pagespeed_insights",
"strategy": "desktop",
"performance_score": 99.0
},
"strategy": "mobile",
"performance_score": 91.0
},
"gsc_live_urls": {
"urls": [
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"error": "",
"clicks": 0,
"position": 27.193933823529413,
"canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"indexable": true,
"top_query": "comparer assurance obligatoire",
"redirected": false,
"impressions": 1088,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"error": "",
"clicks": 0,
"position": 19.761627906976745,
"canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"indexable": true,
"top_query": "classement assurance de base",
"redirected": false,
"impressions": 344,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog",
"error": "",
"clicks": 0,
"position": 33.01851851851852,
"canonical": "https://www.optiprime.ch/blog",
"final_url": "https://www.optiprime.ch/blog",
"indexable": true,
"top_query": "lamal suisse pas chère",
"redirected": false,
"impressions": 270,
"status_code": 200
},
{
"ok": true,
"ctr": 0.004878048780487805,
"url": "https://www.optiprime.ch/blog/assurance-maladie",
"error": "",
"clicks": 1,
"position": 19.98048780487805,
"canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/assurance-maladie",
"indexable": true,
"top_query": "guide assurance maladie suisse",
"redirected": false,
"impressions": 205,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"error": "",
"clicks": 0,
"position": 50.776119402985074,
"canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"indexable": true,
"top_query": "meilleures caisses maladie suisse 2026",
"redirected": false,
"impressions": 134,
"status_code": 200
}
],
"source": "gsc_pages_28d",
"checked": true,
"broken_urls": [],
"broken_count": 0,
"checked_count": 5,
"redirected_urls": [],
"redirected_count": 0,
"snapshot_saved_at": "2026-05-29T18:15:03.681950Z"
},
"blocking_issues": [],
"safe_to_optimize": true,
"sitemap_coverage": {
"checked": true,
"missing_urls": [],
"expected_urls": [
"https://www.optiprime.ch",
"https://www.optiprime.ch/blog"
],
"listed_url_sample_size": 21
},
"deployment_health": {
"checked": false
},
"technical_health_score": 90
},
"recorded_at": "2026-06-01 00:05:10.010244+00:00",
"payload": {
"gsc": {
"ok": true,
"checked": true,
"message": "Connexion GSC OK",
"payload": {
"sample_rows": 1,
"properties_count": 5,
"resolved_property": "https://www.optiprime.ch"
},
"sitemap_url": "https://www.optiprime.ch/sitemap.xml",
"sitemap_submission_ready": true
},
"pages": [
{
"ok": true,
"url": "https://www.optiprime.ch",
"error": "",
"noindex": false,
"canonical": "https://www.optiprime.ch",
"final_url": "https://www.optiprime.ch/",
"indexable": true,
"redirected": false,
"robots_meta": "index, follow",
"status_code": 200,
"x_robots_tag": "",
"redirect_chain": [],
"robots_allowed": true,
"canonical_present": true,
"canonical_matches_url": true
},
{
"ok": true,
"url": "https://www.optiprime.ch/blog",
"error": "",
"noindex": false,
"canonical": "https://www.optiprime.ch/blog",
"final_url": "https://www.optiprime.ch/blog",
"indexable": true,
"redirected": false,
"robots_meta": "index, follow",
"status_code": 200,
"x_robots_tag": "",
"redirect_chain": [],
"robots_allowed": true,
"canonical_present": true,
"canonical_matches_url": true
}
],
"robots": {
"ok": true,
"url": "https://www.optiprime.ch/robots.txt",
"error": "",
"sitemaps": [
"https://www.optiprime.ch/sitemap.xml"
],
"blocks_all": false,
"rules_text": "User-Agent: *\nAllow: /\n\nHost: https://www.optiprime.ch\nSitemap: https://www.optiprime.ch/sitemap.xml\n",
"status_code": 200
},
"status": "ok",
"checked": true,
"sitemap": {
"ok": true,
"checked": [
{
"ok": true,
"url": "https://www.optiprime.ch/sitemap.xml",
"error": "",
"root_tag": "urlset",
"url_count": 21,
"valid_xml": true,
"status_code": 200,
"child_checked": [],
"child_sitemaps": [],
"listed_sample_urls": [
"https://www.optiprime.ch/",
"https://www.optiprime.ch/comparateur",
"https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-pas-chere",
"https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
"https://www.optiprime.ch/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog",
"https://www.optiprime.ch/methodologie",
"https://www.optiprime.ch/confidentialite",
"https://www.optiprime.ch/blog/classement-assurance-de-base",
"https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
"https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
"https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleure-lamal-suisse",
"https://www.optiprime.ch/blog/comparaison-assurance-de-base",
"https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
"https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
"https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog/comparis-assurance-maladie"
]
}
],
"selected": {
"ok": true,
"url": "https://www.optiprime.ch/sitemap.xml",
"error": "",
"root_tag": "urlset",
"url_count": 21,
"valid_xml": true,
"status_code": 200,
"child_checked": [],
"child_sitemaps": [],
"listed_sample_urls": [
"https://www.optiprime.ch/",
"https://www.optiprime.ch/comparateur",
"https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-suisse",
"https://www.optiprime.ch/assurance-maladie-pas-chere",
"https://www.optiprime.ch/caisse-maladie-suisse-pas-chere",
"https://www.optiprime.ch/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog",
"https://www.optiprime.ch/methodologie",
"https://www.optiprime.ch/confidentialite",
"https://www.optiprime.ch/blog/classement-assurance-de-base",
"https://www.optiprime.ch/blog/guide-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleures-caisses-maladie-suisse-2026",
"https://www.optiprime.ch/blog/lamal-suisse-pas-chere",
"https://www.optiprime.ch/blog/changer-assurance-maladie-suisse",
"https://www.optiprime.ch/blog/meilleure-lamal-suisse",
"https://www.optiprime.ch/blog/comparaison-assurance-de-base",
"https://www.optiprime.ch/blog/comment-choisir-assurance-sante-suisse",
"https://www.optiprime.ch/blog/assurance-maladie-suisse-comparee",
"https://www.optiprime.ch/blog/prime-assurance-maladie-2026",
"https://www.optiprime.ch/blog/comparis-assurance-maladie"
]
}
},
"site_key": "optiprime",
"warnings": [
"LCP mobile élevé (2866 ms)"
],
"pagespeed": {
"ok": true,
"cls": 0.024099,
"inp_ms": 71.0,
"lcp_ms": 2866.2911617389727,
"mobile": {
"ok": true,
"cls": 0.024099,
"inp_ms": 71.0,
"lcp_ms": 2866.2911617389727,
"source": "pagespeed_insights",
"strategy": "mobile",
"performance_score": 91.0
},
"source": "pagespeed_insights",
"desktop": {
"ok": true,
"cls": 0.001698,
"inp_ms": 63.999999999999886,
"lcp_ms": 851.6588601874184,
"source": "pagespeed_insights",
"strategy": "desktop",
"performance_score": 99.0
},
"strategy": "mobile",
"performance_score": 91.0
},
"gsc_live_urls": {
"urls": [
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"error": "",
"clicks": 0,
"position": 27.193933823529413,
"canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"indexable": true,
"top_query": "comparer assurance obligatoire",
"redirected": false,
"impressions": 1088,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"error": "",
"clicks": 0,
"position": 19.761627906976745,
"canonical": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"final_url": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"indexable": true,
"top_query": "classement assurance de base",
"redirected": false,
"impressions": 344,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog",
"error": "",
"clicks": 0,
"position": 33.01851851851852,
"canonical": "https://www.optiprime.ch/blog",
"final_url": "https://www.optiprime.ch/blog",
"indexable": true,
"top_query": "lamal suisse pas chère",
"redirected": false,
"impressions": 270,
"status_code": 200
},
{
"ok": true,
"ctr": 0.004878048780487805,
"url": "https://www.optiprime.ch/blog/assurance-maladie",
"error": "",
"clicks": 1,
"position": 19.98048780487805,
"canonical": "https://www.optiprime.ch/assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/assurance-maladie",
"indexable": true,
"top_query": "guide assurance maladie suisse",
"redirected": false,
"impressions": 205,
"status_code": 200
},
{
"ok": true,
"ctr": 0.0,
"url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"error": "",
"clicks": 0,
"position": 50.776119402985074,
"canonical": "https://www.optiprime.ch/comparateur-assurance-maladie-suisse",
"final_url": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"indexable": true,
"top_query": "meilleures caisses maladie suisse 2026",
"redirected": false,
"impressions": 134,
"status_code": 200
}
],
"source": "gsc_pages_28d",
"checked": true,
"broken_urls": [],
"broken_count": 0,
"checked_count": 5,
"redirected_urls": [],
"redirected_count": 0,
"snapshot_saved_at": "2026-05-29T18:15:03.681950Z"
},
"blocking_issues": [],
"safe_to_optimize": true,
"sitemap_coverage": {
"checked": true,
"missing_urls": [],
"expected_urls": [
"https://www.optiprime.ch",
"https://www.optiprime.ch/blog"
],
"listed_url_sample_size": 21
},
"deployment_health": {
"checked": false
},
"technical_health_score": 90
}
},
{
"id": 1128,
"site_key": "optiprime",
"source_type": "learningseo_weekly_review",
"subject_key": "optiprime",
"payload_json": {
"tests_next_week": [
"test one low-risk refresh on a visible low-CTR page and measure the delta"
],
"confirmed_by_practice": 0,
"contradicted_by_results": 0
},
"recorded_at": "2026-06-01 00:03:04.264323+00:00",
"payload": {
"tests_next_week": [
"test one low-risk refresh on a visible low-CTR page and measure the delta"
],
"confirmed_by_practice": 0,
"contradicted_by_results": 0
}
},
{
"id": 1120,
"site_key": "optiprime",
"source_type": "workflow_state",
"subject_key": "recent_events",
"payload_json": {
"events": [
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 40,
"queries_28d": 112,
"page_query_28d": 175
},
"recorded_at": "2026-05-28T06:15:03.440911Z"
},
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 52,
"queries_28d": 113,
"page_query_28d": 179
},
"recorded_at": "2026-05-28T12:15:04.670089Z"
},
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 52,
"queries_28d": 113,
"page_query_28d": 179
},
"recorded_at": "2026-05-28T18:15:03.920067Z"
},
{
"type": "hermes_daily_feedback_learning",
"payload": {
"sop_name": "adaptive-feedback-playbook",
"lessons_created": 1
},
"recorded_at": "2026-05-29T00:00:18.491555Z"
},
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 54,
"queries_28d": 114,
"page_query_28d": 188
},
"recorded_at": "2026-05-29T06:15:03.870174Z"
},
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 54,
"queries_28d": 114,
"page_query_28d": 188
},
"recorded_at": "2026-05-29T12:15:03.949948Z"
},
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 54,
"queries_28d": 114,
"page_query_28d": 188
},
"recorded_at": "2026-05-29T18:15:03.696642Z"
},
{
"type": "hermes_daily_feedback_learning",
"payload": {
"sop_name": "adaptive-feedback-playbook",
"lessons_created": 1
},
"recorded_at": "2026-05-30T00:00:19.869217Z"
},
{
"type": "hermes_content_lifecycle",
"payload": {
"merge_count": 4,
"watch_count": 6,
"create_count": 1,
"deleted_count": 0,
"optimize_count": 7
},
"recorded_at": "2026-05-30T20:30:03.664953Z"
},
{
"type": "hermes_daily_feedback_learning",
"payload": {
"sop_name": "adaptive-feedback-playbook",
"lessons_created": 1
},
"recorded_at": "2026-05-31T00:00:18.240327Z"
}
]
},
"recorded_at": "2026-06-01 00:00:12.598822+00:00",
"payload": {
"events": [
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 40,
"queries_28d": 112,
"page_query_28d": 175
},
"recorded_at": "2026-05-28T06:15:03.440911Z"
},
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 52,
"queries_28d": 113,
"page_query_28d": 179
},
"recorded_at": "2026-05-28T12:15:04.670089Z"
},
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 52,
"queries_28d": 113,
"page_query_28d": 179
},
"recorded_at": "2026-05-28T18:15:03.920067Z"
},
{
"type": "hermes_daily_feedback_learning",
"payload": {
"sop_name": "adaptive-feedback-playbook",
"lessons_created": 1
},
"recorded_at": "2026-05-29T00:00:18.491555Z"
},
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 54,
"queries_28d": 114,
"page_query_28d": 188
},
"recorded_at": "2026-05-29T06:15:03.870174Z"
},
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 54,
"queries_28d": 114,
"page_query_28d": 188
},
"recorded_at": "2026-05-29T12:15:03.949948Z"
},
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 54,
"queries_28d": 114,
"page_query_28d": 188
},
"recorded_at": "2026-05-29T18:15:03.696642Z"
},
{
"type": "hermes_daily_feedback_learning",
"payload": {
"sop_name": "adaptive-feedback-playbook",
"lessons_created": 1
},
"recorded_at": "2026-05-30T00:00:19.869217Z"
},
{
"type": "hermes_content_lifecycle",
"payload": {
"merge_count": 4,
"watch_count": 6,
"create_count": 1,
"deleted_count": 0,
"optimize_count": 7
},
"recorded_at": "2026-05-30T20:30:03.664953Z"
},
{
"type": "hermes_daily_feedback_learning",
"payload": {
"sop_name": "adaptive-feedback-playbook",
"lessons_created": 1
},
"recorded_at": "2026-05-31T00:00:18.240327Z"
}
]
}
}
],
"live_state": {
"queue": {
"by_status": {
"deleted": 6,
"published": 14,
"scheduled": 4
},
"recent_items": [
{
"id": 325,
"slug": "classement-assurance-de-base",
"status": "scheduled",
"scheduled_at": "2026-06-05T07:00:00+00:00",
"published_at": null,
"error": "not present in local blog inventory",
"attempts": 0
},
{
"id": 295,
"slug": "meilleures-caisses-maladie-suisse-2026",
"status": "scheduled",
"scheduled_at": "2026-06-03T07:00:00+00:00",
"published_at": null,
"error": "not present in local blog inventory",
"attempts": 0
},
{
"id": 294,
"slug": "lamal-suisse-pas-chere",
"status": "scheduled",
"scheduled_at": "2026-06-02T07:00:00+00:00",
"published_at": null,
"error": "not present in local blog inventory",
"attempts": 0
},
{
"id": 293,
"slug": "guide-assurance-maladie-suisse",
"status": "scheduled",
"scheduled_at": "2026-06-04T07:00:00+00:00",
"published_at": null,
"error": "not present in local blog inventory",
"attempts": 0
},
{
"id": 108,
"slug": "prime-assurance-maladie-2026",
"status": "published",
"scheduled_at": null,
"published_at": "2026-05-08",
"error": null,
"attempts": 0
}
]
},
"gsc": {
"saved_at": "2026-06-01T06:15:03.452555Z",
"top_pages": [
{
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"impressions": 1023,
"ctr": 0.0,
"position": 27.66373411534702,
"top_query": "comparer assurance obligatoire"
},
{
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"impressions": 355,
"ctr": 0.0,
"position": 19.56338028169014,
"top_query": "classement assurance de base"
},
{
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"impressions": 293,
"ctr": 0.0,
"position": 32.72354948805461,
"top_query": "lamal suisse pas chère"
}
],
"top_queries": [
{
"query": "comparer assurance obligatoire",
"clicks": 0,
"impressions": 97,
"ctr": 0.0,
"position": 22.52577319587629
},
{
"query": "assurance obligatoire la moins chère",
"clicks": 0,
"impressions": 93,
"ctr": 0.0,
"position": 25.096774193548388
},
{
"query": "choix caisse-maladie",
"clicks": 0,
"impressions": 88,
"ctr": 0.0,
"position": 27.5
},
{
"query": "choix caisse maladie",
"clicks": 0,
"impressions": 82,
"ctr": 0.0,
"position": 26.865853658536587
},
{
"query": "classement assurance de base",
"clicks": 0,
"impressions": 82,
"ctr": 0.0,
"position": 25.829268292682926
}
]
},
"workflow": {
"updated_at": "2026-06-01T06:15:03.471027Z",
"recent_events": [
{
"type": "hermes_daily_feedback_learning",
"payload": {
"lessons_created": 1,
"sop_name": "adaptive-feedback-playbook"
},
"recorded_at": "2026-05-30T00:00:19.869217Z"
},
{
"type": "hermes_content_lifecycle",
"payload": {
"optimize_count": 7,
"create_count": 1,
"merge_count": 4,
"watch_count": 6,
"deleted_count": 0
},
"recorded_at": "2026-05-30T20:30:03.664953Z"
},
{
"type": "hermes_daily_feedback_learning",
"payload": {
"lessons_created": 1,
"sop_name": "adaptive-feedback-playbook"
},
"recorded_at": "2026-05-31T00:00:18.240327Z"
},
{
"type": "hermes_daily_feedback_learning",
"payload": {
"lessons_created": 1,
"sop_name": "adaptive-feedback-playbook"
},
"recorded_at": "2026-06-01T00:00:16.982885Z"
},
{
"type": "gsc_sync",
"payload": {
"pages_7d": 5,
"pages_28d": 5,
"queries_7d": 66,
"queries_28d": 113,
"page_query_28d": 190
},
"recorded_at": "2026-06-01T06:15:03.470880Z"
}
]
}
},
"site_context": {
"site_key": "optiprime",
"project_name": "Optiprime",
"project_type": "repo_files",
"site_url": "https://www.optiprime.ch",
"base_url": "https://www.optiprime.ch/blog",
"gsc_property": "https://www.optiprime.ch",
"gsc_blog_prefix": "https://www.optiprime.ch/blog",
"agent_mode": "full_autonomy",
"operator_policy": "agent_driven",
"primary_market": "ch",
"target_countries": [
"ch",
"fr"
],
"seo_scope": "national",
"competitors": [
{
"label": "Sante.app LAMal",
"url": "https://sante.app/lamal/",
"notes": ""
},
{
"label": "Komparator Assurance Maladie",
"url": "https://www.komparator.ch/comparateur-assurances-maladie/",
"notes": ""
}
],
"editorial_policy": {
"queue_target_max": 10,
"queue_resume_threshold": 2,
"publish_timezone": "Europe/Paris",
"publish_hour_local": 9,
"publish_weekdays_only": true,
"max_daily_publishes": 1,
"keyword_min_volume": 50,
"keyword_max_difficulty": 45
},
"image_policy": {
"style_guardrail": "editorial_photo",
"subject_focus": "advisory_objects",
"allow_humans": "limited",
"fallback_enabled": true,
"max_prompt_variants": 5,
"min_quality_score": 70
},
"features": {
"gsc_enabled": true,
"writer_gsc_enabled": true,
"gsc_opportunities_enabled": true,
"seo_panel_enabled": true,
"crawler_enabled": true,
"linkmap_enabled": true
}
}
}
{
"site_key": "optiprime",
"counts": {
"memory_entries": 67,
"lessons": 74,
"sop_documents": 64,
"events": 316,
"observations": 361,
"outcomes": 221,
"learning_sessions": 50
},
"recent_lessons": [
{
"id": 169,
"site_key": "optiprime",
"category": "ctr_optimization",
"lesson": "Several visible pages have low CTR. Prioritize title, meta description, and intent alignment refreshes before creating net new content.",
"confidence": "high",
"source": "feedback_loop",
"status": "validated",
"details_json": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 27.193933823529413,
"top_query": "comparer assurance obligatoire",
"impressions": 1088
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 19.761627906976745,
"top_query": "classement assurance de base",
"impressions": 344
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 33.01851851851852,
"top_query": "lamal suisse pas chère",
"impressions": 270
},
{
"ctr": 0.004878048780487805,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 19.98048780487805,
"top_query": "guide assurance maladie suisse",
"impressions": 205
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 50.776119402985074,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 134
}
]
},
"created_at": "2026-06-01 00:00:16.107204+00:00",
"updated_at": "2026-06-01 00:00:17.182142+00:00",
"details": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 27.193933823529413,
"top_query": "comparer assurance obligatoire",
"impressions": 1088
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 19.761627906976745,
"top_query": "classement assurance de base",
"impressions": 344
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 33.01851851851852,
"top_query": "lamal suisse pas chère",
"impressions": 270
},
{
"ctr": 0.004878048780487805,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 19.98048780487805,
"top_query": "guide assurance maladie suisse",
"impressions": 205
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 50.776119402985074,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 134
}
]
}
},
{
"id": 166,
"site_key": "optiprime",
"category": "ctr_optimization",
"lesson": "Several visible pages have low CTR. Prioritize title, meta description, and intent alignment refreshes before creating net new content.",
"confidence": "high",
"source": "feedback_loop",
"status": "deprecated",
"details_json": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 27.193933823529413,
"top_query": "comparer assurance obligatoire",
"impressions": 1088
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 19.761627906976745,
"top_query": "classement assurance de base",
"impressions": 344
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 33.01851851851852,
"top_query": "lamal suisse pas chère",
"impressions": 270
},
{
"ctr": 0.004878048780487805,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 19.98048780487805,
"top_query": "guide assurance maladie suisse",
"impressions": 205
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 50.776119402985074,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 134
}
]
},
"created_at": "2026-05-31 00:00:17.320815+00:00",
"updated_at": "2026-06-01 00:00:17.267632+00:00",
"details": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 27.193933823529413,
"top_query": "comparer assurance obligatoire",
"impressions": 1088
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 19.761627906976745,
"top_query": "classement assurance de base",
"impressions": 344
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 33.01851851851852,
"top_query": "lamal suisse pas chère",
"impressions": 270
},
{
"ctr": 0.004878048780487805,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 19.98048780487805,
"top_query": "guide assurance maladie suisse",
"impressions": 205
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 50.776119402985074,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 134
}
]
}
},
{
"id": 163,
"site_key": "optiprime",
"category": "ctr_optimization",
"lesson": "Several visible pages have low CTR. Prioritize title, meta description, and intent alignment refreshes before creating net new content.",
"confidence": "high",
"source": "feedback_loop",
"status": "deprecated",
"details_json": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 27.193933823529413,
"top_query": "comparer assurance obligatoire",
"impressions": 1088
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 19.761627906976745,
"top_query": "classement assurance de base",
"impressions": 344
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 33.01851851851852,
"top_query": "lamal suisse pas chère",
"impressions": 270
},
{
"ctr": 0.004878048780487805,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 19.98048780487805,
"top_query": "guide assurance maladie suisse",
"impressions": 205
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 50.776119402985074,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 134
}
]
},
"created_at": "2026-05-30 00:00:19.135549+00:00",
"updated_at": "2026-05-31 00:00:19.584143+00:00",
"details": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 27.193933823529413,
"top_query": "comparer assurance obligatoire",
"impressions": 1088
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 19.761627906976745,
"top_query": "classement assurance de base",
"impressions": 344
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 33.01851851851852,
"top_query": "lamal suisse pas chère",
"impressions": 270
},
{
"ctr": 0.004878048780487805,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 19.98048780487805,
"top_query": "guide assurance maladie suisse",
"impressions": 205
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 50.776119402985074,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 134
}
]
}
},
{
"id": 160,
"site_key": "optiprime",
"category": "ctr_optimization",
"lesson": "Several visible pages have low CTR. Prioritize title, meta description, and intent alignment refreshes before creating net new content.",
"confidence": "high",
"source": "feedback_loop",
"status": "deprecated",
"details_json": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 26.896092362344582,
"top_query": "comparer assurance obligatoire",
"impressions": 1126
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 18.897280966767372,
"top_query": "classement assurance de base",
"impressions": 331
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 33.532,
"top_query": "lamal suisse pas chère",
"impressions": 250
},
{
"ctr": 0.0049504950495049506,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 19.905940594059405,
"top_query": "guide assurance maladie suisse",
"impressions": 202
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 50.48461538461538,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 130
}
]
},
"created_at": "2026-05-29 00:00:17.874831+00:00",
"updated_at": "2026-05-30 00:00:20.363073+00:00",
"details": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 26.896092362344582,
"top_query": "comparer assurance obligatoire",
"impressions": 1126
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 18.897280966767372,
"top_query": "classement assurance de base",
"impressions": 331
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 33.532,
"top_query": "lamal suisse pas chère",
"impressions": 250
},
{
"ctr": 0.0049504950495049506,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 19.905940594059405,
"top_query": "guide assurance maladie suisse",
"impressions": 202
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 50.48461538461538,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 130
}
]
}
},
{
"id": 157,
"site_key": "optiprime",
"category": "ctr_optimization",
"lesson": "Several visible pages have low CTR. Prioritize title, meta description, and intent alignment refreshes before creating net new content.",
"confidence": "high",
"source": "feedback_loop",
"status": "deprecated",
"details_json": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 26.932985204525675,
"top_query": "comparer assurance obligatoire",
"impressions": 1149
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 18.994152046783626,
"top_query": "classement assurance de base",
"impressions": 342
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 35.56,
"top_query": "lamal suisse pas chère",
"impressions": 250
},
{
"ctr": 0.005076142131979695,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 20.065989847715738,
"top_query": "guide assurance maladie suisse",
"impressions": 197
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 49.264,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 125
}
]
},
"created_at": "2026-05-28 00:00:17.393405+00:00",
"updated_at": "2026-05-29 00:00:18.707949+00:00",
"details": {
"pages": [
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparateur-assurance-maladie-suisse",
"clicks": 0,
"position": 26.932985204525675,
"top_query": "comparer assurance obligatoire",
"impressions": 1149
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparis-assurance-maladie",
"clicks": 0,
"position": 18.994152046783626,
"top_query": "classement assurance de base",
"impressions": 342
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog",
"clicks": 0,
"position": 35.56,
"top_query": "lamal suisse pas chère",
"impressions": 250
},
{
"ctr": 0.005076142131979695,
"page": "https://www.optiprime.ch/blog/assurance-maladie",
"clicks": 1,
"position": 20.065989847715738,
"top_query": "guide assurance maladie suisse",
"impressions": 197
},
{
"ctr": 0.0,
"page": "https://www.optiprime.ch/blog/comparatif-assurance-maladie",
"clicks": 0,
"position": 49.264,
"top_query": "meilleures caisses maladie suisse 2026",
"impressions": 125
}
]
}
}
],
"recent_sops": [
{
"id": 150,
"site_key": "optiprime",
"scope": "site",
"name": "adaptive-feedback-playbook",
"version": 25,
"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-01 00:00:16.468091+00:00",
"updated_at": "2026-06-01 00:03:04.605195+00:00",
"confidence_score": 0,
"confidence_label": "low"
},
{
"id": 147,
"site_key": "optiprime",
"scope": "site",
"name": "learningseo-site-improvement-playbook",
"version": 39,
"status": "deprecated",
"content": "1. Before new draft creation, verify that the target intent is not already partially served by an existing URL.\n2. Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.\n3. Prioritize title/H1/intent refreshes on visible pages before creating new pages for adjacent intents.\n4. Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.\n5. Automated actions must emit events, measurements, and postmortems by default.",
"source": "learningseo_daily",
"created_at": "2026-06-01 00:00:10.505524+00:00",
"updated_at": "2026-06-01 00:03:04.637344+00:00",
"confidence_score": 0,
"confidence_label": "low"
},
{
"id": 143,
"site_key": "optiprime",
"scope": "site",
"name": "learningseo-site-improvement-playbook",
"version": 38,
"status": "deprecated",
"content": "1. Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.\n2. Prioritize title/H1/intent refreshes on visible pages before creating new pages for adjacent intents.\n3. Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.\n4. Automated actions must emit events, measurements, and postmortems by default.",
"source": "learningseo_daily",
"created_at": "2026-05-31 00:00:11.794601+00:00",
"updated_at": "2026-06-01 00:00:17.489328+00:00",
"confidence_score": 0,
"confidence_label": "low"
},
{
"id": 141,
"site_key": "optiprime",
"scope": "site",
"name": "adaptive-feedback-playbook",
"version": 24,
"status": "deprecated",
"content": "1. Sync and review the latest GSC and queue feedback before planning new work.\n2. If low-CTR pages exist with meaningful impressions, prioritize refreshes before net new drafts.\n3. If the queue is saturated, shift effort from generation to review, optimization, and publishing throughput.\n4. If failures or weak publish outcomes exist, add a verification step before production actions.\n5. Re-measure outcomes after each major SEO action and log the result back into memory.",
"source": "feedback_loop",
"created_at": "2026-05-30 00:00:19.259888+00:00",
"updated_at": "2026-06-01 00:00:17.483209+00:00",
"confidence_score": 0,
"confidence_label": "low"
},
{
"id": 138,
"site_key": "optiprime",
"scope": "site",
"name": "learningseo-site-improvement-playbook",
"version": 37,
"status": "deprecated",
"content": "1. Before new draft creation, verify that the target intent is not already partially served by an existing URL.\n2. Treat crawlability, indexation, and internal-link architecture as preconditions before content-scale actions.\n3. Prioritize title/H1/intent refreshes on visible pages before creating new pages for adjacent intents.\n4. Every new or refreshed priority page should receive a deliberate internal-link plan from existing related pages.\n5. Automated actions must emit events, measurements, and postmortems by default.",
"source": "learningseo_daily",
"created_at": "2026-05-30 00:00:14.232531+00:00",
"updated_at": "2026-05-31 00:00:19.626696+00:00",
"confidence_score": 0,
"confidence_label": "low"
}
]
}