{
  "name": "HFB Audit",
  "nodes": [
    {
      "parameters": {
        "url": "https://sizinsiteniz.com/sitemap.xml",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        -1568,
        192
      ],
      "id": "855aeadd-fb6f-42f0-b273-50c09ce2647c",
      "name": "HTTP Request"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.xml",
      "typeVersion": 1,
      "position": [
        -1344,
        192
      ],
      "id": "5f046802-080a-4264-a4b7-e403c7f25916",
      "name": "XML"
    },
    {
      "parameters": {
        "fieldToSplitOut": "sitemapindex.sitemap",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        -1120,
        192
      ],
      "id": "42f10110-bade-405b-ad0b-6d5680c414e5",
      "name": "Split Out"
    },
    {
      "parameters": {
        "url": "={{ $json.loc }}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        -896,
        192
      ],
      "id": "d657bfa4-0c9a-44d5-8959-95a70d413212",
      "name": "HTTP Request1"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.xml",
      "typeVersion": 1,
      "position": [
        -672,
        192
      ],
      "id": "bb059474-6dba-4ae3-b790-350b7b047690",
      "name": "XML1"
    },
    {
      "parameters": {
        "fieldToSplitOut": "urlset.url",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        -448,
        192
      ],
      "id": "f1623087-890a-4074-84f2-96b66c035611",
      "name": "Split Out1"
    },
    {
      "parameters": {
        "url": "={{ $json.loc }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        0,
        0
      ],
      "id": "b9142886-e958-4fab-814b-dc4b45e93a14",
      "name": "HTTP Request2"
    },
    {
      "parameters": {
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "Sayfa_Basligi",
              "cssSelector": "title"
            },
            {
              "key": "Meta_Aciklama",
              "cssSelector": "meta[name=\"description\"]",
              "returnValue": "attribute"
            },
            {
              "key": "H1_Baslik",
              "cssSelector": "h1"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.html",
      "typeVersion": 1.2,
      "position": [
        224,
        0
      ],
      "id": "e0675fb4-8a47-4c48-a21e-fe0690178ddf",
      "name": "HTML"
    },
    {
      "parameters": {
        "jsCode": "let combinedReport = \"\";\nlet runIndex = 0;\nlet totalCount = 0;\n\n// T\u00fcm d\u00f6ng\u00fc turlar\u0131ndan gelen <tr> sat\u0131rlar\u0131n\u0131 topluyoruz\nwhile (true) {\n  try {\n    const runData = $items(\"Basic LLM Chain\", 0, runIndex);\n    runData.forEach((item) => {\n      if (item.json && item.json.text) {\n        // AI'\u0131n kazara ekleyebilece\u011fi markdown etiketlerini temizliyoruz\n        let cleanText = item.json.text.replace(/```html/g, \"\").replace(/```/g, \"\");\n        combinedReport += cleanText;\n        totalCount++;\n      }\n    });\n    runIndex++;\n  } catch (e) {\n    break; \n  }\n}\n\nconst htmlContent = `\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <title>SEO Operasyon Merkezi</title>\n  <style>\n    body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: #f4f6f9; padding: 20px; color: #333; }\n    .container { max-width: 1400px; margin: auto; background: white; padding: 20px; border-radius: 10px; box-shadow: 0 4px 15px rgba(0,0,0,0.05); }\n    h1 { color: #2E8B57; border-bottom: 3px solid #2E8B57; padding-bottom: 10px; }\n    table { width: 100%; border-collapse: collapse; margin-top: 20px; }\n    th { background: #2E8B57; color: white; padding: 15px; text-align: left; position: sticky; top: 0; z-index: 10; }\n    td { padding: 15px; border-bottom: 1px solid #eee; vertical-align: top; }\n    tr:hover { background-color: #fcfcfc; }\n    .done { opacity: 0.5; background-color: #f0fdf4 !important; transition: 0.3s; }\n    .content-box { border: 1px dashed #ccc; padding: 10px; border-radius: 5px; font-size: 14px; background: #fff; margin-bottom: 8px; }\n    .copy-btn { background: #005bd3; color: white; border: none; padding: 5px 10px; border-radius: 4px; cursor: pointer; font-size: 12px; float:right; }\n    .copy-btn:hover { background: #00449e; }\n    input[type=\"checkbox\"] { transform: scale(1.5); cursor: pointer; }\n  </style>\n  <script>\n    // Kopyalama Fonksiyonu\n    function copyText(id) {\n      const text = document.getElementById(id).innerText;\n      navigator.clipboard.writeText(text).then(() => alert('Kopyaland\u0131!'));\n    }\n    \n    // Tik at\u0131ld\u0131\u011f\u0131nda sat\u0131r\u0131 ye\u015fil yap ve taray\u0131c\u0131 haf\u0131zas\u0131na (localStorage) kaydet\n    function toggleRow(rowId, chkId) {\n       let row = document.getElementById(rowId);\n       let chk = document.getElementById(chkId);\n       if(chk.checked) { \n           row.classList.add('done'); \n           localStorage.setItem(rowId, 'done'); \n       } else { \n           row.classList.remove('done'); \n           localStorage.removeItem(rowId); \n       }\n    }\n\n    // Sayfa a\u00e7\u0131ld\u0131\u011f\u0131nda eski at\u0131lan tikleri hat\u0131rla\n    window.onload = function() {\n       document.querySelectorAll('.seo-check').forEach(chk => {\n           let rowId = chk.id.replace('chk_', 'row_');\n           if(localStorage.getItem(rowId) === 'done') {\n               chk.checked = true;\n               document.getElementById(rowId).classList.add('done');\n           }\n       });\n    }\n  </script>\n</head>\n<body>\n  <div class=\"container\">\n    <h1>SEO Operasyon Merkezi (Test)</h1>\n    <p>\u0130\u015finiz biten sayfalara tik at\u0131n. Sayfay\u0131 yenileseniz bile att\u0131\u011f\u0131n\u0131z tikler kaybolmaz!</p>\n    <table>\n      <thead>\n        <tr>\n          <th style=\"width: 5%;\">Durum</th>\n          <th style=\"width: 20%;\">Sayfa Bilgisi & Skor</th>\n          <th style=\"width: 35%;\">\u00d6nerilen Ba\u015fl\u0131k</th>\n          <th style=\"width: 40%;\">\u00d6nerilen Meta A\u00e7\u0131klama</th>\n        </tr>\n      </thead>\n      <tbody>\n        ${combinedReport}\n      </tbody>\n    </table>\n    <div style=\"text-align:center; margin-top:20px; color:#888;\">Toplam Taranan Sayfa: ${totalCount}</div>\n  </div>\n</body>\n</html>\n`;\n\nreturn [{\n  json: { status: \"success\", count: totalCount },\n  binary: {\n    data: {\n      data: Buffer.from(htmlContent).toString('base64'),\n      fileName: 'SEO-Liste-Raporu.html',\n      fileExtension: 'html',\n      mimeType: 'text/html',\n    }\n  }\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -16,
        176
      ],
      "id": "aced120b-5bbd-4ea7-840b-b08d676c1d80",
      "name": "Code in JavaScript",
      "executeOnce": true
    },
    {
      "parameters": {
        "batchSize": 10,
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        -224,
        192
      ],
      "id": "0a8f9a59-1d74-48cb-870e-70122b3a8a6a",
      "name": "Loop Over Items"
    },
    {
      "parameters": {
        "amount": 0.5
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        800,
        176
      ],
      "id": "e6990bac-d08f-4ed8-afaa-335c094e8385",
      "name": "Wait"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=\u015fa\u011f\u0131daki sayfa verilerini analiz et ve tablo \u015fablonunu doldur:\nURL: {{$('Loop Over Items').item.json.loc}}\nMevcut Ba\u015fl\u0131k: {{$json.Sayfa_Basligi}}\nMevcut Meta: {{$json.Meta_Aciklama.content}}",
        "messages": {
          "messageValues": [
            {
              "message": "Sen bir SEO uzman\u0131s\u0131n. Sana verilen URL, Ba\u015fl\u0131k ve Meta verilerini analiz et. KES\u0130N KURALLAR:  SADECE a\u015fa\u011f\u0131daki HTML tablo sat\u0131r\u0131n\u0131 (<tr>) doldurarak cevap ver. Ba\u015fka hi\u00e7bir a\u00e7\u0131klama veya Markdown (```html) kullanma.  Sana gelen veriler eksik olsa bile KES\u0130NL\u0130KLE pes etme! Elindeki mevcut Ba\u015fl\u0131k ve Meta \u00fczerinden en iyi SEO analizini yap, puan ver, anahtar kelime bul ve yeni ba\u015fl\u0131k/meta \u00fcret. \"VER\u0130 \u00c7EK\u0130LEMED\u0130\" yazma!  [ID] yazan yerlere rastgele benzersiz bir say\u0131 yaz.  \u015eABLON: <tr id=\"row_[ID]\"> <td style=\"text-align:center; vertical-align:middle;\"><input type=\"checkbox\" class=\"seo-check\" id=\"chk_[ID]\" onchange=\"toggleRow('row_[ID]', this.id)\"></td> <td><a href=\"[SANA VER\u0130LEN URL]\" target=\"_blank\" style=\"font-weight:bold; color:#005bd3;\">\u2197 Shopify'da A\u00e7</a><br><br><span style=\"background:#eef2f7; padding:4px 8px; border-radius:4px; font-weight:bold; color:#2E8B57;\">Skor: %[PUAN]</span><br><br><span style=\"font-size:12px; color:#555;\">\ud83d\udd11 [ANAHTAR KEL\u0130MELER]</span></td> <td><div class=\"content-box\" id=\"t_[ID]\">[YEN\u0130 SEO BA\u015eLI\u011eI]</div><button class=\"copy-btn\" onclick=\"copyText('t_[ID]')\">Kopyala</button></td> <td><div class=\"content-box\" id=\"m_[ID]\">[YEN\u0130 META A\u00c7IKLAMA]</div><button class=\"copy-btn\" onclick=\"copyText('m_[ID]')\">Kopyala</button></td> </tr>"
            }
          ]
        },
        "batching": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.9,
      "position": [
        448,
        0
      ],
      "id": "f39a6b7d-ecf2-4a4a-8d9b-2657e0f8b714",
      "name": "Basic LLM Chain"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4o-mini",
          "mode": "list",
          "cachedResultName": "gpt-4o-mini"
        },
        "builtInTools": {},
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [
        384,
        208
      ],
      "id": "f64e7112-f63b-4b5e-972e-fdebfe9d3c46",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -1760,
        192
      ],
      "id": "532cd004-ab70-40c4-b8f4-28bb7e2e8e00",
      "name": "When clicking \u2018Execute workflow\u2019"
    }
  ],
  "connections": {
    "HTTP Request": {
      "main": [
        [
          {
            "node": "XML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "XML": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "HTTP Request1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request1": {
      "main": [
        [
          {
            "node": "XML1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "XML1": {
      "main": [
        [
          {
            "node": "Split Out1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out1": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request2": {
      "main": [
        [
          {
            "node": "HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML": {
      "main": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "HTTP Request2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        []
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": false,
    "timeSavedMode": "fixed",
    "callerPolicy": "workflowsFromSameOwner"
  },
  "versionId": "24a06348-e22a-4cfa-b13c-253593397708",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "l1lYdPtywmx3o8PD",
  "tags": []
}