Is Website Ranking and SEO Checker by Semalt safe?

Medium risk

Website Ranking and SEO Checker by Semalt sends each visited hostname to Semalt ranking and request-log APIs.

The content script runs on all sites and sends the current hostname to Semalt's ranking API, then logs the request with a persistent extension UID to ext.semalt.com. The extension also fetches a remote Semalt tag list that can drive disabling other installed SEO extensions after the user accepts its prompt.

Semalt companyv7.5.0Chrome Web Store
50Risk
Who publishes it

LP - 2 other listings from the same operator, none carrying a finding

What this publisher told the store about itself, and the other listings that told it the same thing.

Publisher
Semalt company
Declared legal entity
LP
Registered address
5 Mitchell Street, Leith, Edinburgh EH6 7BD, GB
Registered contact
Semalt

Same store account

2 other listings published from this account, 2k+ users between them, none of them carrying a finding.

Shared hosts - 4 hostnames

Hostnames hardcoded in this extension that few other listings call. That can mean one operator behind both, and it can equally mean a small shared vendor, so it is context rather than a conclusion. Hosts that many listings call are left out: they are services, not connections.

ext.semalt.com
Also called by 6 other listings, including Smart SEO
kwinside.com
Also called by 6 other listings, including Smart SEO
semalt.com
Also called by 6 other listings, including Smart SEO
semalt.net
Also called by 7 other listings, including Smart SEO

AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.

Publishers can request a review.

Findings

Semalt tag list can disable other installed SEO extensions

Accepting the Semalt popup on a Google results page tells the background worker to disable matching SEO extensions, using a list from ext.semalt.com/api/simulator/tags and the Chrome management permission to turn them off.

Severity
Medium unwanted
Type
Unexpected
CWE
CWE-506
Source
Dynamic sandbox
What actually happens
You did this

The user accepts the Semalt popup.

The extension did this

The extension stores the accepted state, fetches a Semalt tag list, and disables installed SEO extensions whose IDs appear in that list.

Captured request
GEThttps://ext.semalt.com/api/simulator/tags
Fields involved in the request and follow-up action
  • Browser storage state
    setSeoExtDisabledSEMALT=true

    Records that the Semalt prompt was accepted before the extension asks the background worker to disable matching SEO extensions.

Semalt SEO extension reports every site you visit, logged with a persistent ID

On every page you visit, the extension sends the site's hostname to Semalt's ranking API, then logs that request to Semalt's servers tagged with an ID that stays the same across your whole browsing session.

Severity
Medium unwanted
Type
Unexpected
CWE
CWE-359
Source
Dynamic sandbox
What actually happens
You did this

You navigate to any website.

No interaction with the extension itself is required.

The extension did this

The extension requests a Semalt search-ranking score for that site's hostname, then reports the request to Semalt's logging endpoint.

This happens on every page load and again if you refocus the tab without a cached score.

Captured request
GEThttps://semalt.net/api/v1/serp/rank/?site=www.wikipedia.org&se=1&sub=0&_source=ext

Returns a worldwide search-ranking score for the submitted hostname.

Captured request
POSThttps://ext.semalt.com/api/simulator/api-request-logs
Body
{  "uid": "e6c79647-fae6-4dea-8752-d205109f563a",  "path": "https://semalt.net/api/v1/serp/rank/",  "response_status": "200",  "response_time": "312",  "details": "{\"site\":\"www.wikipedia.org\",\"se\":1,\"sub\":0}",  "extension_id": 1}
What each visit-report contains
  • The site you visited
    www.wikipedia.org

    The exact hostname of the page you just loaded, sent to Semalt's ranking API.

  • Your extension ID
    e6c79647-fae6-4dea-8752-d205109f563a

    A UID generated once and stored locally, then reused on every request so Semalt can tie your visits together over time.

  • Request outcome
    response_status: 200, response_time: 312

    The HTTP status and response time of the rank lookup, included in the log entry.

  • Query details
    {"site":"www.wikipedia.org","se":1,"sub":0}

    The search-engine and ranking parameters sent with the lookup, echoed back into the log.

