Skip to content
ForgePlug — Logo
developer100% Browser-BasedNo SignupUpdated Jul 2026

URL Toolkit

The most comprehensive URL workspace available. Analyze every part of a URL with live visual inspection. Encode and decode with auto-detect. Edit query parameters in a visual table. Build URLs from components. Generate UTM marketing URLs. Validate URL structure with friendly error messages. Analyze security concerns. Generate QR codes. All processing happens entirely in your browser — nothing leaves your device.

Enter a URL to begin

·Drop a text file anywhere

Live URL Inspector

Every part of your URL, color-coded and clickable.

Enter a URL above to see its parts

Keyboard Shortcuts

Encode URLCtrl+Enter
Decode URLCtrl+Shift+Enter
ClearCtrl+L
Clear inputEsc

Related Tools

Other tools you might find useful.

Frequently Asked Questions

Should I use encodeURIComponent or encodeURI?
If you're encoding a single value that's going to become one query parameter (a return URL, a search term, anything with its own & or = in it), use encodeURIComponent — it escapes those characters so they're treated as data, not structure. Use encodeURI only when you're encoding an entire, already-structured URL and want to leave the / ? & # doing their normal job. Mixing these up is the most common cause of a URL that looks right but points somewhere wrong.
Why did my URL come back with %2520 instead of %20?
That's double-encoding — the URL passed through an encoding step twice, so the original %20 got its % re-encoded into %25. It usually happens when a URL crosses two systems that each apply their own encoding. Auto Detect in this tool flags it specifically, since it's easy to miss just by looking at it.
A redirect parameter I built is getting cut off at the ampersand — why?
The value you're passing (probably a full URL with its own query string) has an unencoded & in it, so the outer URL is reading that & as the start of a new parameter instead of part of your value. Run the inner URL through encodeURIComponent before embedding it, and it'll survive as one clean parameter.
Does anything here get sent to a server?
No — parsing, encoding, decoding, validation, and the security checks all run in your browser with plain JavaScript. The QR code generator is the same, using the qrcode library locally. Nothing about the URLs you paste in here leaves your device.
What's the difference between a fragment and a query parameter?
The fragment (after #) never gets sent to the server at all — it's purely client-side, used for in-page anchors or single-page-app state. Query parameters (after ?) are sent as part of the actual request. If you're trying to pass something to a backend and it's not showing up, check whether it accidentally ended up after a # instead of a ?.

encodeURIComponent vs encodeURI, and the bug that comes from mixing them up

Plus what actually happens when a query parameter value contains an ampersand.

This tool started as just a URL encoder, and grew into a full workspace because encoding a URL correctly is rarely the whole job — you also need to know why a link broke, or what a redirect parameter is actually pointing at, or whether a tracking URL is going to survive being pasted into a Slack message without mangling. Most of the traffic to this page is people debugging a URL that's already broken, not building one from scratch.

How it works

encodeURIComponent and encodeURI are the two JavaScript functions doing the actual work here, and mixing them up is the single most common source of broken URLs I see. encodeURIComponent escapes everything that isn't a plain letter, digit, or a small set of safe symbols — including &, ?, =, and /, which is exactly what you want when the value is going into a single query parameter, because those characters would otherwise be interpreted as URL structure instead of data. encodeURI is deliberately less aggressive: it leaves &, ?, =, and / alone because it assumes you're encoding a complete URL where those characters are doing their normal structural job. Run encodeURIComponent on a whole URL and you'll double-escape the slashes and break it; run encodeURI on a single parameter value that happens to contain an & and you'll silently split it into two parameters.

A real example

Say you're building a redirect URL where the return address is https://app.example.com/search?q=cats&dogs — note the ampersand inside the value itself. If you just concatenate that raw into https://example.com/login?returnTo=https://app.example.com/search?q=cats&dogs, the server sees returnTo, q, and dogs as three separate parameters, not one URL with an embedded query string — the destination gets mangled. Run the inner URL through encodeURIComponent first and you get returnTo=https%3A%2F%2Fapp.example.com%2Fsearch%3Fq%3Dcats%26dogs — now it's one clean parameter value that decodes back to the exact original URL on the other end.

Common mistakes

  • Double-encoding. Running a URL through encoding twice turns %20 into %2520. This happens constantly when a URL passes through two different systems that both encode it. The Auto-Detect feature in this tool flags double-encoding specifically because it's easy to miss visually.
  • Assuming query parameter order is preserved everywhere. Technically it usually is, but some CDNs and caching layers treat differently-ordered but otherwise-identical query strings as different cache keys, which can cause mysterious cache-miss issues. If you're debugging a caching problem, check whether parameter order is consistent across the URLs being generated.
  • Forgetting the fragment (#) never reaches the server. Anything after # is client-side only — if you're trying to pass data to a backend, it needs to be a query parameter before the #, not a fragment.

Frequently Asked Questions

Everything you need to know about encoding, decoding, and analyzing URLs

Should I use encodeURIComponent or encodeURI?
If you're encoding a single value that's going to become one query parameter (a return URL, a search term, anything with its own & or = in it), use encodeURIComponent — it escapes those characters so they're treated as data, not structure. Use encodeURI only when you're encoding an entire, already-structured URL and want to leave the / ? & # doing their normal job. Mixing these up is the most common cause of a URL that looks right but points somewhere wrong.
Why did my URL come back with %2520 instead of %20?
That's double-encoding — the URL passed through an encoding step twice, so the original %20 got its % re-encoded into %25. It usually happens when a URL crosses two systems that each apply their own encoding. Auto Detect in this tool flags it specifically, since it's easy to miss just by looking at it.
A redirect parameter I built is getting cut off at the ampersand — why?
The value you're passing (probably a full URL with its own query string) has an unencoded & in it, so the outer URL is reading that & as the start of a new parameter instead of part of your value. Run the inner URL through encodeURIComponent before embedding it, and it'll survive as one clean parameter.
Does anything here get sent to a server?
No — parsing, encoding, decoding, validation, and the security checks all run in your browser with plain JavaScript. The QR code generator is the same, using the qrcode library locally. Nothing about the URLs you paste in here leaves your device.
What's the difference between a fragment and a query parameter?
The fragment (after #) never gets sent to the server at all — it's purely client-side, used for in-page anchors or single-page-app state. Query parameters (after ?) are sent as part of the actual request. If you're trying to pass something to a backend and it's not showing up, check whether it accidentally ended up after a # instead of a ?.

Tool Overview

A closer look at URL Toolkit — how it works, who it's for, and where it fits in your workflow.

A URL is more than a link — it's a structured document with a scheme, host, path, query parameters, and fragment, and each part has rules. The URL Toolkit analyzes any URL and renders its anatomy visually, so you can see at a glance which components are present, what each query parameter does, and whether the URL is well-formed. The encode/decode module handles percent-encoding with automatic direction detection, and the query parameter editor presents your parameters in a table you can edit, add, or remove without hand-editing a string.

Marketers and developers alike will find the UTM builder useful: assemble campaign URLs with utm_source, utm_medium, utm_campaign, and friends in a structured form, then copy the final link — or generate a QR code for it on the spot. The security analyzer flags common issues like plain-HTTP links, exposed credentials, or suspicious hosts, helping you audit links before you click or share them.

URL inspection frequently involves private or unpublished links, so the toolkit processes everything locally in your browser. Paste a link from staging, a draft campaign, or an internal tool — nothing is transmitted anywhere.

Key Features

Everything you get with this tool, at a glance.

Full URL Anatomy

Visually inspect scheme, host, path, query, fragment, and port.

Encode & Decode with Auto-Detect

Percent-encode or decode URLs and query strings without choosing a direction.

Query Parameter Editor

Add, edit, and remove parameters in a table — no hand string surgery.

UTM Campaign Builder

Generate clean marketing URLs from a structured form.

Security Analyzer

Flag HTTP links, exposed credentials, and suspicious hosts.

QR Generation

Turn any URL into a scannable QR code without leaving the page.

How to Use URL Toolkit

Get from zero to done in four quick steps — no account, no learning curve.

  1. Paste a URL

    Drop in any link — the anatomy view breaks it into its parts immediately.

  2. Edit query parameters

    Use the table editor to add, remove, or tweak parameters, then copy the rebuilt URL.

  3. Build a UTM link

    Fill the campaign form and copy a ready-to-use tracking URL.

  4. Analyze security

    Run the security analyzer to catch HTTP links or embedded credentials before sharing.

Practical Examples

Real input and output pairs so you know exactly what to expect.

Encode a URL with spaces

Input

https://example.com/search?q=forge plug&lang=en

Output

https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dforge%20plug%26lang%3Den

Decode a percent-encoded query

Input

https://example.com/?q=hello%20world%20%F0%9F%9A%80

Output

q = hello world 🚀

Parse query parameters

Input

https://shop.com/products?color=red&size=m&in_stock=1

Output

color=red · size=m · in_stock=1

Guides & Articles

Learn how to get the most out of this tool with our in-depth guides.

Part of Developer Essentials

Was this tool helpful?

Your feedback helps us improve URL Toolkit for everyone.

Share this tool

Share
Runs in your browser100% privateNo data uploaded