8
n8n 한국어amn8n.com

✍️ 블로그 이미지 SEO 및 크기审计기 (Ghost와 Google 스프레드시트)

중급

이것은AI, Marketing분야의자동화 워크플로우로, 15개의 노드를 포함합니다.주로 Set, Code, Ghost, HttpRequest, GoogleSheets 등의 노드를 사용하며인공지능 기술을 결합하여 스마트 자동화를 구현합니다. ✍️ 블로그 이미지 SEO 및 크기审计기(Ghost와 구글 스프레드시트)

사전 요구사항
  • 대상 API의 인증 정보가 필요할 수 있음
  • Google Sheets API 인증 정보
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "meta": {
    "instanceId": "",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "f20cd1d4-671c-420c-a25d-1c9fe05b67d9",
      "name": "'Test workflow' 클릭 시",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1000,
        -1030
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "edf80cc8-a4b3-42dd-96dc-c729d209aef9",
      "name": "블로그 게시물 추출",
      "type": "n8n-nodes-base.ghost",
      "position": [
        -780,
        -1030
      ],
      "parameters": {
        "limit": 1,
        "options": {},
        "operation": "getAll"
      },
      "credentials": {
        "ghostContentApi": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "b2f0a448-5b73-499a-a78e-e69b75fc8f9d",
      "name": "게시물 콘텐츠 추출",
      "type": "n8n-nodes-base.set",
      "position": [
        -560,
        -1030
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "00b337cd-1c61-4f19-8c51-b76f3a8dece1",
              "name": "id",
              "type": "string",
              "value": "={{ $json.id }}"
            },
            {
              "id": "8d38f4bc-bca6-4343-8c5e-5d9fd9cbe178",
              "name": "title",
              "type": "string",
              "value": "={{ $json.title }}"
            },
            {
              "id": "c34ddd76-0db6-4225-82fa-04d5542f9c7c",
              "name": "featured_image",
              "type": "string",
              "value": "={{ $json.feature_image }}"
            },
            {
              "id": "c0f9593c-0d5a-4659-9e25-91b098318bd6",
              "name": "excerpt",
              "type": "string",
              "value": "={{ $json.excerpt }}"
            },
            {
              "id": "0d11d3d5-49f8-473a-8602-b49769f88005",
              "name": "content",
              "type": "string",
              "value": "={{ $json.html }}"
            },
            {
              "id": "ec89a00d-9d76-4594-a8ce-98aa177e6737",
              "name": "link",
              "type": "string",
              "value": "={{ $json.url }}"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 3.4
    },
    {
      "id": "e80bde5d-28c0-4fa7-a7ff-bff0fcddbf94",
      "name": "항목 반복",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -360,
        -800
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "1052cc12-c1cd-468f-9cf7-33f73ff43642",
      "name": "모든 이미지 수집",
      "type": "n8n-nodes-base.code",
      "position": [
        500,
        -1300
      ],
      "parameters": {
        "jsCode": "const results = [];\n\nfor (const item of items) {\n  const articleUrl = item.json.link;\n  const articleTitle = item.json.title;\n  const articleId = item.json.id;\n  const html = item.json.content;\n\n  const imgRegex = /<img[^>]*src=\"([^\"]+)\"[^>]*alt=\"([^\"]*)\"?[^>]*>/g;\n  let match;\n\n  while ((match = imgRegex.exec(html)) !== null) {\n    const imageUrl = match[1];\n    const altText = match[2];\n\n    results.push({\n      json: {\n        articleId: articleId,\n        articleTitle: articleTitle,\n        article_url: articleUrl,\n        image_url: imageUrl,\n        alt_text: altText\n      }\n    });\n  }\n}\n\nreturn results;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "b2176289-ded3-471c-bc8a-225dacc33aeb",
      "name": "레코드 추가",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        720,
        -1300
      ],
      "parameters": {
        "columns": {
          "value": {
            "alt_text": "={{ $json.alt_text }}",
            "articleId": "={{ $json.articleId }}",
            "image_url": "={{ $json.image_url }}",
            "article_url": "={{ $json.article_url }}",
            "articleTitle": "={{ $json.articleTitle }}"
          },
          "schema": [
            {
              "id": "articleId",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "articleId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "articleTitle",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "articleTitle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "article_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "article_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "image_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "image_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "alt_text",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "alt_text",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 886110184,
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Nk_2xwvK0ipSjnSbP50AQFc92IlHWaOkSK57-vt_3GY",
          "cachedResultUrl": "",
          "cachedResultName": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    },
    {
      "id": "cdb245eb-a3e3-45d1-bcce-f1d0ce65297c",
      "name": "ID별 레코드 수집",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -140,
        -760
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.id }}",
              "lookupColumn": "articleId"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 886110184,
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Nk_2xwvK0ipSjnSbP50AQFc92IlHWaOkSK57-vt_3GY",
          "cachedResultUrl": "",
          "cachedResultName": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "ePnaAS4PG1sN2E50",
          "name": "Google Sheets LogiGreenBot"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    },
    {
      "id": "dbec4c36-c7e3-49ea-976d-cec6dee70f76",
      "name": "항목 반복1",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        80,
        -760
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "0254622b-3593-4ad8-820c-f6e27e31c53c",
      "name": "이미지 가져오기",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        300,
        -780
      ],
      "parameters": {
        "url": "={{ $json.image_url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "bb2a182b-82ae-4263-b3ab-9a7e30a5b97c",
      "name": "이미지 정보 추출",
      "type": "n8n-nodes-base.code",
      "position": [
        520,
        -780
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const base64 = $binary[\"data\"].data;\nconst fileName = $binary[\"data\"].fileName || 'unknown.png';\nconst extension = fileName.split('.').pop().toLowerCase();\nconst fileSizeKB = $binary[\"data\"].fileSize || 'unknown.png';\nconst size_ok = fileSizeKB <= 500 ? true : false;\n\nreturn {\n  json: {\n    file_name: fileName,\n    file_size_kb: fileSizeKB,\n    format: extension,\n    filename_seo: /[a-z0-9-]{3,}/.test(fileName) ? true : false,\n    size_ok: size_ok\n  }\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "871e3d19-87c7-4dd6-a481-d83fc652478b",
      "name": "결과 이미지",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        740,
        -680
      ],
      "parameters": {
        "columns": {
          "value": {
            "format": "={{ $json.format }}",
            "size_ok": "={{ $json.size_ok }}",
            "image_url": "={{ $('Get Image').item.json.image_url }}",
            "file_size_kb": "={{ $json.file_size_kb }}",
            "filename_seo": "={{ $json.filename_seo }}"
          },
          "schema": [
            {
              "id": "articleId",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "articleId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "articleTitle",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "articleTitle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "article_url",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "article_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "image_url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "image_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "alt_text",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "alt_text",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "file_size_kb",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "file_size_kb",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "format",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "format",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "filename_seo",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "filename_seo",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "size_ok",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "size_ok",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "image_url"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 886110184,
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Nk_2xwvK0ipSjnSbP50AQFc92IlHWaOkSK57-vt_3GY",
          "cachedResultUrl": "",
          "cachedResultName": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    },
    {
      "id": "ad236989-0707-40ca-885c-c5d5550d7954",
      "name": "스티커 노트2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -820,
        -1380
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 520,
        "content": "### 2. Extract Blog Posts Content\nThe Ghost node extracts all the posts of your blog with content and metadata. In the second node, we extract description, URL, content and features image url.\n\n#### How to setup?\n- **Ghost Account API**:\n   1. Add your Ghost Blog Account Credentials\n   2. Select the number of Blog Posts you want to collect\n  [Learn more about the Ghost Node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.ghost)\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8d296af6-9e32-4669-bacc-decab229847a",
      "name": "스티커 노트1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        -1380
      ],
      "parameters": {
        "color": 7,
        "width": 200,
        "height": 520,
        "content": "### 1. Workflow Trigger\nThis workflow uses simple trigger.\n\n#### How to setup?\n*Nothing to do.*\n"
      },
      "typeVersion": 1
    },
    {
      "id": "092719b3-65d7-40b8-af99-36cd3f41ea55",
      "name": "스티커 노트",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -400,
        -1380
      ],
      "parameters": {
        "color": 7,
        "width": 1360,
        "height": 280,
        "content": "### 3. First Loop to Collect Images\nWe loop through all the articles extracted by the Ghost Node. For each article, this section will collect all the images of the article with their **image_url** and **alt_text**. The results will be recorded in a **Google Sheet**.\n\n#### How to setup?\n- **Record Long Break in the Google Sheet Node**:\n   1. Add your Google Sheet API credentials to access the Google Sheet file\n   2. Select the file using the list, an URL or an ID\n   3. Select the sheet in which you want to record the images information\n   4. Map the fields: **article_id**, **article_Title**, **article_url**, **image_url**, **alt_text**, **file_size_kb**, **format**, **filename_seo**\n  [Learn more about the Google Sheet Node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets)\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "71a03b91-fa30-4ede-88f4-f307b5fd7889",
      "name": "스티커 노트3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -400,
        -1080
      ],
      "parameters": {
        "color": 7,
        "width": 1360,
        "height": 620,
        "content": "### 4. Second Loop to Extract Image Information\nWe loop through all the images in the article, for each image we **download** the content using the **HTTP request** node to record **image_size** in kilobytes and **image_name** in a Google Sheet. If the image size is higher than **500 kb**, it is flagged as **not ok**.\n#### How to setup?\n- **Record Image File Name and Size**:\n   1. Add your Google Sheet API credentials to access the Google Sheet file\n   2. Select the file using the list, an URL or an ID\n   3. Select the sheet in which you want to record the images information\n  [Learn more about the Google Sheet Node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets)\n\n\n"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "0254622b-3593-4ad8-820c-f6e27e31c53c": {
      "main": [
        [
          {
            "node": "bb2a182b-82ae-4263-b3ab-9a7e30a5b97c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b2176289-ded3-471c-bc8a-225dacc33aeb": {
      "main": [
        [
          {
            "node": "e80bde5d-28c0-4fa7-a7ff-bff0fcddbf94",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "871e3d19-87c7-4dd6-a481-d83fc652478b": {
      "main": [
        [
          {
            "node": "dbec4c36-c7e3-49ea-976d-cec6dee70f76",
            "type": "main",
            "index": 0
          },
          {
            "node": "e80bde5d-28c0-4fa7-a7ff-bff0fcddbf94",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e80bde5d-28c0-4fa7-a7ff-bff0fcddbf94": {
      "main": [
        [],
        [
          {
            "node": "1052cc12-c1cd-468f-9cf7-33f73ff43642",
            "type": "main",
            "index": 0
          },
          {
            "node": "cdb245eb-a3e3-45d1-bcce-f1d0ce65297c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dbec4c36-c7e3-49ea-976d-cec6dee70f76": {
      "main": [
        [],
        [
          {
            "node": "0254622b-3593-4ad8-820c-f6e27e31c53c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1052cc12-c1cd-468f-9cf7-33f73ff43642": {
      "main": [
        [
          {
            "node": "b2176289-ded3-471c-bc8a-225dacc33aeb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "edf80cc8-a4b3-42dd-96dc-c729d209aef9": {
      "main": [
        [
          {
            "node": "b2f0a448-5b73-499a-a78e-e69b75fc8f9d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bb2a182b-82ae-4263-b3ab-9a7e30a5b97c": {
      "main": [
        [
          {
            "node": "871e3d19-87c7-4dd6-a481-d83fc652478b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b2f0a448-5b73-499a-a78e-e69b75fc8f9d": {
      "main": [
        [
          {
            "node": "e80bde5d-28c0-4fa7-a7ff-bff0fcddbf94",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cdb245eb-a3e3-45d1-bcce-f1d0ce65297c": {
      "main": [
        [
          {
            "node": "dbec4c36-c7e3-49ea-976d-cec6dee70f76",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f20cd1d4-671c-420c-a25d-1c9fe05b67d9": {
      "main": [
        [
          {
            "node": "edf80cc8-a4b3-42dd-96dc-c729d209aef9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

중급 - 인공지능, 마케팅

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수15
카테고리2
노드 유형8
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

저자
Samir Saci

Samir Saci

@samirsaci

Automation, AI and Analytics for Supply Chain & Business Optimization Helping businesses streamline operations using n8n, AI agents, and data science to enhance efficiency and sustainability. Linkedin: www.linkedin.com/in/samir-saci

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34