개발 slecs

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.txtSitemap: 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

첫 댓글 달아줘.