I have noticed that certain websites (e.g. Stack Exchange sites, Dell, etc.) are automatically added to my list of search engines in Google Chrome.

They even add a keyboard shortcut to their entry. Here are some examples:

  • Dell: Keyboard -> Dell.com
  • Stack Exchange Web masters: Keyboard -> webmasters.stackexchange.com
  • Reuters: Keyboard -> reuters.com

Q1: Is this the default behavior in Chrome? (to let websites add themselves to the list of search engines?)

Q2: Is it possible to disable this behavior in Chrome?

Note: I'm running the latest version of Chrome: 11.0.696.57 on Windows 7 64, and I only have one extension installed: Google URL shortener.

  • 30
    @ Sathya, Why? I want to have the flexibility to disable it. If your question is why would I disable something like this: the interface to edit search engines is not particularly good, and as the list grows it's hard tell which search engines I added manually and which ones were added automatically. It's also harder to find a particular entry within a large list. – Amelio Vazquez-Reina Apr 27 '11 at 17:41
  • 14
    @Sathya - Many reasons: * Convenience: Sometimes you want to search ABOUT a site, rather than ON that site. * Consistency: Randomly and silently adding new "search engines" causes unexpected behavior in the omnibox. * Privacy: Chrome does not inform you when it decides to add new "search engines," and they don't go away when you clear your browsing history. * Common courtesy: Shouldn't I be able to choose whether to enable this "feature" is enabled, or—failing that—at least choose to be informed when Chrome decides to add a site, so I can countermand this decision? – phenry Oct 28 '11 at 17:43

11 Answers 11

up vote 28 down vote accepted

Thanks to @10basetom's code and inspired by @shthed, I've released the Don't add custom search engines Chrome extension which does just that.

You'll find the source code here.

Let me know what you think!

  • 1
    @O'Rooney Thank you! I see some sites slip by the extension from time to time, but it's much better cleaning out a few search engines in a month than having to do an almost complete weekly "purge"... Cheers! – Greg Sadetsky Jul 14 '16 at 14:04
  • 3
    Does not actually work anymore: a lot of custom search engines still end up being added. – onnodb Dec 3 '17 at 19:11
  • 1
    @onnodb thanks for the note, I have unfortunately not had enough time to update the extension. – Greg Sadetsky Dec 7 '17 at 11:00
  • 1
    @onnodb, Greg, would you (or any others interested) please try out this fork? Check out, then load .../src as an unpacked extension. Let me know how it goes. Thanks! – cxw Mar 7 at 18:49
  • 3
    Small note that the extension has just been updated with a much improved detection/blocking algorithm, thanks to many efforts from a number of contributors! Give it a ago if it was not working well for you earlier. Cheers – Greg Sadetsky Mar 19 at 19:04

This was making me absolutely insane, so I found a hackish, but effective solution to the issue.

Chrome stores it's search engines in a simple sqlite3 database. I found that you can create a trigger when chrome goes to add the search engine that causes the database insert statement to be ignored.
Note that the search engines are still kept in memory, so they will still show up in the list until the browser is restarted. However you wont have to clear them out all the time, and so if you want to add your own search engines, you won't have to worry about accidentally deleting them (yes, manually adding search engines will still work).

First you must locate the Web data file.

  • Mac OS X: ~/Library/Application Support/Google/Chrome/Default/Web Data

  • XP: C:\Documents and Settings\<username>\Local Settings\Application Data\Google\Chrome\User Data\Default\Web Data

  • Vista/7: C:\Users\<username>\AppData\Local\Google\Chrome\User Data\Default\Web Data

  • Linux: ~/.config/google-chrome/Default/Web Data or ~/.config/chromium/Default/Web Data

Then open it with an sqlite3 editor.

Chrome must be shut down at this point.

The official sqlite web site has a download page with a pre-compiled command line utility for the various operating systems. Though any editor capable of working with sqlite3 databases will work.

