# Skip Redirect hunts for the real destination inside a wrapper URL and goes there first

> webextension-skip-redirect is a Firefox add-on that looks for an embedded URL in the address of an intermediary page and navigates straight to it, skipping the redirect hop. It ships with a no-skip list, an opt-in skip list and a no-skip parameter list, because the naive default of checking every URL breaks sites that rely on redirect parameters.

**sblask-webextensions/webextension-skip-redirect** — Some web pages use intermediary pages before redirecting to a final page. This add-on tries to extract the final url from the intermediary url and goes there straight away if successful.

- Repository: https://github.com/sblask-webextensions/webextension-skip-redirect
- Website: https://addons.mozilla.org/firefox/addon/skip-redirect/
- Stars: 587 · Forks: 40
- Language: JavaScript
- License: MIT
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/sblask-webextensions-webextension-skip-redirect

## The problem is a URL that contains another URL

Some web pages use intermediary pages before redirecting to a final page. Skip Redirect is a Firefox extension that tries to extract the final URL from the intermediary URL and goes there straight away if successful.

The example in the README shows the shape of the problem. A URL such as https://www.google.com/chrome/?or-maybe-rather-firefox=https%3A%2F%2Fwww.mozilla.org/ carries the real destination as a percent-encoded query parameter, and the site shows you a comparison page rather than redirecting you. The extension's job is to notice that pattern and act on it.

That is a narrow, specific job, and the narrowness is the design. The extension is not a redirect blocker in the ad blocker sense, and it is not a general URL rewriting tool. It looks for an embedded URL in the current page's address, and when it finds one, it navigates to that URL instead of waiting for the site's own redirect.

The README also asks for feedback in a particular direction. If you find websites where this fails, or where you get redirected in a weird way when the add-on is enabled but not when it is disabled, that is worth reporting, and the GitHub repository is the place to do it. Patches are welcome.

## Three lists decide what the extension is allowed to touch

The preference surface is where the real design of this extension lives, and the README describes three separate mechanisms.

By default, all URLs except the ones matching a no-skip-urls-list are checked for embedded URLs, and redirects are skipped. The README immediately flags the cost of that default: depending on the pages visited, this can cause problems, and the example given is a dysfunctional login.

That failure mode is worth understanding. A login flow that redirects through a URL with a query parameter can be broken by an extension that rewrites that parameter, because the site was never expecting to be navigated to directly. So the default is permissive and the escape hatches are there to tighten it.

The second mechanism is skip-urls-list mode, where the behaviour inverts. Instead of checking everything except a blacklist, only the URLs explicitly added to the skip-urls-list have their redirects skipped, and everything else is left alone. This is the conservative setting, and it is the one to use if you only care about a few sites.

The third mechanism is finer grained still. Some websites use multiple URL parameters, for example www.example.com/page-we-want-to-skip?first=www.want-to-go-here.com&second=www.do-not-care-about-this-url.com. Skip Redirect does not know which parameter is the right one, so the no-skip-parameter-list can be edited. Adding first would skip to the URL of second and vice versa, and adding both first and second would cause no skipping at all, since the extension would find two candidates and give up.

That last behaviour is a sensible tie-break for an ambiguous case, and it is also the reason the parameter list exists. The preferences are reachable from the add-on's options page or by clicking the toolbar icon.

## The source is a background script plus a bundled public suffix list

The repository layout is small and tells you how the extension is put together. There is a background.js at the root, which is where a Firefox WebExtension does the work that is not tied to a page. Alongside it sit util.js and url.js for the shared logic, option-defaults.js for the default preference values, and an options/ directory for the options page. The _locales/ directory holds the translations, and manifest.json declares the extension itself.

Two files are worth a second look because they are large and self-contained. psl.js and pslrules.js are a bundled copy of the public suffix list, and base64.js is a bundled base64 implementation. Both exist for the same reason, which is that an extension should not depend on network access or on a host permission to do URL parsing. Since the whole point of this extension is to inspect and rewrite URLs, shipping its own parsing primitives means it can do that without asking the user for broad permissions.

The build and test tooling is web-ext, the official Mozilla command line tool for extension development. The package.json scripts show the loop a contributor works in. The firefox script prepares a Firefox source directory with a version of 0.0.0 and runs it with web-ext run and the devtools flag, and the german script does the same but sets the locale preferences to de-DE with intl.locale.matchOS disabled, which is how you test the translated strings. The test script is tape over the files in test/, and the e2e script prepares Firefox and runs the files in e2e/ instead.

The e2e path uses geckodriver and selenium-webdriver, both listed as dev dependencies, so the end to end tests drive a real browser rather than a stubbed environment. There is also a bin/ directory with the prepare-firefox.sh script the npm scripts call.

## Releases come from the packaging pipeline, not from the version field

The package.json version field reads x.x.x, which is a placeholder rather than a mistake. The version is filled in during the release build, and the extension's real published version is tracked separately on the Mozilla Add-ons site, where the README's badge points.