The code that does this

The hostname of every page you load is used as the rank-lookup key

Readable version

Renamed equivalent of the snippets above

// content script, runs on document_end for <all_urls>const currentHostname = window.location.hostname;const pageState = { domain: currentHostname, semaltRankScore: null };function fetchSemaltRank(hostname) {  return axiosClient.get("https://semalt.net/api/v1/serp/rank/", {    params: { site: hostname, se: 1, sub: 0 }  }).then(resp => resp.data.result[/* latest date key */].rank_worldwide);}fetchSemaltRank(currentHostname).then(rank => { pageState.semaltRankScore = rank; });window.addEventListener("focus", () => {  if (pageState.semaltRankScore == null) fetchSemaltRank(currentHostname);});// axios request interceptor, before every semalt.net/ext.semalt.com callasync function attachRequestId(config) {  let uid = await localStorage.getValue("SEMALTuniqueID");  if (!uid) { uid = generateUuid(); await localStorage.setValue("SEMALTuniqueID", uid); }  config.metadata = { startTime: new Date(), requestId: uid };  return config;}// axios response interceptoraxiosClient.interceptors.response.use(response => {  const logEntry = {    uid: response.config.metadata.requestId,    path: response.config.url,    response_status: String(response.status),    response_time: String(new Date() - response.config.metadata.startTime),    details: JSON.stringify(response.config.params)  };  chrome.runtime.sendMessage({ command: "sendLog", logData: logEntry });  return response;});// background.js: forwards every log entry to Semalt's own serverchrome.runtime.onMessage.addListener((message, sender, sendResponse) => {  if (message.command === "sendLog") {    fetch("https://ext.semalt.com/api/simulator/api-request-logs", {      method: "POST",      headers: { "Content-Type": "application/json" },      body: JSON.stringify(message.logData)    }).then(r => r.json()).then(data => sendResponse({ status: "success", data }));    return true;  }});
Where your browsing hostnames go
    • semalt.net

    Receives the hostname of every site you load, used to return a search-ranking score for that site.

    • ext.semalt.com

    Receives a log of each rank request, including the hostname queried and your persistent extension UID.

What it can do