For the command line utility, use a command such as the following (don't forget to escape or quote the space in the file name):

sqlite3 /path/to/Web\ Data

Add the trigger.

CREATE TRIGGER no_auto_keywords BEFORE INSERT ON keywords WHEN (NEW.originating_url IS NOT NULL AND NEW.originating_url != '') BEGIN SELECT RAISE(IGNORE); END;

You're done. Close the editor and start chrome back up.


The way it works is that when chrome goes to add auto-add a search engine to the keywords table, chrome sets the originating_url field to the web site it came from. The trigger basically looks for any inserts with a non-empty originating_url field, and issues a RAISE(IGNORE) which causes the statement to be silently skipped.
Manually added search engines don't have an originating_url, and so the trigger allows them to be added.

  • 1
    After trying a few editors out, SQLiteStudio my favorite. No way am I related to this product. Just a useful tool I found after some searching. – mateuscb Mar 14 '14 at 21:55
  • 1
    This is great and it works. However, for me, Chrome still added search engines, not in the database, but in another folder, "Sync Data Backup". Disable write permissions for that folder in Windows/Linux and it will be gone for good. – Martin Hansen Sep 13 '14 at 10:01
  • This doesn't appear to work anymore, at least in Chrome v47beta. After restarting Chrome, the auto-added search engine is still in the list, although typing the keyword doesn't trigger it anymore. – thdoan Nov 6 '15 at 3:34
  • FYI: 1/ make a copy of this file first in case you mess it up :) 2/ on Mac 10.11.4 (El Capitan) I was unable to open the file/database with sqlitebrowser.app ("Error: unable to open database "~/Library/Application Support/Google/Chrome/Default/Web Data": unable to open database file). 3/ if you try and run the CREATE TRIGGER command whilst Chrome is open, you get Error: database is locked so exit Chrome first. 4/ once Chrome was closed, this opened the database successfully worked: /Volumes/Macintosh\ HD/Applications/sqlite3 ./Web\ Data (in Terminal, when in specified directory) HTH – sming Apr 7 '16 at 12:26
  • I tried delete from keywords where id > 2; and google just syncs them back from server. I guess it's too late after I already have thousands of searchengines installed. – Qi Fan Oct 18 '16 at 22:58

There are two ways to do this:

  1. Add this userscript to Tamper Monkey:

    var elOpenSearch = document.querySelector('[type="application/opensearchdescription+xml"]');
    if (elOpenSearch) elOpenSearch.remove();
    
  2. If you're not a regular Tamper Monkey user and don't feel like wasting 15-20 MB of RAM just to load the Tamper Monkey extension for this purpose, then you can roll your own super lightweight extension that won't consume any memory. Instructions are provided below.

How to create your own extension to remove the OpenSearch <link> tag and prevent Chrome from auto-adding search engines:

  1. Create a folder where you will be putting the extension files.

  2. Inside this folder, create two text files named manifest.json and content.js containing the code provided below.

    manifest.json

    {
      "manifest_version": 2,
      "name": "Disable OpenSearch",
      "version": "1.0.0",
      "description": "Remove the OpenSearch <link> tag to prevent Google Chrome from auto-adding custom search engines.",
      "content_scripts": [
        {
          "matches": ["<all_urls>"],
          "js": ["content.js"]
        }
      ],
      "permissions": [
        "http://*/*",
        "https://*/*"
      ]
    }
    

    content.js

    var elOpenSearch = document.querySelector('[type="application/opensearchdescription+xml"]');
    if (elOpenSearch) elOpenSearch.remove();
    
  3. In Chrome, go to chrome://extensions/ (enter this into the URL bar).

  4. Enable Developer Mode.

  5. Click on 'Load unpacked extension', select the folder you created in step 1, and click 'OK'.

Congratulations! Now Google Chrome should be a little less annoying to use :-).

Limitation: This solution is not 100% reliable. If you go to a URL that contains a search parameter (e.g., https://cdnjs.com/#q=fastclick), then in rare cases a custom search engine will still be added. I suspect this is because Chrome can parse the OpenSearch <link> tag before the userscript or extension has a chance to remove it from the DOM.

  • 2
    I'm surprised nobody has posted this as an official extension to the store, seems like it would be popular. Ideally I'd like an extension to ask me before adding a search engine, or have an icon in the address bar that lets me add it, just like RSS feeds. – ryanmonk Feb 21 '16 at 4:27
  • 7
    Thanks for the great code and @shthed thanks for the inspiration! I've just released a Google Chrome Extension which does just that. You can find it here. Source code here. Let me know what you think! :-) – Greg Sadetsky Mar 31 '16 at 18:03
  • @GregSadetsky Post this as an answer and we could vote for it :) – O'Rooney Jul 12 '16 at 4:51
  • 2
    @O'Rooney thanks, just did :-) – Greg Sadetsky Jul 12 '16 at 14:09
  1. Yes, this is by design.
  2. No, there's no way to disable this.
  • 1
    I love this answer. This is simple but informative – nXqd May 9 '12 at 14:03
  • 7
    Yet there are ways to disable it, as other answers explain :) – Enrico Mar 11 '17 at 14:25
  • 4
    "Yes, this is by design." It's a poor and improper design to automatically add things to a system without the users input on the matter. Malicious websites could easily take advantage of this. "No, there's no way to disable this." Obviously there is, when it is software, there is always a way. Being lazy and saying there isn't, is not a solution. This answer should be removed, and the writer warned. – Alex Summers Sep 26 '17 at 23:18

