1/** 2 * Kokobeo SEO Categories - SVERIGE 3 * 188 kategorier à 40 städer à 20 mönster = 150.400 keywords 4 * Fil: seo-categories-se.js 5 * Aktiveras vid lang="sv" 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 "Rörmokare","Elektriker","LÃ¥ssmed","MÃ¥lare","Snickare", 16 "Städfirma","TrädgÃ¥rdsmästare","Hantverkare","Flyttfirma","VVS-tekniker", 17 "Murare","Skadedjursbekämpning","Takläggare","Svetsare","Kakelsättare", 18 "Glasmästare","Golvläggare","Rivning","Pooltekniker","Solpanelsinstallatör", 19 "Rörmokare bostad","Rörmokare kommersiell","Akut rörmokare 24H", 20 "Industrirörmokare","Ekologisk rörmokare", 21 "Elektriker bostad","Elektriker kommersiell","Akut elektriker 24H", 22 "Industrielektriker","Smart hem elektriker", 23 "Akut lÃ¥ssmed 24H","BillÃ¥ssmed","Kommersiell lÃ¥ssmed", 24 "LÃ¥ssmed bostad","KassaskÃ¥pstekniker", 25 "InnermÃ¥lare","FasadmÃ¥lare","Kommersiell mÃ¥lare", 26 "Dekorativ mÃ¥lare","Tapetserare", 27 "Möbelsnickare","Finsnickare","Inredningssnickare","Byggsnickare", 28 "Hemstädning","Kontorsstädning","Storstädning", 29 "Byggstädning","Fönsterputs", 30 "Landskapsarkitekt","TrädvÃ¥rd","Gräsklippning", 31 "Bevattningsspecialist","TrädgÃ¥rdsdesigner", 32 "Möbelmontage","Allmänna reparationer","Gipsreparation","Högtryckstvätt", 33 "Lokal flytt","LÃ¥ngdistansflytt","Kontorsflytt", 34 "Pianoflytt","Packtjänst", 35 "AC-reparation","Värmereparation","Ventilation", 36 "Värmepumpsinstallatör","Panntekniker", 37 "Tegelmurare","Stenhuggare","Betongarbetare","Blockmurare", 38 "Termitbekämpning","RÃ¥ttbekämpning","Vägglösbekämpning", 39 "Myggbekämpning", 40 "Takreparation","Takinstallation","Tätskikt", 41 "Hängrännor reparation","Takinspektion", 42 "Vitvaruservice","Tvättmaskinreparation","Torktumlare reparation", 43 "KylskÃ¥psreparation","Diskmaskinreparation","Ugnsreparation", 44 "MikrovÃ¥gsreparation","Frysreparation", 45 "Vitvaruservice 24H","Vitvaruinstallation", 46 "Datorreparation","Datorreparation 24H","IT-support", 47 "Mobilreparation","DataÃ¥terställning","Nätverksinstallation", 48 "Skrivarreparation","Virusborttagning","Smart hem installation", 49 "Ãvervakningskamera installation", 50 "Bilmekaniker","PlÃ¥tslagare","Däckverkstad","Bilelektriker", 51 "Mobil mekaniker","Bilreparation 24H","Oljebyte","Besiktning", 52 "Fotograf","Bröllopsfotograf","Eventfotograf","Porträttfotograf", 53 "Videograf","Fastighetsfotograf", 54 "Eventplanerare","Bröllopsplanerare","Catering","DJ", 55 "Florist","Eventdekoratör","Eventutrustning uthyrning", 56 "Barnkalas underhÃ¥llning", 57 "Personlig tränare","Personlig tränare hemma","Online personlig tränare", 58 "Massör","Sportmassage","Terapeutisk massage", 59 "Avslappningsmassage","Lymfdränage", 60 "Dietist","Fysioterapeut", 61 "Frisör","Barberare","Skönhetsterapeut","Manikyr och pedikyr", 62 "Makeupartist","Fransförlängning","Ansiktsbehandling","Vaxning", 63 "Privatundervisning","SprÃ¥klärare","Musiklärare", 64 "Mattelärare","Datorlärare","Examenförberedelse", 65 "Hundvakt","Kattvakt","Hundrastare","Hundfrisör", 66 "Hundtränare", 67 "Advokat","Revisor","Finansiell rÃ¥dgivare", 68 "Notarie","SkatterÃ¥dgivare","BolÃ¥nerÃ¥dgivare", 69 "Webbutvecklare","Apputvecklare","Grafisk designer", 70 "Social media-ansvarig","SEO-expert","Copywriter", 71 "Webbdesigner","E-handelsutvecklare","Digital marknadsföringskonsult", 72 "Videoredigerare", 73 "Chaufförstjänst","Flygplatstransfer","Bud", 74 "Godstransport","Hyrbilar med chaufför", 75 "Inredningsdesigner","Arkitekt","Byggentreprenör", 76 "Köksdesigner","Home stager", 77 "Skräddare","Skomakare","Möbeltapetserare","Möbelrestaurering", 78 "Gardiner montering","Insektsnät montering","TV-antenntekniker", 79 "Cykelreparation","Urmakare","Pianostämmare" 80 ]; 81 82 // 40 svenska städer (alla län) 83 var P = [ 84 "Stockholm","Göteborg","Malmö","Uppsala","Linköping","VästerÃ¥s","Ãrebro","Norrkö
84ping", 85 "Helsingborg","Jönköping","UmeÃ¥","Lund","BorÃ¥s","Sundsvall","Gävle","Eskilstuna", 86 "Södertälje","Halmstad","Växjö","Karlstad","Trollhättan","Ãstersund","Borlänge", 87 "Falun","Kalmar","SkellefteÃ¥","Kristianstad","Karlskrona","LuleÃ¥","Visby", 88 "Nyköping","Lidköping","Uddevalla","Motala","Landskrona","Ystad", 89 "Kiruna","Mora","Härnösand","Mariestad" 90 ]; 91 92 var T = [ 93 "{p} {c}", 94 "{p} i {c}", 95 "bästa {p} {c}", 96 "{p} billig {c}", 97 "{p} akut {c}", 98 "{p} dygnet runt {c}", 99 "{p} nära mig {c}", 100 "{p} pris {c}", 101 "offert {p} {c}", 102 "{p} hembesök {c}", 103 "pÃ¥litlig {p} {c}", 104 "certifierad {p} {c}", 105 "{p} tjänst {c}", 106 "hitta {p} {c}", 107 "boka {p} {c}", 108 "{p} omdömen {c}", 109 "{p} prislista {c}", 110 "professionell {p} {c}", 111 "{p} rekommenderad {c}", 112 "{p} gratis offert {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 !== 'sv') return; 146 var existing = document.querySelector('meta[name="keywords"][data-source="seo-categories-se"]'); 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-se'); 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.