PageSourceSearch

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

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

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.