The release history in the repository listing is Firefox-centric. Version 2.3.6 was published on 2022-03-11, 2.3.5 on 2021-03-27 and 2.3.4 on 2020-08-26. Those are the extension versions on the add-on site rather than npm package versions, and the gap to the present is worth noting.

The last push was on 2026-10-17, so the code is being worked on even though the published extension version is several years old. The repository also carries a renovate.json for dependency updates, a .pre-commit-config.yaml with a pre-commit badge in the README, an eslint.config.js, an .editorconfig, an .npmrc and a .rgignore for ripgrep, which is a hint about the search tooling used in development.

The licence is MIT, recorded in the package.json and with a LICENSE file at the root. A browser extension that rewrites navigation is the kind of component that ends up inside other people's browser profiles, and a permissive licence with an explicit file makes the terms easy to check, which is a licensing note rather than legal advice.

The privacy stance is short and absolute. The extension does not collect or send data of any kind to third parties, and the README makes no qualifications to that.

## Where the extension is the wrong tool

The obvious case is a site that uses a redirect parameter for something other than redirection. A login callback, a checkout flow that encodes state in the query string, a link shortener that expects to serve an interstitial, all of these look like a URL containing a URL. The extension cannot tell them apart, and the README's own example of a dysfunctional login is that failure mode named outright.

There is a second, less obvious case. The extension only helps when the destination URL is present in the address of the page you landed on. It does nothing for a redirect that happens server side with no trace in the URL, such as a plain HTTP 301 or 302 to a canonical path, or for a redirect embedded in the page body as a meta refresh or a script. The extension is aimed at the specific pattern of a URL parameter holding the destination, which is what search engines and browser vendors use to make a comparison or choice page, and that is a narrower set of sites than redirect handling in general.

The alternative to an extension is not really an alternative at all, it is doing it manually. The intermediate page usually has a link to the destination, so clicking it gets you there with one extra click, which is what happens with the add-on disabled. A userscript could do the same job more surgically, since it can inspect the page and rewrite the link rather than the navigation, and it would be scoped to the sites you name. The difference in approach is that the extension intercepts navigation for any URL it decides is a candidate, whereas a userscript runs only where you install it, which is the same trade the extension's own skip list mode is designed to give you.

If you want the redirect gone everywhere with no per site configuration, a browser that supports a proxy level rule, or a resolver that follows the parameter for you, does the same job without needing to know anything about which sites are safe.

## Conclusion

Adopt Skip Redirect if you keep hitting intermediary redirect pages on a handful of sites and want the extension to be conservative about which pages it touches, using the skip list mode. Do not adopt it with the default behaviour of checking every URL, because the README states plainly that this can cause problems such as a dysfunctional login, and a URL parameter that looks like a redirect is indistinguishable from one that is not. Verify first which sites you actually want it to act on, that the no-skip parameter list covers the parameters your login flows use, and the last published extension version, which is 2.3.6, against the recency of the repository's last push.

## FAQ

### What does the Skip Redirect Firefox extension do?

It tries to extract the final URL from an intermediary URL and goes there straight away if successful. The README's example is a URL that carries the real destination as a percent-encoded query parameter, which would otherwise show you a comparison page rather than redirecting.

### Why can Skip Redirect break a login?

By default all URLs except those matching a no-skip-urls-list are checked for embedded URLs, and the README states that depending on the pages visited this can cause problems, for example a dysfunctional login. The no-skip-urls-list can be edited, and there is a skip-urls-list mode where only URLs you add manually are affected.

### How do I handle a URL with several possible redirect parameters?

Edit the no-skip-parameter-list. Skip Redirect does not know which parameter is the right one, so adding first would skip to the URL of second and vice versa, and adding both causes no skipping at all because the extension finds two candidates.

### Does Skip Redirect send any data?

No. The README states the extension does not collect or send data of any kind to third parties. The preferences, including the no-skip, skip and parameter lists, are reachable from the options page or by clicking the toolbar icon.

### How is Skip Redirect developed and tested?

It is a web extension built with web-ext, and the npm scripts prepare a Firefox source directory and run it with the devtools flag. Unit tests run with tape over the files in test/, and end to end tests run in a real browser through geckodriver and selenium-webdriver, with a separate script for testing the German locale.

## Sources

- [License: MIT](https://github.com/sblask-webextensions/webextension-skip-redirect/blob/main/LICENSE)
- [Project website](https://addons.mozilla.org/firefox/addon/skip-redirect/)
- [README](https://github.com/sblask-webextensions/webextension-skip-redirect/blob/main/README.md)
- [Releases](https://github.com/sblask-webextensions/webextension-skip-redirect/releases)
- [sblask-webextensions/webextension-skip-redirect on GitHub](https://github.com/sblask-webextensions/webextension-skip-redirect)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/sblask-webextensions-webextension-skip-redirect
