Flutter Web에 사이트맵 추가로 SEO 크롤링 기반 마련
목차
Flutter Web 프로젝트에 sitemap.xml을 정적 파일로 추가했다.
사실 이 작업, 줄 수로 보면 아주 작은 변경이다. 파일 하나 추가. 근데 팀장 입장에서 이 작업을 직접 챙긴 건 이유가 있었다.
왜 Flutter Web에서 sitemap이 따로 필요한가
Flutter Web은 기본적으로 SPA(Single Page Application) 구조로 동작한다. 전통적인 서버 렌더링(SSR) 방식이 아니라, JS 번들이 실행되면서 화면을 구성하는 방식이기 때문에 검색엔진 크롤러 입장에서는 꽤 까다로운 환경이다.
Googlebot 같은 최신 크롤러는 JS를 어느 정도 실행할 수 있다고는 하지만, Flutter Web이 렌더링하는 방식은 일반적인 React/Vue SPA와도 다르다. Canvas 기반 렌더링이 섞이거나, 초기 HTML이 거의 비어있는 경우도 많아서 자연스러운 크롤링을 기대하기가 어렵다.
이런 상황에서 sitemap.xml을 명시적으로 제공하는 건 크롤러에게 "이 URL들은 색인해줘"라고 직접 가이드를 주는 행위다. SEO 최적화의 전제 조건이라고 볼 수 있음.
정적 파일 배치 — Flutter Web에서의 구조
Flutter Web 빌드 결과물에서 정적 파일은 web/ 디렉터리 아래에 두면 빌드 후 루트 경로에서 접근 가능하다. 변경 파일이 app/web/sitemap.xml인 걸 보면, 정확히 그 위치에 배치한 것.
app/
└── web/
├── index.html
├── favicon.png
├── manifest.json
└── sitemap.xml ← 이번에 추가한 파일
빌드하면 build/web/sitemap.xml로 그대로 복사되고, 배포 후 https://도메인/sitemap.xml 경로로 접근이 가능해진다. Flutter 프레임워크가 라우팅을 가로채기 전에 정적 파일로 서빙되기 때문에, 별도의 라우팅 설정 없이 바로 동작한다는 점이 핵심이다.
| 항목 | 설명 |
|---|---|
| 파일 위치 | app/web/sitemap.xml |
| 빌드 후 경로 | build/web/sitemap.xml |
| 접근 URL | https://도메인/sitemap.xml |
| Flutter 라우터 개입 | 없음 (정적 파일로 직접 서빙) |
sitemap.xml 구성에서 챙겨야 할 것들
sitemap 파일 자체는 단순한 XML이지만, 팀 내에서 챙길 포인트가 몇 가지 있었다.
<lastmod>값 관리: 마지막으로 해당 URL이 변경된 날짜를 넣어주는 필드인데, 정적 파일이라 자동 갱신이 안 된다. URL이 변경되거나 새로운 페이지가 생길 때 수동으로 업데이트해야 한다는 걸 팀원들에게 공유했음.<priority>값 전략: 어떤 페이지를 상대적으로 중요하게 표시할지 팀 내에서 미리 정리해두는 게 좋다. 크롤러가 priority를 무조건 따르진 않지만, 의도를 명시하는 차원에서 의미 있다.- robots.txt와의 연동:
web/robots.txt에Sitemap: https://도메인/sitemap.xml라인이 있는지도 같이 확인했다. sitemap 단독으로도 Search Console에서 등록 가능하지만, robots.txt에 명시해두면 크롤러가 자동으로 발견할 수 있다. - 동적 라우트 처리: Flutter Web에서
go_router같은 라우터로 동적 경로를 쓰고 있다면, 해당 경로가 sitemap에 누락되지 않았는지 수동으로 확인이 필요하다. 자동 생성 파이프라인이 없는 이상 사람이 챙겨야 하는 부분.
작은 파일, 큰 맥락
코드 리뷰할 때 이런 작업을 가볍게 보고 넘기는 경우가 의외로 많다. "파일 하나 추가니까 패스"로 넘어가면 안 되는 이유가, 이 파일이 나중에 관리 안 되면 오래된 URL이 sitemap에 남거나, 새로 만든 주요 페이지가 색인 안 되는 문제가 생긴다.
팀 차원에서 SEO 관련 정적 파일(sitemap.xml, robots.txt, manifest.json)은 누가 관리 주체인지 명확히 해두는 게 좋다고 생각한다. 개발팀이 챙기는 건지, 마케팅/기획팀이 요청하는 건지 경계가 모호하면 결국 아무도 안 챙기게 됨.
이번 작업은 작지만, Flutter Web SEO 파이프라인의 첫 단추를 꽂은 느낌이었다.
다음은 robots.txt 정비랑, Search Console 등록 확인까지 이어서 챙길 예정.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.