<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <!--
    이 파일은 "사이트맵 인덱스"다. (개별 URL 목록이 아니다)
    검색엔진에는 이 파일 하나만 제출하면 아래 사이트맵이 모두 전달된다.

    ── 등록된 사이트맵 (2026-10-27 기준) ─────────────────────────────
      sitemap-core.xml                       30   고정 핵심 페이지
      sitemap-posts.xml                      45   블로그 게시글
      sitemap-region.xml                    477   지역 대표 페이지 통합
                                                   (시 허브 11 + 구 허브 34 + 동 대표 432)
      ----------------------------------------------------------------------
      전체 URL 수: 30 + 45 + 477 = 552

    ■ 2026-10-27 정리 — 등록하지 "않는" 사이트맵과 그 이유
      public/ 에는 파일이 있지만 인덱스·robots 에 일부러 넣지 않은 사이트맵이 있다.
      이유 없이 빠진 게 아니라, 넣으면 손해라서 뺀 것이다.

        · sitemap-dongs.xml (540)
          /region/{시}/{구}/{동}/{서비스} 주소 목록. 그 페이지들은 전부
          canonical 이 /dong/{시}/{구}/{동} 을 가리키고 noIndex 가 걸려 있다.
          → 색인 대상이 아닌 주소를 제출하면 크롤러가 noindex 문서를 순회하며
            수집 예산만 태운다. 그래서 "등록하지 않는 것이 정답"이다.
            (/dong/ 대표 페이지 424개는 sitemap-region.xml 이 담당)
          ※ 이 파일은 한때 2,526개(421동 × 6서비스)였으나, 동 이름만 치환된
            대량 유사 문서 위험 때문에 180동 × 3서비스 = 540개로 줄여둔 상태다.
            어느 쪽이든 인덱스 등록 대상은 아니다.

        · sitemap-dongs-keywords.xml (183)
          같은 이유. /region/…/서비스 계열의 별칭 주소 목록이다.

        · sitemap-districts.xml / sitemap-dongs-hub-incheon·bucheon-seoul·gyeonggi.xml
          지역 페이지를 4개로 나눠 담던 이전 구성. 2026-10-27 에 sitemap-region.xml
          하나로 통합했고, 같은 URL 을 중복 등재하지 않도록 인덱스에서 내렸다.
          파일은 되돌리기 쉽도록 public/ 에 그대로 보존한다.

        · sitemap-images.xml
          이미지 전용 목록. 이미지 검색 노출을 따로 운영할 때만 등록한다.

      ※ 위 파일들은 robots.txt 에서 Disallow 하지 않는다.
        인덱스에 없으면 크롤러가 읽을 경로가 없으므로 실효 차이가 없고,
        Disallow 를 걸면 나중에 다시 등록할 때 혼동만 생긴다.

    ■ 동 사이트맵에서 38개를 뺀 이유 (2026-10-22)
      dongList 에는 목록·검색용으로 넣어둔 광역·구 단위 지명이 섞여 있었다.
        · '인천'·'인천시'·'인천특별시' (3)
        · '청라'·'검단'·'계양'·'부평'·'주안'·'송도'·'일산'·'강화' (8)
        · 시·구 이름 27개 ('계양구'·'서구'·'마포구' 등)
      이들은 실제 동 문서(청라동·계양구 등)나 구 허브 페이지와 내용이 겹치는
      얇은 문서였고, 수집 예산만 나눠 먹었다. 그래서 지역 대표 페이지에서 제외했다.
      462 - 38 = 424.

      ※ 2026-10-27 보정 — 38개를 한 덩어리로 빼면 손해인 경우가 있었다.
        · '계양구'·'서구'·'인천시'처럼 구·시 이름 자체인 문서는 /regions 허브와
          중복이므로 그대로 제외하고, 해당 페이지에 noindex 를 걸었다.
        · 반면 청라·검단·계양·부평·주안·송도·일산·강화 8개는 실제 검색 수요가 있는
          지역 지명이라 색인 대상으로 되살리고 sitemap-region.xml 에 편입했다.
        결과: 동 대표 424 + 8 = 432 (구·시 이름 30개는 noindex)

    ■ 사이트맵은 손으로 관리하지 않는다 (지역 계열만)
      지역 페이지 계열(sitemap-region.xml)은 지역 목록에서 자동 생성한다.
        node scripts/generate-region-sitemap.mjs            # 다시 만들기
        node scripts/generate-region-sitemap.mjs --check     # 목록과 어긋났는지 검사
      동·구·시를 추가/삭제하면 위 명령만 돌리면 된다. 손으로 고치면 누락이 생긴다.

    ■ 배포 전 필수 게이트 (2026-10-27 고정 절차)
      발행(publish) 직전에는 예외 없이 아래 한 명령을 통과시킨 뒤 발행한다.
        node scripts/predeploy-check.mjs
      지역 사이트맵 정합 + lastmod + 인덱스/robots 등록 일치 + 교차 중복 0건
      + noindex·차단 경로 혼입 0건을 한 번에 검사하고, 실패하면 exit 1 로 멈춘다.
      "RESULT: PASS" 가 아닌 상태로 발행하면 검색엔진이 어긋난 목록을 읽는다.

      반면 이 인덱스 파일과 sitemap-core/posts 는 손으로 관리한다.
      예전에 빌드 과정에서 이 파일을 다시 쓰던 생성기는, 대표가 아닌
      /region/…/서비스 주소 5,082개를 담은 인덱스로 덮어썼기 때문에 제거했다.
      (빌드가 한 번만 돌아도 정리해둔 구성이 날아갔다)
      lastmod 는 project_plan 9.47 규칙대로 "실제로 바뀐 그룹만" 갱신한다.
  -->

  <sitemap>
    <loc>https://electrical-engineer.readdy.co/sitemap-core.xml</loc>
    <lastmod>2026-10-27T13:19:11.158Z</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://electrical-engineer.readdy.co/sitemap-posts.xml</loc>
    <lastmod>2026-10-27T13:19:11.158Z</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://electrical-engineer.readdy.co/sitemap-region.xml</loc>
    <lastmod>2026-10-27T13:19:11.158Z</lastmod>
  </sitemap>

</sitemapindex>