Add SEO skills 33-34 and fix bugs in skills 19-34
New skills: - Skill 33: Site migration planner with redirect mapping and monitoring - Skill 34: Reporting dashboard with HTML charts and Korean executive reports Bug fixes (Skill 34 - report_aggregator.py): - Add audit_type fallback for skill identification (was only using audit_id prefix) - Extract health scores from nested data dict (technical_score, onpage_score, etc.) - Support subdomain matching in domain filter (blog.ourdigital.org matches ourdigital.org) - Skip self-referencing DASH- aggregated reports Bug fixes (Skill 20 - naver_serp_analyzer.py): - Remove VIEW tab selectors (removed by Naver in 2026) - Add new section detectors: books (도서), shortform (숏폼), influencer (인플루언서) Improvements (Skill 34 - dashboard/executive report): - Add Korean category labels for Chart.js charts (기술 SEO, 온페이지, etc.) - Add Korean trend labels (개선 중 ↑, 안정 →, 하락 중 ↓) - Add English→Korean issue description translation layer (20 common patterns) Documentation improvements: - Add Korean triggers to 4 skill descriptions (19, 25, 28, 31) - Expand Skill 32 SKILL.md from 40→143 lines (was 6/10, added workflow, output format, limitations) - Add output format examples to Skills 27 and 28 SKILL.md - Add limitations sections to Skills 27 and 28 - Update README.md, CLAUDE.md, AGENTS.md for skills 33-34 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -80,13 +80,6 @@ NAVER_SECTION_SELECTORS: dict[str, list[str]] = {
|
||||
"type_brand",
|
||||
"sc_new.sp_brand",
|
||||
],
|
||||
"view_tab": [
|
||||
"sp_view",
|
||||
"view_widget",
|
||||
"sc_new.sp_view",
|
||||
"type_view",
|
||||
"api_subject_view",
|
||||
],
|
||||
"news": [
|
||||
"sp_nnews",
|
||||
"news_widget",
|
||||
@@ -132,6 +125,26 @@ NAVER_SECTION_SELECTORS: dict[str, list[str]] = {
|
||||
"type_ad",
|
||||
"nx_ad",
|
||||
],
|
||||
"books": [
|
||||
"sp_book",
|
||||
"sc_new.sp_book",
|
||||
"type_book",
|
||||
"api_subject_book",
|
||||
"nx_book",
|
||||
],
|
||||
"shortform": [
|
||||
"sp_shortform",
|
||||
"sc_new.sp_shortform",
|
||||
"type_shortform",
|
||||
"sp_shorts",
|
||||
"type_shorts",
|
||||
],
|
||||
"influencer": [
|
||||
"sp_influencer",
|
||||
"sc_new.sp_influencer",
|
||||
"type_influencer",
|
||||
"api_subject_influencer",
|
||||
],
|
||||
}
|
||||
|
||||
# Section display names in Korean
|
||||
@@ -141,13 +154,15 @@ SECTION_DISPLAY_NAMES: dict[str, str] = {
|
||||
"knowledge_in": "지식iN",
|
||||
"smart_store": "스마트스토어",
|
||||
"brand_zone": "브랜드존",
|
||||
"view_tab": "VIEW",
|
||||
"news": "뉴스",
|
||||
"encyclopedia": "백과사전",
|
||||
"image": "이미지",
|
||||
"video": "동영상",
|
||||
"place": "플레이스",
|
||||
"ad": "광고",
|
||||
"books": "도서",
|
||||
"shortform": "숏폼",
|
||||
"influencer": "인플루언서",
|
||||
}
|
||||
|
||||
# Default headers for Naver requests
|
||||
@@ -199,7 +214,6 @@ class NaverSerpResult:
|
||||
above_fold_sections: list[str] = field(default_factory=list)
|
||||
ad_count: int = 0
|
||||
dominant_section: str = ""
|
||||
has_view_tab: bool = False
|
||||
has_place_section: bool = False
|
||||
timestamp: str = ""
|
||||
|
||||
@@ -485,7 +499,6 @@ class NaverSerpAnalyzer:
|
||||
ad_count = sum(s.item_count for s in ad_sections) if ad_sections else 0
|
||||
|
||||
# Check special sections
|
||||
has_view = any(s.section_type == "view_tab" for s in sections)
|
||||
has_place = any(s.section_type == "place" for s in sections)
|
||||
dominant = self._find_dominant_section(sections)
|
||||
|
||||
@@ -499,7 +512,6 @@ class NaverSerpAnalyzer:
|
||||
above_fold_sections=above_fold,
|
||||
ad_count=ad_count,
|
||||
dominant_section=dominant,
|
||||
has_view_tab=has_view,
|
||||
has_place_section=has_place,
|
||||
)
|
||||
return result
|
||||
@@ -534,7 +546,6 @@ def print_rich_report(result: NaverSerpResult) -> None:
|
||||
summary_table.add_row("Brand Zone", "Yes" if result.brand_zone_present else "No")
|
||||
if result.brand_zone_brand:
|
||||
summary_table.add_row("Brand Name", result.brand_zone_brand)
|
||||
summary_table.add_row("VIEW Tab", "Yes" if result.has_view_tab else "No")
|
||||
summary_table.add_row("Place Section", "Yes" if result.has_place_section else "No")
|
||||
summary_table.add_row("Dominant Section", result.dominant_section or "N/A")
|
||||
console.print(summary_table)
|
||||
|
||||
Reference in New Issue
Block a user