8
n8n 한국어amn8n.com

SerpAPI와 Google Sheets를 사용하여 내부 링크 기회를 찾기

중급

이것은Content Creation, Multimodal AI분야의자동화 워크플로우로, 12개의 노드를 포함합니다.주로 Set, HttpRequest, GoogleSheets, ManualTrigger, SplitInBatches 등의 노드를 사용하며. SerpAPI와 Google 스프레드시트를 사용하여 내부 링크 기회를 찾아

사전 요구사항
  • 대상 API의 인증 정보가 필요할 수 있음
  • Google Sheets API 인증 정보
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "3qFkempg015uG0dB",
  "meta": {
    "instanceId": "b597f3db206729fea79938d01afc341ae2811ad29d941b24c1597c0110c58f12",
    "templateCredsSetupCompleted": true
  },
  "name": "Find internal linking opportunities using SerAPI and Google Sheets",
  "tags": [],
  "nodes": [
    {
      "id": "8c2aa4ad-94d0-4c52-b6bb-bee296a4420b",
      "name": "항목 반복",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        480,
        144
      ],
      "parameters": {
        "options": {},
        "batchSize": 5
      },
      "typeVersion": 3
    },
    {
      "id": "7fccd9bf-8f71-4adf-97e4-2eff330d757f",
      "name": "SerpAPI를 사용해 검색 결과 가져오기",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        832,
        160
      ],
      "parameters": {
        "url": "https://serpapi.com/search",
        "options": {},
        "sendQuery": true,
        "authentication": "predefinedCredentialType",
        "queryParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "={{ $json.Keyword }} site:{{ $json.Domain }} -inurl:{{ $json.URL }}"
            }
          ]
        },
        "nodeCredentialType": "serpApi"
      },
      "credentials": {
        "serpApi": {
          "id": "YAoSR4cn13A9KovZ",
          "name": "SerpAPI account"
        },
        "httpHeaderAuth": {
          "id": "TJXGtVnuqOEKAqqj",
          "name": "Unsplash API"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "420bdbbe-a304-4bfe-8cd8-54ab467a6d71",
      "name": "JSON에서 링크 추출",
      "type": "n8n-nodes-base.set",
      "position": [
        1184,
        160
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "eae05e00-7188-4cca-994f-0cdf091e5618",
              "name": "URL",
              "type": "string",
              "value": "={{ $('Loop Over Items').item.json.URL }}"
            },
            {
              "id": "1e7647fb-a137-4971-8f8c-5f0709d0f92f",
              "name": "organic_results",
              "type": "array",
              "value": "={{ $json.organic_results.map(item => item.link) }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "44ca48a2-fae4-4de4-a5d7-e4d16960b914",
      "name": "Google 시트에 내부 URL 추가",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1536,
        160
      ],
      "parameters": {
        "columns": {
          "value": {
            "URL": "={{ $json.URL }}",
            "Internal link 1": "={{ $json.organic_results[0] ? $json.organic_results[0] : \"N/A\"}}",
            "Internal link 2": "={{ $json.organic_results[1] ? $json.organic_results[1] : \"N/A\"}}",
            "Internal link 3": "={{ $json.organic_results[2] ? $json.organic_results[2] : \"N/A\"}}",
            "Internal link 4": "={{ $json.organic_results[3] ? $json.organic_results[3] : \"N/A\"}}",
            "Internal link 5": "={{ $json.organic_results[4] ? $json.organic_results[4] : \"N/A\"}}",
            "Internal link 6": "={{ $json.organic_results[5] ? $json.organic_results[5] : \"N/A\"}}",
            "Internal link 7": "={{ $json.organic_results[6] ? $json.organic_results[6] : \"N/A\"}}",
            "Internal link 8": "={{ $json.organic_results[7] ? $json.organic_results[7] : \"N/A\"}}",
            "Internal link 9": "={{ $json.organic_results[8] ? $json.organic_results[8] : \"N/A\"}}",
            "Internal link 10": "={{ $json.organic_results[9] ? $json.organic_results[9] : \"N/A\"}}"
          },
          "schema": [
            {
              "id": "Domain",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Domain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Keyword",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Keyword",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal link 1",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal link 1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal link 2",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal link 2",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal link 3",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal link 3",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal link 4",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal link 4",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal link 5",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal link 5",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal link 6",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal link 6",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal link 7",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal link 7",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal link 8",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal link 8",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal link 9",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal link 9",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Internal link 10",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Internal link 10",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "URL"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1U0whmy1d7wPoWTNTa1u68QrLTE1NqYgyyFXxARWo_1M/edit#gid=0",
          "cachedResultName": "Internal links"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1U0whmy1d7wPoWTNTa1u68QrLTE1NqYgyyFXxARWo_1M",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1U0whmy1d7wPoWTNTa1u68QrLTE1NqYgyyFXxARWo_1M/edit?usp=drivesdk",
          "cachedResultName": "Find internal links using SerpAPI - N8N demo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "oXAMCvV3d7R6Oelr",
          "name": "Google Sheets account - Personal"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "172e75f7-9698-4c87-819e-edf94ea20612",
      "name": "URL 및 키워드 가져오기",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        128,
        144
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "Internal link 1"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1U0whmy1d7wPoWTNTa1u68QrLTE1NqYgyyFXxARWo_1M/edit#gid=0",
          "cachedResultName": "Internal links"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1U0whmy1d7wPoWTNTa1u68QrLTE1NqYgyyFXxARWo_1M",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1U0whmy1d7wPoWTNTa1u68QrLTE1NqYgyyFXxARWo_1M/edit?usp=drivesdk",
          "cachedResultName": "Find internal links using SerpAPI - N8N demo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "oXAMCvV3d7R6Oelr",
          "name": "Google Sheets account - Personal"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "1d1a37d8-8b2b-4399-9abe-13dff9cc1ad2",
      "name": "스티커 메모",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        16,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 704,
        "content": "## Get URLs and keywords\nIn this node, we're getting the different URLs that we want suggestions for, and the keywords/topics those pages are targeting.\n\nWe're filtering out everything that already has a value in the `internal link 1` column so we don't override rows we already processed in a previous run\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2f549918-a4ca-4a99-b60a-94b903c7f994",
      "name": "수동 트리거",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -112,
        144
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "36b666a5-613b-43bc-a940-b5bb546bdbfa",
      "name": "스티커 메모1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        368,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 704,
        "content": "## Loop over URLs\nLoop over each URL to get the results. Here we're doing it in batches of 5\n\n:warning: Note :warning:\nDon't set the batch size too high or you'll start hitting rate limits for some of the APIs, especially Google Sheets. \n\nIf you have a small number of URLs to process you can leave it at five. If you have a larger set of URLs consider setting the batch size lower, or adding a wait node at the end.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3dc9bb5d-03c4-423b-96d0-120badad6810",
      "name": "스티커 메모2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 704,
        "content": "## Get search results using SerpAPI\nGet the search results from SerpAPI.\n\nWe're searching for the target keyword, while doing a `site:<domain>` search so we only get results from our site.\n\nWe use `-inurl:<url>` to exclude the URL we are currently working with. This gives us results similar to the URL we have that we can building internal links from.\n\n:warning: Note :warning:\nIf you have to process a large set of URLs it's worth [setting up a programmable search engine](https://drlee.io/build-your-own-google-create-a-custom-search-engine-with-trusted-sources-c1c113e845cc) instead of using SerAPI\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "75af678f-5af2-4aa7-8f00-d6fc84ee18e6",
      "name": "스티커 메모3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1072,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 704,
        "content": "## Extract organic links from JSON\nSerpAPI gives us a bunch of data we don't need for this use case so we just filter for the organic results. specifically, we filter the URLs it gives us\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "72d62473-fab0-4db5-92f8-4cac1ab9acb0",
      "name": "스티커 메모4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1424,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 704,
        "content": "## Update Google Sheet\nHere we're adding the URLs to the different column in our sheet.\n\nNote that we're using an inline `if` statement so, if there's no URL present, it just adds 'N/A' to our Google Sheet. Not all URLs will have 10 internal link opportunities\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e229c5a9-44c9-44c5-af81-ca2859283831",
      "name": "스티커 메모5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -592,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 704,
        "content": "## Overview\n\nUse this workflow to spot internal linking ideas on your site and improve your search performance. It takes your target URLs and keywords, finds related pages, and suggests where to add links. Strong internal linking helps search engines understand your site.\n\n## How it works\n- You provide a list of target URLs and the keywords you want to rank for\n- The workflow uses the SERP API to search your site for related pages, skipping the target URL\n- It filters the results and pulls relevant URLs\n- It writes the suggestions to a Google Sheet, and adds “N/A” if no good matches are found\n\n## Setup steps\n1. Turn on the Google Sheets API and create a sheet with your domain, target URLs, and keywords\n2. Create a SERP API account and get an API key\n3. Optional: Set up a Google Programmable Search Engine if you prefer not to use the SERP API\n4. Add your SERP API key and Google Sheets credentials to n8n.\n5. Run the workflow to generate internal link suggestions in your Google Sheet"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "5d62c2bc-3ff0-4b0c-8af5-76d8fe285226",
  "connections": {
    "2f549918-a4ca-4a99-b60a-94b903c7f994": {
      "main": [
        [
          {
            "node": "172e75f7-9698-4c87-819e-edf94ea20612",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8c2aa4ad-94d0-4c52-b6bb-bee296a4420b": {
      "main": [
        [],
        [
          {
            "node": "7fccd9bf-8f71-4adf-97e4-2eff330d757f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "172e75f7-9698-4c87-819e-edf94ea20612": {
      "main": [
        [
          {
            "node": "8c2aa4ad-94d0-4c52-b6bb-bee296a4420b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "420bdbbe-a304-4bfe-8cd8-54ab467a6d71": {
      "main": [
        [
          {
            "node": "44ca48a2-fae4-4de4-a5d7-e4d16960b914",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "44ca48a2-fae4-4de4-a5d7-e4d16960b914": {
      "main": [
        [
          {
            "node": "8c2aa4ad-94d0-4c52-b6bb-bee296a4420b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7fccd9bf-8f71-4adf-97e4-2eff330d757f": {
      "main": [
        [
          {
            "node": "420bdbbe-a304-4bfe-8cd8-54ab467a6d71",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

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

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

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

중급 - 콘텐츠 제작, 멀티모달 AI

유료인가요?

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

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

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

저자
Robin Geuens

Robin Geuens

@robingeuens

Hi, I'm Robin. I'm a veteran marketer of 7 years and love automation. If you have any questions about automation feel free to reach out to me on LinkedIn: https://www.linkedin.com/in/rgeuens/

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34