[1.45.2] 챔피언스 헤더 호버 메뉴 보강 + 대회 JSON-LD 이슈 핫픽스
작업 일자: 2026-06-06 작업 브랜치:
hotfix/1.45.2
📋 작업 개요
작업 유형: 핫픽스 (UX 누락 + 구조화 데이터 오류) 담당: jsg3121 + Claude
1.45.0 챔피언스 대회 페이지 신설 이후 발생한 2건의 후속 이슈를 함께 해소.
🎯 작업 목표
- PC 헤더의 챔피언스 호버 드롭다운에 신규 "대회" 페이지 진입점 누락 → 정보 구조 일관성 회복
- Google Search Console 의 구조화 데이터 오류(
'location' 입력란의 개체 유형이 잘못되었습니다) 해결
✨ 주요 변경사항
1) PC 헤더 챔피언스 호버 메뉴에 "대회" 추가
src/container/desktop/header/nav/HeaderNav.tsx 의 챔피언스 호버 드롭다운에 /champions/tournaments 진입 링크를 추가했다. 기존에는 홈 / 포켓몬 도감 / 티어 리스트 3개만 노출되어 SubNav 4개 탭(ChampionsSubNav)과 불일치했다.
- 마지막 항목
rounded-b-lg클래스 이동: 기존티어 리스트→ 새대회항목 - 모바일 SubNav(
ChampionsSubNavMobile) 와도 정합성 일치
2) 온라인 대회 SportsEvent JSON-LD 출력 제외
src/app/champions/tournaments/[externalId]/page.tsx 의 sportsEventJsonLd 에서 detail.isOnline === true 인 대회는 JSON-LD 자체를 출력하지 않도록 변경.
Before
location: detail.isOnline
? { '@type': 'VirtualLocation', name: '온라인' }
: { '@type': 'Place', name: detail.organizerName ?? '대회 장소' },
After
const sportsEventJsonLd = detail.isOnline
? null
: {
'@context': 'https://schema.org',
'@type': 'SportsEvent',
// ...
location: {
'@type': 'Place',
name: detail.organizerName ?? '대회 장소',
},
}
렌더링 측에서도 sportsEventJsonLd && <script ... /> 조건부 렌더링으로 처리.
🔍 SEO 개선 — 구조화 데이터 오류 원인 분석
사양 충돌 정리
| 사양 | Event.location 의 VirtualLocation 허용 여부 |
|---|---|
| schema.org 표준 | 허용 (Place / PostalAddress / Text / VirtualLocation) |
| Google Search 리치 결과 가이드라인 | 불허 — Place 만 지원 |
근거
- schema.org — Event.location:
VirtualLocation포함 4종 허용 - Google Search Central — Event structured data: "Virtual experiences that have no real-world component aren't supported. Events must take place in a physical location."
→ Search Console 이 'location' 입력란의 개체 유형이 잘못되었습니다 — 지원되는 유형으로 [http://schema.org/Place] 를 알려줌 으로 경고한 정확한 이유.
선택지 비교
| 방안 | 내용 | 채택 여부 |
|---|---|---|
| A | 온라인 대회를 Place 로 변환 | ❌ 의미 손실 (온라인을 물리 장소로 표기) |
| B | Place + eventAttendanceMode: OnlineEventAttendanceMode 병기 | ❌ 핫픽스 범위 초과 + Google 가이드 상 어차피 리치 결과 미대상 |
| C | 온라인 대회 시 JSON-LD 자체 출력 제외 | ✅ 채택 |
Why C: Google 가이드라인 상 온라인 전용 이벤트는 어차피 리치 결과 대상이 아니므로, 잘못된 구조화 데이터를 출력하느니 차라리 출력하지 않는 것이 Search Console 의 색인 오류 누적을 막는다. 오프라인 대회만 정확한
Place구조로 출력해 리치 결과 자격을 유지.
🔧 기술적 세부사항
수정된 파일
src/container/desktop/header/nav/HeaderNav.tsx(호버 메뉴 항목 추가,rounded-b-lg이동)src/app/champions/tournaments/[externalId]/page.tsx(sportsEventJsonLd조건부 생성 + 조건부 렌더링)
영향 범위
- 모바일 헤더 변경 없음 (모바일은 SubNav 만 사용)
- 오프라인 대회 상세 페이지의 JSON-LD 구조는 유지 (location 만
VirtualLocation분기 제거) - 메타데이터(title/description), Breadcrumb JSON-LD, OG 태그 변경 없음
📌 참고 사항
- 추후 개선 후보: 오프라인 대회의
location.address(PostalAddress) 추가 → Google 리치 결과 권장 필드 충족 - "대회" → "토너먼트" 명칭 변경 논의는 1.46.0 minor 로 이관 (SEO/메타데이터/JSON-LD 동시 정비가 필요해 핫픽스 범위 초과)
