1/** 2 * Kokobeo SEO Categories - USA 3 * 188 categories à 150 cities à 20 patterns = 564.000 keywords 4 * Injects meta keywords dynamically with rotation on each load 5 * File: seo-categories-us.js 6 * NOTE: Activates on lang="en" OR default (kokobeo.com = English) 7 */ 8(function() { 9 'use strict'; 10 11 function getLang() { 12 return (document.documentElement.lang || '').toLowerCase().substring(0, 2); 13 } 14 15 // 188 categories in English 16 var C = [ 17 "Plumber","Electrician","Locksmith","Painter","Carpenter", 18 "Cleaning service","Gardener","Handyman","Mover","HVAC Technician", 19 "Mason","Pest control","Roofer","Welder","Tiler", 20 "Glazier","Flooring specialist","Demolition","Pool technician","Solar panel installer", 21 "Residential plumber","Commercial plumber","Emergency plumber 24H", 22 "Industrial plumber","Green plumber", 23 "Residential electrician","Commercial electrician","Emergency electrician 24H", 24 "Industrial electrician","Smart home electrician", 25 "Emergency locksmith 24H","Auto locksmith","Commercial locksmith", 26 "Residential locksmith","Safe technician", 27 "Interior painter","Exterior painter","Commercial painter", 28 "Decorative painter","Wallpaper installer", 29 "Furniture carpenter","Cabinet maker","Finish carpenter","Structural carpenter", 30 "House cleaner","Office cleaner","Deep cleaning", 31 "Post-construction cleaning","Window cleaner", 32 "Landscape gardener","Tree surgeon","Lawn care", 33 "Irrigation specialist","Garden designer", 34 "Furniture assembly","General repairs","Drywall repair","Pressure washing", 35 "Local mover","Long distance mover","Office mover", 36 "Piano mover","Packing services", 37 "AC repair","Heating repair","Ventilation", 38 "Heat pump installer","Furnace technician", 39 "Bricklayer","Stone mason","Concrete worker","Block layer", 40 "Termite control","Rodent control","Bed bug treatment", 41 "Mosquito control", 42 "Roof repair","Roof installation","Waterproofing", 43 "Gutter repair","Roof inspection", 44 "Appliance repair","Washer repair","Dryer repair", 45 "Refrigerator repair","Dishwasher repair","Oven repair", 46 "Microwave repair","Freezer repair", 47 "Appliance repair 24H","Appliance installation", 48 "Computer repair","Computer repair 24H","IT support", 49 "Phone repair","Data recovery","Network installation", 50 "Printer repair","Virus removal","Smart home setup", 51 "Security camera installation", 52 "Auto mechanic","Auto body shop","Tire shop","Auto electrician", 53 "Mobile mechanic","Auto repair 24H","Oil change","Car inspection", 54 "Photographer","Wedding photographer","Event photographer","Portrait photographer", 55 "Videographer","Real estate photographer", 56 "Event planner","Wedding planner","Catering","DJ", 57 "Florist","Event decorator","Event equipment rental", 58 "Kids party entertainment", 59 "Personal trainer","Home personal trainer","Online personal trainer", 60 "Massage therapist","Sports massage","Therapeutic massage", 61 "Relaxation massage","Lymphatic drainage massage", 62 "Nutritionist","Physical therapist", 63 "Hair stylist","Barber","Esthetician","Manicure and pedicure", 64 "Makeup artist","Eyelash extensions","Facial treatments","Hair removal", 65 "Tutoring","Language teacher","Music teacher", 66 "Math tutor","Computer tutor","Test prep", 67 "Dog sitter","Cat sitter","Dog walker","Pet groomer", 68 "Dog trainer", 69 "Lawyer","Accountant","Financial advisor", 70 "Notary","Tax consultant","Mortgage broker", 71 "Web developer","App developer","Graphic designer", 72 "Social media manager","SEO expert","Copywriter", 73 "Web designer","E-commerce developer","Digital marketing consultant", 74 "Video editor", 75 "Chauffeur service","Airport transfer","Courier", 76 "Freight transport","Car service", 77 "Interior designer","Architect","General contractor", 78 "Kitchen designer","Home stager", 79 "Tailor","Cobbler","Upholsterer","Furniture restorer", 80 "Curtain installer","Screen installer","TV antenna technician", 81 "Bicycle repair","Watch repair","Piano tuner" 82 ]; 83 84 // 150 major US cities (all 50 states represented) 85 var P = [ 86 "New York","Los Angeles","Chicago","Houston","Phoenix","Philadelphia","San Antonio","San Diego", 87 "Dallas","San Jose","Austin","Jacksonville","Fort Worth","Columbus","Charlotte","Indianapolis", 88 "San Francisco","Seattle","Denver","Washington DC","Nashville","Oklahoma City","El Paso","Boston", 89 "Portland","Las Vegas","Memphis","Louisville","Baltimore","Milwaukee","Albuquerque","Tucson",
90 "Fresno","Sacramento","Mesa","Kansas City","Atlanta","Omaha","Colorado Springs","Raleigh", 91 "Long Beach","Virginia Beach","Miami","Oakland","Minneapolis","Tampa","Tulsa","Arlington", 92 "New Orleans","Wichita","Cleveland","Bakersfield","Aurora","Anaheim","Honolulu","Santa Ana", 93 "Riverside","Corpus Christi","Lexington","Stockton","St. Louis","Pittsburgh","Cincinnati", 94 "Anchorage","Henderson","Greensboro","Plano","Newark","Lincoln","Orlando","Irvine", 95 "Toledo","Jersey City","Chula Vista","Durham","Laredo","Madison","Gilbert","Norfolk", 96 "Reno","Winston-Salem","Glendale","Hialeah","Garland","Scottsdale","Irving","Fremont", 97 "Boise","Richmond","Spokane","Des Moines","Montgomery","Fargo","Tacoma","Shreveport", 98 "San Bernardino","Grand Rapids","Huntsville","Salt Lake City","Birmingham","Rochester", 99 "Knoxville","Chattanooga","Providence","Savannah","Charleston","Little Rock", 100 "Baton Rouge","Sioux Falls","Hartford","Columbia","Tallahassee","Topeka", 101 "Jackson","Trenton","Cheyenne","Bismarck","Montpelier","Concord", 102 "Dover","Frankfort","Pierre","Harrisburg","Annapolis","Springfield", 103 "Lansing","Olympia","Salem","Carson City","Santa Fe","Helena", 104 "Juneau","Augusta","Burlington","Wilmington","Bridgeport","New Haven", 105 "Stamford","Syracuse","Buffalo","Albany","Yonkers","Worcester", 106 "Naples","Fort Lauderdale","St. Petersburg","Sarasota","Cape Coral","Daytona Beach", 107 "Scottsdale","Tempe","Chandler","Paradise","Henderson" 108 ]; 109 110 // 20 keyword patterns 111 var T = [ 112 "{p} {c}", 113 "{p} in {c}", 114 "best {p} {c}", 115 "cheap {p} {c}", 116 "emergency {p} {c}", 117 "{p} 24 hours {c}", 118 "{p} near me {c}", 119 "{p} cost {c}", 120 "free quote {p} {c}", 121 "{p} at home {c}", 122 "trusted {p} {c}", 123 "certified {p} {c}", 124 "{p} service {c}", 125 "find {p} {c}", 126 "hire {p} {c}", 127 "{p} reviews {c}", 128 "{p} prices {c}", 129 "professional {p} {c}", 130 "top rated {p} {c}", 131 "affordable {p} {c}" 132 ]; 133 134 function shuffle(arr) { 135 var a = arr.slice(); 136 for (var i = a.length - 1; i > 0; i--) { 137 var j = Math.floor(Math.random() * (i + 1)); 138 var tmp = a[i]; a[i] = a[j]; a[j] = tmp; 139 } 140 return a; 141 } 142 143 function generateKeywords(count) { 144 var kws = []; 145 var cats = shuffle(C); 146 var provs = shuffle(P); 147 var pats = shuffle(T); 148 var numCats = Math.min(15, cats.length); 149 var numProvs = Math.min(12, provs.length); 150 var numPats = Math.min(8, pats.length); 151 for (var ci = 0; ci < numCats; ci++) { 152 for (var pi = 0; pi < numProvs; pi++) { 153 for (var ti = 0; ti < numPats; ti++) { 154 kws.push(pats[ti].replace('{p}', cats[ci]).replace('{c}', provs[pi])); 155 } 156 } 157 } 158 kws = shuffle(kws); 159 return kws.slice(0, count); 160 } 161 162 function injectKeywords() { 163 var lang = getLang(); 164 // Activate for English OR default (kokobeo.com = English by default) 165 if (lang !== 'en' && lang !== '') return; 166 var existing = document.querySelector('meta[name="keywords"][data-source="seo-categories-us"]'); 167 if (existing) existing.remove(); 168 var keywords = generateKeywords(80); 169 var meta = document.createElement('meta'); 170 meta.name = 'keywords'; 171 meta.content = keywords.join(', '); 172 meta.setAttribute('data-source', 'seo-categories-us'); 173 document.head.appendChild(meta); 174 } 175 176 if (document.readyState === 'loading') { 177 document.addEventListener('DOMContentLoaded', injectKeywords); 178 } else { 179 injectKeywords(); 180 } 181 182 var obs = new MutationObserver(function(mutations) { 183 mutations.forEach(function(m) { 184 if (m.attributeName === 'lang') injectKeywords(); 185 }); 186 }); 187 obs.observe(document.documentElement, { attributes: true }); 188})();
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.