Permissions this extension asks for, as declared in version 7.5.0. Asking for a permission is not a finding on its own - it is what the extension can do if it chooses to.

  • Read and change your data on semalt.com

    *://*.semalt.com/*

  • Read and change your data on semalt.global

    *://*.semalt.global/*

  • Read and change your data on g.cn

    *://*.g.cn/*

  • Read and change your data on google.ad

    *://*.google.ad/*

  • Read and change your data on google.ae

    *://*.google.ae/*

  • Read and change your data on google.al

    *://*.google.al/*

  • Read and change your data on google.am

    *://*.google.am/*

  • Read and change your data on google.as

    *://*.google.as/*

  • Read and change your data on google.at

    *://*.google.at/*

  • Read and change your data on google.az

    *://*.google.az/*

  • Read and change your data on google.ba

    *://*.google.ba/*

  • Read and change your data on google.be

    *://*.google.be/*

  • Read and change your data on google.bf

    *://*.google.bf/*

  • Read and change your data on google.bg

    *://*.google.bg/*

  • Read and change your data on google.bi

    *://*.google.bi/*

  • Read and change your data on google.bj

    *://*.google.bj/*

  • Read and change your data on google.bs

    *://*.google.bs/*

  • Read and change your data on google.by

    *://*.google.by/*

  • Read and change your data on google.ca

    *://*.google.ca/*

  • Read and change your data on google.cc

    *://*.google.cc/*

  • Read and change your data on google.cd

    *://*.google.cd/*

  • Read and change your data on google.cf

    *://*.google.cf/*

  • Read and change your data on google.cg

    *://*.google.cg/*

  • Read and change your data on google.ch

    *://*.google.ch/*

  • Read and change your data on google.ci

    *://*.google.ci/*

  • Read and change your data on google.cl

    *://*.google.cl/*

  • Read and change your data on google.cm

    *://*.google.cm/*

  • Read and change your data on google.co.ao

    *://*.google.co.ao/*

  • Read and change your data on google.co.bw

    *://*.google.co.bw/*

  • Read and change your data on google.co.ck

    *://*.google.co.ck/*

  • Read and change your data on google.co.cr

    *://*.google.co.cr/*

  • Read and change your data on google.co.id

    *://*.google.co.id/*

  • Read and change your data on google.co.il

    *://*.google.co.il/*

  • Read and change your data on google.co.in

    *://*.google.co.in/*

  • Read and change your data on google.co.jp

    *://*.google.co.jp/*

  • Read and change your data on google.co.ke

    *://*.google.co.ke/*

  • Read and change your data on google.co.kr

    *://*.google.co.kr/*

  • Read and change your data on google.co.ls

    *://*.google.co.ls/*

  • Read and change your data on google.co.ma

    *://*.google.co.ma/*

  • Read and change your data on google.co.mz

    *://*.google.co.mz/*

  • Read and change your data on google.co.nz

    *://*.google.co.nz/*

  • Read and change your data on google.co.th

    *://*.google.co.th/*

  • Read and change your data on google.co.tz

    *://*.google.co.tz/*

  • Read and change your data on google.co.ug

    *://*.google.co.ug/*

  • Read and change your data on google.co.uk

    *://*.google.co.uk/*

  • Read and change your data on google.co.uz

    *://*.google.co.uz/*

  • Read and change your data on google.co.ve

    *://*.google.co.ve/*

  • Read and change your data on google.co.vi

    *://*.google.co.vi/*

  • Read and change your data on google.co.za

    *://*.google.co.za/*

  • Read and change your data on google.co.zm

    *://*.google.co.zm/*

  • Read and change your data on google.co.zw

    *://*.google.co.zw/*

  • Read and change your data on google.com.af

    *://*.google.com.af/*

  • Read and change your data on google.com.ag

    *://*.google.com.ag/*

  • Read and change your data on google.com.ai

    *://*.google.com.ai/*

  • Read and change your data on google.com.ar

    *://*.google.com.ar/*

  • Read and change your data on google.com.au

    *://*.google.com.au/*

  • Read and change your data on google.com.bd

    *://*.google.com.bd/*

  • Read and change your data on google.com.bh

    *://*.google.com.bh/*

  • Read and change your data on google.com.bn

    *://*.google.com.bn/*

  • Read and change your data on google.com.bo

    *://*.google.com.bo/*

  • Read and change your data on google.com.br

    *://*.google.com.br/*

  • Read and change your data on google.com.bz

    *://*.google.com.bz/*

  • Read and change your data on google.com.co

    *://*.google.com.co/*

  • Read and change your data on google.com.cu

    *://*.google.com.cu/*

  • Read and change your data on google.com.cy

    *://*.google.com.cy/*

  • Read and change your data on google.com.do

    *://*.google.com.do/*

  • Read and change your data on google.com.ec

    *://*.google.com.ec/*

  • Read and change your data on google.com.eg

    *://*.google.com.eg/*

  • Read and change your data on google.com.et

    *://*.google.com.et/*

  • Read and change your data on google.com.fj

    *://*.google.com.fj/*

  • Read and change your data on google.com.gh

    *://*.google.com.gh/*

  • Read and change your data on google.com.gi

    *://*.google.com.gi/*

  • Read and change your data on google.com.gt

    *://*.google.com.gt/*

  • Read and change your data on google.com.hk

    *://*.google.com.hk/*

  • Read and change your data on google.com.jm

    *://*.google.com.jm/*

  • Read and change your data on google.com.kh

    *://*.google.com.kh/*

  • Read and change your data on google.com.kw

    *://*.google.com.kw/*

  • Read and change your data on google.com.lb

    *://*.google.com.lb/*

  • Read and change your data on google.com.lc

    *://*.google.com.lc/*

  • Read and change your data on google.com.ly

    *://*.google.com.ly/*

  • Read and change your data on google.com.mm

    *://*.google.com.mm/*

  • Read and change your data on google.com.mt

    *://*.google.com.mt/*

  • Read and change your data on google.com.mx

    *://*.google.com.mx/*

  • Read and change your data on google.com.my

    *://*.google.com.my/*

  • Read and change your data on google.com.na

    *://*.google.com.na/*

  • Read and change your data on google.com.nf

    *://*.google.com.nf/*

  • Read and change your data on google.com.ng

    *://*.google.com.ng/*

  • Read and change your data on google.com.ni

    *://*.google.com.ni/*

  • Read and change your data on google.com.np

    *://*.google.com.np/*

  • Read and change your data on google.com.om

    *://*.google.com.om/*

  • Read and change your data on google.com.pa

    *://*.google.com.pa/*

  • Read and change your data on google.com.pe

    *://*.google.com.pe/*

  • Read and change your data on google.com.pg

    *://*.google.com.pg/*

  • Read and change your data on google.com.ph

    *://*.google.com.ph/*

  • Read and change your data on google.com.pk

    *://*.google.com.pk/*

  • Read and change your data on google.com.pr

    *://*.google.com.pr/*

  • Read and change your data on google.com.py

    *://*.google.com.py/*

  • Read and change your data on google.com.qa

    *://*.google.com.qa/*

  • Read and change your data on google.com.sa

    *://*.google.com.sa/*

  • Read and change your data on google.com.sb

    *://*.google.com.sb/*

  • Read and change your data on google.com.sg

    *://*.google.com.sg/*

  • Read and change your data on google.com.sl

    *://*.google.com.sl/*

  • Read and change your data on google.com.sv

    *://*.google.com.sv/*

  • Read and change your data on google.com.tj

    *://*.google.com.tj/*

  • Read and change your data on google.com.tr

    *://*.google.com.tr/*

  • Read and change your data on google.com.tw

    *://*.google.com.tw/*

  • Read and change your data on google.com.ua

    *://*.google.com.ua/*

  • Read and change your data on google.com.uy

    *://*.google.com.uy/*

  • Read and change your data on google.com.vc

    *://*.google.com.vc/*

  • Read and change your data on google.com.vn

    *://*.google.com.vn/*

  • Read and change your data on google.com

    *://*.google.com/*

  • Read and change your data on google.cv

    *://*.google.cv/*

  • Read and change your data on google.cz

    *://*.google.cz/*

  • Read and change your data on google.de

    *://*.google.de/*

  • Read and change your data on google.dj

    *://*.google.dj/*

  • Read and change your data on google.dk

    *://*.google.dk/*

  • Read and change your data on google.dm

    *://*.google.dm/*

  • Read and change your data on google.dz

    *://*.google.dz/*

  • Read and change your data on google.ee

    *://*.google.ee/*

  • Read and change your data on google.es

    *://*.google.es/*

  • Act on the current tab, but only after you click the extension

    activeTab

  • Run its own code inside the pages you visit

    scripting

  • See the address and title of every tab you have open

    tabs

  • Store data in your browser

    storage

  • See, disable and uninstall your other extensions, including your security ones

    management

Where it sends data

Destinations our analysis observed Website Ranking and SEO Checker by Semalt contacting. Sending data somewhere is not a finding on its own - an extension that syncs your settings has to talk to its own server - but it is where your data can go, and who else it goes to.

  • ext.semalt.com

    Website Ranking and SEO Checker by Semalt sends data to ext.semalt.com. 2 other extensions we have analysed send data here.

  • semalt.net

    Website Ranking and SEO Checker by Semalt sends data to semalt.net. No other extension we have analysed sends data here.

Updated 30 September 2026npapojppkmfhefbokolngnomlgkkpcnc