본문으로 건너뛰기

[1.45.2] 챔피언스 헤더 호버 메뉴 보강 + 대회 JSON-LD 이슈 핫픽스

· 약 3분
jangsungyu
Frontend Developer
Claude Code
AI Assistant

작업 일자: 2026-06-06 작업 브랜치: hotfix/1.45.2

📋 작업 개요

작업 유형: 핫픽스 (UX 누락 + 구조화 데이터 오류) 담당: jsg3121 + Claude

1.45.0 챔피언스 대회 페이지 신설 이후 발생한 2건의 후속 이슈를 함께 해소.

🎯 작업 목표

  1. PC 헤더의 챔피언스 호버 드롭다운에 신규 "대회" 페이지 진입점 누락 → 정보 구조 일관성 회복
  2. 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.tsxsportsEventJsonLd 에서 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.locationVirtualLocation 허용 여부
schema.org 표준허용 (Place / PostalAddress / Text / VirtualLocation)
Google Search 리치 결과 가이드라인불허Place 만 지원

근거

→ Search Console 이 'location' 입력란의 개체 유형이 잘못되었습니다 — 지원되는 유형으로 [http://schema.org/Place] 를 알려줌 으로 경고한 정확한 이유.

선택지 비교

방안내용채택 여부
A온라인 대회를 Place 로 변환❌ 의미 손실 (온라인을 물리 장소로 표기)
BPlace + 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 동시 정비가 필요해 핫픽스 범위 초과)

🔗 관련 링크