path
Jin's Lab
코드로 실험하고 기록하는 개발 일지 · J.Lab

Jin's Lab

코드로 실험하고 기록하는 개발 일지. 커리어와 삶의 방향을 탐색하며 기록하는 공간입니다

blog-automation

AI 블로그 제목 최적화, 스키마 확장으로 검색 노출과 클릭률 다 잡기

J.Lab ·
목차

    최근 AI를 활용해 블로그 포스팅을 자동화하는 파이프라인을 구축해 유용하게 사용하고 있었습니다. 하지만 한 가지 계속 눈에 밟히는 아쉬운 점이 있었습니다. 바로 자동으로 발행되는 글들의 제목이 너무 길고 장황하여 매력도가 떨어진다는 사실이었습니다.

    기존에는 노션 DB에 정리해 둔 SEO용 제목을 그대로 가져와 발행 제목으로 사용하고 있었습니다. 대개 '제목 — 부제' 형태로 길게 작성되다 보니, 실제 검색 결과에 노출되었을 때 시선을 끌지 못하고 클릭을 유도하기에 턱없이 부족했습니다. 기존 구조에서는 Gemini가 이 노션 DB의 제목을 단순히 참고용으로만 사용하고 직접 다듬지 않았기 때문입니다.

    데이터베이스 레코드와 인공지능 브레인이 연결되는 모습을 표현한 아이소메트릭 일러스트레이션

    장황한 노션 제목이 가져온 낮은 클릭 유도력

    노션 DB에 정리해 둔 제목은 글의 핵심 주제를 담고는 있지만, 검색 사용자들의 클릭을 유도하는 클릭형 제목과는 거리가 멀었습니다. 너무 설명적인 데다 길어서 모바일 화면에서는 중간에 말줄임표로 잘리기 일쑤였습니다. 메인 키워드인 AI 블로그 제목 최적화를 효과적으로 반영하면서도, 독자가 보고 바로 누르고 싶게 만드는 압축적인 제목이 절실했습니다.

    그렇다고 자극적인 단어만 나열하는 낚시성 제목을 쓸 수는 없었습니다. 검색 엔진의 저품질 방지 필터에 걸려 블로그의 신뢰도가 떨어질 수 있기 때문입니다. 결국 검색 노출을 위한 키워드 배치(SEO)와 실제 독자의 유입을 이끄는 매력도(CTR)를 동시에 만족하는 제목을 AI가 직접 생성하도록 구조를 개편해야 했습니다.

    새로운 title 필드가 확장되는 JSON 스키마 구조의 개념적 아이소메트릭 일러스트

    responseSchema 확장으로 추가 호출 없이 해결하기

    가장 효율적인 해결책은 추가적인 API 호출 비용 없이 한 번에 최적화된 제목까지 받아오는 것이었습니다. 이를 위해 블로그 콘텐츠 생성을 담당하는 generateBlogContent 함수의 responseSchema에 title 필드를 새롭게 추가하여 스키마를 확장했습니다.

    프롬프트에는 아주 구체적인 [title 작성 조건]을 심었습니다. 노션 DB의 원본 제목을 참고하되, 불필요한 부제나 장황한 부연 설명을 모두 걷어내고 한글 22자에서 38자 사이(최대 42자 상한)의 간결한 제목으로 다듬도록 설계했습니다. 메인 키워드는 반드시 제목 앞부분에 배치하고, 저품질 방지를 위해 과장되거나 낚시성이 짙은 표현은 엄격히 금지했습니다.

    이렇게 완성된 스키마 기반의 출력 데이터는 runJinsLab 함수에서 pubTitle 변수로 받아와 실제 발행 제목으로 사용하게 만들었습니다. 만약 시스템 오류나 일시적 문제로 인해 API 응답 결과에 content.title 값이 누락되어 넘어오는 경우를 대비하여, 기존 노션 DB 제목을 그대로 사용하는 폴백(Fallback) 안전장치도 잊지 않고 구현해 두었습니다.

    검색엔진 최적화와 클릭률의 균형을 시각화한 테크 스타일의 아이소메트릭 일러스트

    영어 퍼머링크 트릭과의 시너지와 남겨진 과제

    이번 개선 작업은 기존에 구현해 두었던 영문 퍼머링크 트릭과 결합하면서 시너지 효과가 배가되었습니다. 글의 URL 주소는 깔끔한 영문 슬러그(Slug) 형태로 유지되면서도, 포털에 노출되는 제목은 한글 검색과 클릭율에 완벽하게 최적화된 형태를 갖추게 된 것입니다. 하나의 JSON 응답 필드 안에서 SEO와 CTR을 동시에 조율하는 효율적인 구조가 완성되었습니다.

    다만 작업을 마치고 나니 한 가지 새로운 관찰 과제가 생겼습니다. 이제 노션 DB에 저장된 원래의 SEO 제목은 AI가 참고하는 '주제 씨앗(Seed)'의 역할을 하게 되었고, 실제 블로그에 발행되는 최종 제목은 완전히 새로 다듬어진 별개의 타이틀이 되었습니다. 이로 인해 두 제목 사이에 차이가 발생하게 되었습니다.

    발행된 실제 최종 제목을 다시 노션 DB에 역기록하여 일치시키는 기능은 구현 난이도를 고려해 추후 해결해야 할 후속 과제로 남겨두었습니다. 그래도 한 번의 구조 개편으로 자동 발행 글들의 제목 퀄리티가 몰라보게 깔끔해진 것을 보니 무척 뿌듯합니다.

    blog-automation gemini-api json-schema prompt-engineering seo-optimization
    ← 이전 글
    최근 게시물
    다음 글 →
    이전 게시물
    ≡ 글 목록으로
    소개
    path
    J.Lab

    커리어와 삶의 방향을 탐색하며
    기록하는 공간입니다

    카테고리
    403 Forbidden Error 1 AdSense 1 AdSense Bot Detection 1 AI Automation 1 AI Image Generation 1 ai-automation 2 AI-Prompting 1 AIBlogAutomation 1 AICodeLog 1 AIContentGeneration 1 AIImageGeneration 1 AIWritingErrors 1 API Automation 2 API Retry Design 1 api-automation 1 API-Deprecation 1 api-error 1 api-fallback 1 api-retry-strategy 1 api-troubleshooting 1 APIDebugging 1 APIError 1 APIErrorHandling 1 APIIntegration 1 APITokenRenewal 1 AppsScript 1 appsScriptAutomation 1 AutomatedBlogging 1 automation 1 Automation 2 AutomationTroubleshooting 1 Backoff Algorithm 1 Base64Encoding 1 BatchProcessing 1 blog-automation 1 blog-customization 1 blog-migration 3 Blog-Sorting 1 blog-strategy 1 blog-theme-customization 1 blog-workflow 1 blogautomation 1 BlogAutomation 2 Blogger 4 Blogger API 2 Blogger Automation 1 Blogger SEO 1 blogger-api 3 blogger-automation 1 blogger-error-400 1 blogger-labels 1 blogger-seo 1 blogger-tips 1 Blogger-Tips 1 BloggerAPI 3 BloggerBypath 1 BloggerCustomization 2 BloggerFavicon 1 BloggerTemplate 1 BloggerTemplateEditing 1 BloggerTheme 1 BloggerThemeCustomization 1 BloggerXMLStructure 1 Blogging-Automation 1 BloggingTools 1 BlogQuality 1 BlogSpot 1 BWidgetBIncludable 1 CardClickHandler 1 CDATA 1 clamping-text 1 Code Integration 1 codelog 1 CodeLog 1 codeRefactoring 1 contentsequencing 1 cost-reduction 1 CSSOverlay 1 data-parsing 1 DatabaseDesign 1 DataRecovery 1 DateInjection 1 Debugging 2 dev-journey 1 DeveloperJourney 2 DevJourney 1 display-none-seo 1 dom-manipulation 1 dynamic-menu 1 Error-Handling 1 ErrorHandling 1 Execution Timeout 1 ExecutionLimit 1 exponential-backoff 1 FactChecking 1 FaviconEmbedding 1 Feed-API 1 filesystem 1 Flat Illustration 1 FluxModel 1 FreeAIImage 1 FrontEndDev 1 FrontendTips 1 GAS Blogger API 1 gas-automation 1 gas-optimization 1 gas-trigger 1 GASTimeout 1 gasTriggerManagement 1 GCP Project Linkage 1 Gemini 1 Gemini API 1 gemini-api 1 GeminiAPI 1 GeminiPrompt 1 GeminiPromptEngineering 1 GmailRestrictions 1 Google Apps Script 7 Google Discover 1 google-apps-script 3 Google-Apps-Script 1 google-blogger 1 googleAppsScript 1 GoogleAppsScript 6 googlesapps-script 1 hero-image 1 HTMLWidgetBlogger 1 http-429 1 HuggingFace 1 HuggingFaceAPI 1 ico-generator 1 Image Optimization 1 image-automation 1 image-optimization 1 In-App Browser 1 invalid-argument 1 javascript 3 JavaScript 2 javascript-automation 1 javascript-toc 1 jlab-codelog 1 JLabDevLog 1 json-schema 1 label-length-limit 1 linux 1 meta-description 1 Negative Prompt 1 notion-api 1 notion-database 1 notion-gas-integration 1 NotionAPI 1 NotionAutomation 1 notionintegration 1 NotionIntegration 1 OAuth Scope 1 pagination 1 payload-validation 1 permalink-management 1 PersonaDesign 1 pil-image-processing 1 Pinterest 1 Pollinations 1 Pollinations Flux 1 pollinations-api 1 PollinationsAI 1 PositionAbsolute 1 Prompt Design 1 Prompt Engineering 1 prompt-engineering 1 Prompt-Engineering 1 PromptEngineering 1 publishorder 1 python-favicon 1 queue-stuck 1 RandomDelay 1 rate-limiting 1 Refactoring 1 rfc3339 2 Robots Meta Tag 1 RSS Feed 1 scriptNotFound 1 Search Engine Optimization 2 Search-Engine-Optimization 1 SEO Tips 1 seo-optimization 4 SEO-Optimization 1 seriesmanagement 1 SidebarLinks 1 SNSMarketing 1 SVGIcon 1 table-of-contents 1 TechJournal 1 Template 1 ThreadsAPI 1 tistory-migration 1 transparent-favicon 1 triggerCleanup 1 Troubleshooting 1 unzip 1 URL Slug 1 vanilla-js 1 Web Development 1 Web Publishing 2 Web Security 1 web-development 1 Web-Development 1 web-development-tips 1 web-performance 1 web-scraping 1 WebAccessibility 1 WebDevelopment 3 WebDevelopmentTips 1 WebDevJourney 1 windows 1 WorkflowAutomation 1 XMLParser 1 XMLSpecialCharacters 1 XMLTheme 1 zip 1
    인기 글
    GAS에서 Blogger API 403 오류 완전 정복 — appsscript.json 스코프와 GCP 프로젝트 연결
    GAS에서 Blogger API 403 오류 완전 정복 — appsscript.json 스코프와 GCP 프로젝트 연결
    Google Apps Script 실행 시간 6분 제한 — Gmail 계정 함정과 랜덤 딜레이 설계
    Google Apps Script 실행 시간 6분 제한 — Gmail 계정 함정과 랜덤 딜레이 설계
    Blogger 테마 XML 직접 뜯어봤더니 알게 된 것들
    Blogger 테마 XML 직접 뜯어봤더니 알게 된 것들
    다른 블로그
    IssueLog
    IssueLog
    issuelog.jinbytes.com
    KidStory
    KidStory
    kidstory.jinbytes.com
    IT Story
    IT Story
    jinbytes.com
    © Jin's Lab · J.Lab · All Rights Reserved
    jinbytes.com · Powered by Blogger