Here a somewhat hacky workaround which works just fine for me. Just rename the search alias to something cryptic like "§$%!/()&/". While the search engine is still there you won't see it again, ever. Pretty annoying if you can't google for "jenkins" because chrome forces you to search in jenkins.

  • Seriously - crazy annoying. Thanks for the tip. – TJ Biddle Jun 3 '13 at 23:06
  • 2
    It does this to me for jenkins, jira, and confluence - It drives me absolutely crazy that I can not initiate a general search from my address bar for anything related to these three. This, is by far the best and only working workaround I have seen. Cheers. – Matt Clark Aug 4 '15 at 22:35
  • 1
    @MattClark jira exactly! I want to search about jira, not in it! – ErikE Sep 23 '15 at 18:22
  • How is it behaving in your case? For me, to trigger the search on site, I have to type its keyword into omnibar a press Tab. Then it changes into the on site search and I can continue to type the search string. If I want to search just the keyword or a string containing the keyword, I type the keyword, Space, rest of the search string and Enter and I'm searching using the default search engine. So it doesn't interfere with each other. Just use the Space after the keyword to search using the default search engine and the Tab to search on site. – Dawid Ferenczy Dec 12 '16 at 16:37
  • @DawidFerenczy: That's not how it works for the rest of us. A space still uses that search engine. I type in git, then a space and it instantly changes to use git's search engine (which I've removed countless times). – Gerrat Apr 24 '17 at 18:30

Try using this simple userscript:

// ==UserScript==
// @name       Block Opensearch XML specs
// @namespace  *
// @version    0.3
// @description  Block opensearch xml links
// @match      *
// @copyright  2012+, Christian Huang
// ==/UserScript==

var i;
var val;
var len;
var opensearches;

opensearches = document.getElementsByTagName('link');
len = opensearches.length;
for (i = 0; i < len;i++) {
    val = opensearches[i].type;
    if ( val == "application/opensearchdescription+xml") {
        opensearches[i].parentNode.removeChild(opensearches[i]);
    }
}
  • 1
    where do add this script? or execute it? – mateuscb Mar 14 '14 at 21:23
  • 2
    @mateuscb You can get it from here. Then just drop the script in the extensions settings page in chrome, chrome://extensions/. – Victor Häggqvist May 14 '14 at 14:39
  • This. Is. Awesome. I needed to create a dummy manifest.json (as per this SO answer and install it via dev mode (as an unpacked extension), but apart from that it worked like a treat. – womble Jun 11 '14 at 5:58
  • 1
    Or, you can use it in Tamper Monkey. If you're used to making modifications to websites, TM should be a must-have addon. – JasonXA Dec 28 '14 at 17:19
  • You can also use this one-liner: document.querySelector('[type="application/opensearchdescription+xml"]').remove(); (see my answer below). – thdoan Nov 6 '15 at 6:12

To quickly remove large numbers of search engines, browse to chrome://settings/searchEngines, hit Ctrl-Shift-J (Opt-Cmd-J on OSX) to enter the Javascript console, and paste this:

settings
    .SearchEnginesBrowserProxyImpl
    .prototype
    .getSearchEnginesList()
    .then(function (val) {
        val.others.sort(function (a, b) { return b.modelIndex - a.modelIndex; });
        val.others.forEach(function (engine) {
            settings
                .SearchEnginesBrowserProxyImpl
                .prototype
                .removeSearchEngine(engine.modelIndex);
        });
    });

You may need to paste and run this a few times to clear everything.

  • I had to copy/paste this about 10 times into the dev-console to remove the 100+ entries I had. Wish I knew how to turn it into a single-click bookmarklet. – jiggunjer Sep 7 '17 at 8:31
  • 1
    I modified it to sort the list in reverse first (based on modelIndex), since its value gets reset each time an entry gets deleted (so you usually end up deleting around half of the current list only) when working from top to bottom. When working from bottom to top, this issue does not occur. – alcohol Nov 7 '17 at 15:10
  • First one I saw that can do this in one run! Kudos. – bnieland Dec 22 '17 at 14:37
  • Worked in one run on my Windows 10, version 1709 installation of Chrome Version 64.0.3282.186 (Official Build) (64-bit). – JosephHarriott Mar 2 at 5:53

If I'm understanding what you're describing correctly, then this isn't the websites doing anything at all. Rather, Chrome itself identifies search boxes on websites and then itself adds those to its list of search options in the omnibar.

A1: Yes, this is default behavior, but it's not the websites adding themselves, it's Chrome adding the websites.

A2: I do not believe you can disable this behavior, however you can remove search engines by going to the tool menu -> Options -> Manage Search Engines; they will appear under "Other Search Engines". You may be able to specify that one should not be re-added when you remove it, I'm not sure -- I happen to like this feature, so I'm not going to try removing them.

  • Thanks @Kromey, That's a good point. I just updated the question to reflect your comment. – Amelio Vazquez-Reina Apr 27 '11 at 17:49
  • This answer is incorrect, websites do effectively add themselves to Chrome as they use what is called an OpenSearch description document to enable Chrome to add their website's search engine to Chrome's list of search engines your browser can interface with. – Marcel Jun 11 '15 at 12:01
  • @Marcel OpenSearch merely lets sites describe their search feature. It still requires the browser to act upon that. Therefore this is not incorrect, I just didn't include the technical spec that's being used to "...[identify] search boxes on websites..." in my answer, as I felt it would have complicated an otherwise-simple matter -- the exact mechanism of how the browser finds a search box isn't relevant to the average user, only to webmasters who want theirs to be added. – Kromey Jun 11 '15 at 16:35

One workaround I've found for this is to acquire the habit of starting all my searches with a space. If you type ・Splunk median (where represents the space character), Chrome will perform a Google search on Splunk median.

  • 2
    Starting the search with a question mark (?) will also use your default search engine. – Ari May 30 '14 at 2:07
  • Nice! I like that better than the space. – Jun-Dai Bates-Kobashigawa May 30 '14 at 14:34
  • 1
    For me it didn't work. On Chrome 39, Win 7, typing spacekeyword didn't bring up the search interface. However, your solution was useful elsewhere, in naming. If I want my defined searches to appear on top of the automated ones, one space in front of the name and presto. All automated search engines go below and now it's easier to manage / remove them. – JasonXA Dec 28 '14 at 17:21
  • just press ctrl+k to get that behavior. – jiggunjer Sep 7 '17 at 8:25

<-- Background -->

I have an alternate, less-intrusive idea for you here (at least if you're running an ad blocker, as so many of us are for our own sanity/safety). I like using existing extensions/scripts as much as possible to avoid the bloat of a whole extension for just one feature (worst-case scenario) so this solution works under this principle.

Adblock, and its variants/successors (uBlock is my weapon of choice), have the ability to block web page elements, including <link> elements, which is used for autodiscovery of OpenSearch Descriptions (OSDs), the XML files that contain the information which permits auto-adding search engines and causes us these headaches. I say "permits" because it's hardly mandatory, as, so far as my research has shown, Firefox simply reads this information and makes it available for easy addition under the Search Engines dropdown box, rather than quietly auto-adding it like Chrome does.

The use of the feature is described in the Opensearch specifications in multiple places:

http://www.opensearch.org/Specifications/OpenSearch/1.1#Autodiscovery_in_RSS.2FAtom (ignore the specific subtltle of this section for our purposes as it's just an example of it in use)


<-- The Solution -->

As it states that OpenSearch Descriptions (OSDs) have a unique type, we can filter them out with the following AdblockPlus/uBlock rule:

##link[type="application/opensearchdescription+xml"]

I've tested this and the rule shows the correct match on my test sites (filehippo.com etc) and the search engines are no longer auto-adding, so I believe this is a full solution.


A quick note on the history I've found behind this: Chromium's engineers have labeled this "WontFix" several times over the years (a power-user disable option/flag was requested multiple times) stating that this is considered a niche issue since the feature is "generally useful", their stance is that niche issues should be solved by extensions or 3rd-party scripts rather than by the devs adding countless flags and the like to cater to all whims, so basically what we're doing here is just in line with their preference and keeps it nice and manageable.

Best of luck! If anyone else tries this let us/me know how it works!

  • 1
    This didn't work for me (try searching on cdnjs.com). I've come to the conclusion that there is no 100% reliable solution :( – thdoan Nov 6 '15 at 3:46
  • This isn't working for me either - if I search on 4inkjets.com it gets added as a search engine (strangely, I cannot find a application/opensearchdescription+xml link on the page.) – Ivan Kozik Sep 26 '17 at 23:58

You can avoid using or creating extensions and do this yourself in the browser's JavaScript console. Just browse to chrome://settings/searchEngines and hit F12 to open the Inspect panel. Paste this into the console and press Enter:

Array.prototype.forEach.call(document.querySelectorAll('#other-search-engine-list .row-delete-button'), function(el) { el.click(this); })

Sometimes it takes a few tries to get all the entries, so you may have to do it more than once to get rid of all of them.

  • When you find that the same answer is a solution to more than one question, consider whether one of the questions is a duplicate of the other. If so, flagging it as a duplicate is a better solution than repeating the answer because it allows the questions to be linked, providing access to more answers. – fixer1234 Dec 10 '16 at 1:50
  • You have to hover your mouse over the list to make this work, else the querySelectorAll returns an empty array. In my case, the deletion took about 8 minutes(!), and you have to hover your mouse over that list the whole time, else there are no delete buttons to use. Oh, and I love you for that snippet. Saved me a lot of nerves. ;) – xpac May 4 '17 at 10:25

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.