PageSourceSearch

https://kokobeo.com/seo-categories-kr.js

js kokobeo.com collected 2026-10-02 04:21:44 UTC 6,643 bytes, 168 lines download raw bytes

1/**
2 * Kokobeo SEO Categories - 대한민국
3 * 188 categories × 40 cities × 20 patterns = 150.400 keywords
4 * File: seo-categories-kr.js
5 * Activates on lang="ko"
6 */
7(function() {
8  'use strict';
9
10  function getLang() {
11    return (document.documentElement.lang || '').toLowerCase().substring(0, 2);
12  }
13
14  var C = [
15    "배관공","전기기사","열쇠수리","페인트공","목수",
16    "청소업체","정원사","만능수리기사","이사업체","냉난방기술자",
17    "미장이","해충방제","지붕수리","용접공","타일공",
18    "유리기사","바닥시공","철거공사","수영장기술자","태양광패널설치",
19    "가정배관공","상업배관공","긴급배관공 24시간",
20    "산업배관공","친환경배관공",
21    "가정전기기사","상업전기기사","긴급전기기사 24시간",
22    "산업전기기사","스마트홈전기기사",
23    "긴급열쇠수리 24시간","자동차열쇠수리","상업열쇠수리",
24    "가정열쇠수리","금고기술자",
25    "실내페인트","외부페인트","상업페인트",
26    "장식페인트","벽지시공",
27    "가구목수","캐비닛제작","마감목수","구조목수",
28    "가정청소","사무실청소","정밀청소",
29    "공사후청소","창문청소",
30    "조경사","수목관리","잔디관리",
31    "관개전문가","정원디자이너",
32    "가구조립","일반수리","석고보드수리","고압세척",
33    "지역이사","장거리이사","사무실이사",
34    "피아노운반","포장서비스",
35    "에어컨수리","난방수리","환기공사",
36    "히트펌프설치","보일러기술자",
37    "벽돌공","석공","콘크리트공","블록공",
38    "흰개미방제","쥐방제","빈대퇴치",
39    "모기방제",
40    "지붕수선","지붕설치","방수공사",
41    "홈통수리","지붕점검",
42    "가전수리","세탁기수리","건조기수리",
43    "냉장고수리","식기세척기수리","오븐수리",
44    "전자레인지수리","냉동고수리",
45    "가전수리 24시간","가전설치",
46    "컴퓨터수리","컴퓨터수리 24시간","IT지원",
47    "스마트폰수리","데이터복구","네트워크설치",
48    "프린터수리","바이러스제거","스마트홈설정",
49    "CCTV설치",
50    "자동차정비","판금도색","타이어샵","자동차전기",
51    "출장정비","자동차수리 24시간","엔진오일교환","자동차검사",
52    "사진작가","웨딩촬영","이벤트촬영","프로필촬영",
53    "영상촬영","부동산촬영",
54    "이벤트기획","웨딩플래너","케이터링","DJ",
55    "플로리스트","이벤트장식","이벤트장비렌탈",
56    "어린이파티",
57    "퍼스널트레이너","방문퍼스널트레이너","온라인퍼스널트레이너",
58    "마사지사","스포츠마사지","치료마사지",
59    "릴렉스마사지","림프마사지",
60    "영양사","물리치료사",
61    "헤어디자이너","바버","에스테티션","네일아트",
62    "메이크업아티스트","속눈썹연장","피부관리","제모",
63    "과외","어학강사","음악강사",
64    "수학과외","컴퓨터과외","시험준비",
65    "반려견돌봄","반려묘돌봄","반려견산책","반려동물미용",
66    "반려견훈련",
67    "변호사","회계사","재무상담사",
68    "공증인","세무사","대출상담사",
69    "웹개발자","앱개발자","그래픽디자이너",
70    "SNS마케터","SEO전문가","카피라이터",
71    "웹디자이너","이커머스개발","디지털마케팅컨설턴트",
72    "영상편집자",
73    "기사서비스","공항픽업","퀵서비스",
74    "화물운송","렌터카기사",
75    "인테리어디자이너","건축가","시공업체",
76    "주방디자이너","홈스테이징",
77    "양복점","구두수선","소파수선","가구복원",
78    "커튼설치","방충망설치","TV안테나설치",
79    "자전거수리","시계수리","피아노조율사"
80  ];
81
82  // 40 Korean cities
83  var P = [
84    "서울","부산","인천","대구","대전","광주","울산","세종",
85    "수원","성남","고양","용인","창원","화성","청주","전주",
86    "천안","남양주","김포","평택","제주","파주","시흥","광명",
87    "포항","김해","안산","안양","구미","양산",
88    "춘천","원주","강릉","속초","여수","순천",
89    "목포","군산","경주","안동"
90  ];
91
92  var T = [
93    "{p} {c}",
94    "{c} {p}",
95    "{c} 추천 {p}",
96    "{p} {c} 저렴한",
97    "{p} {c} 긴급",
98    "{p} {c} 24시간",
99    "{p} {c} 근처",
100    "{p} {c} 비용",
101    "{p} {c} 견적",
102    "{p} {c} 방문",
103    "{p} {c} 믿을만한",
104    "{p} {c} 인증",
105    "{p} 서비스 {c}",
106    "{p} {c} 찾기",
107    "{p} {c} 예약",
108    "{p} {c} 후기",
109    "{p} {c} 가격",
110    "{p} {c} 전문",
111    "{p} {c} 인기",
112    "{p} {c} 무료견적"
113  ];
114
115  function shuffle(arr) {
116    var a = arr.slice();
117    for (var i = a.length - 1; i > 0; i--) {
118      var j = Math.floor(Math.random() * (i + 1));
119      var tmp = a[i]; a[i] = a[j]; a[j] = tmp;
120    }
121    return a;
122  }
123
124  function generateKeywords(count) {
125    var kws = [];
126    var cats = shuffle(C);
127    var provs = shuffle(P);
128    var pats = shuffle(T);
129    var numCats = Math.min(15, cats.length);
130    var numProvs = Math.min(12, provs.length);
131    var numPats = Math.min(8, pats.length);
132    for (var ci = 0; ci < numCats; ci++) {
133      for (var pi = 0; pi < numProvs; pi++) {
134        for (var ti = 0; ti < numPats; ti++) {
135          kws.push(pats[ti].replace('{p}', cats[ci]).replace('{c}', provs[pi]));
136        }
137      }
138    }
139    kws = shuffle(kws);
140    return kws.slice(0, count);
141  }
142
143  function injectKeywords() {
144    var lang = getLang();
145    if (lang !== 'ko') return;
146    var existing = document.querySelector('meta[name="keywords"][data-source="seo-categories-kr"]');
147    if (existing) existing.remove();
148    var keywords = generateKeywords(80);
149    var meta = document.createElement('meta');
150    meta.name = 'keywords';
151    meta.content = keywords.join(', ');
152    meta.setAttribute('data-source', 'seo-categories-kr');
153    document.head.appendChild(meta);
154  }
155
156  if (document.readyState === 'loading') {
157    document.addEventListener('DOMContentLoaded', injectKeywords);
158  } else {
159    injectKeywords();
160  }
161
162  var obs = new MutationObserver(function(mutations) {
163    mutations.forEach(function(m) {
164      if (m.attributeName === 'lang') injectKeywords();
165    });
166  });
167  obs.observe(document.documentElement, { attributes: true });
168})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.