In short: what does a URL encoder do?
A URL encoder converts characters that are unsafe or reserved in a web address — spaces, &, ?, accents, emoji — into percent-encoded form (a space becomes %20) so the URL travels safely through browsers, servers and APIs. A URL decoder reverses it. This tool also parses URLs into their parts, edits query parameters, builds UTM campaign links, strips tracking parameters, scores URLs for SEO & security, and processes URLs in bulk — all 100% in your browser, with nothing uploaded.
Encode & decode
Component and full-URL percent-encoding — Unicode and emoji safe.
Parser & analyzer
Break any URL into parts with domain, SEO and security analysis.
Query editor
Add, edit, sort and rebuild parameters; convert query ↔ JSON.
UTM builder
Generate correctly-formatted, trackable campaign links.
Tracking cleaner
Strip utm_*, fbclid, gclid and dozens more for clean links.
100% private
Everything runs in your browser. Your URLs are never uploaded.
What is URL encoding?
URL encoding, formally called percent-encoding, is the mechanism that lets a URL carry characters it could not otherwise contain. A URL is restricted to a small, safe set of ASCII characters; anything outside that set — a space, an ampersand, a question mark used as data, an accented letter, an emoji — must be converted into a % followed by the two-digit hexadecimal value of each byte. So a space (byte 0x20) becomes %20, an ampersand (0x26) becomes %26, and the letter ä, which is two UTF-8 bytes, becomes %C3%A4.
The rules are defined by RFC 3986, the standard that governs URI syntax. It divides characters into three buckets: unreserved characters (A–Z a–z 0–9 - _ . ~) that never need encoding; reserved characters (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) that have special structural meaning and must be encoded when used as ordinary data; and everything else, which must always be encoded. This is why the same character can be legal in one position and illegal in another — a/ is meaningful in a path but must be encoded as %2F inside a parameter value.
Encoding exists for one reason: unambiguous transport. Without it, a server reading ?name=Tom & Jerry could not tell whether the & starts a new parameter or is part of the value. Percent-encoding removes that ambiguity, guaranteeing that what the sender meant is exactly what the receiver parses — across every browser, proxy, CDN and API gateway in between.
URL encoding vs URI encoding (encodeURI vs encodeURIComponent)
The terms URL encoding and URI encoding describe the same percent-encoding scheme — a URL is simply a kind of URI. The distinction that actually matters in practice is between encoding a whole URL and encoding a single component of it, which in JavaScript maps to two different functions:
| encodeURI (Full) | encodeURIComponent (Component) | |
|---|---|---|
| Purpose | Encode an entire URL | Encode one value (a parameter) |
| Leaves intact | : / ? # & = + $ , ; @ | Nothing structural |
| Encodes a space | %20 | %20 |
| Encodes & = / | No (kept as structure) | Yes (%26 %3D %2F) |
| Use when | You have a full, valid URL | You are inserting data into a URL |
The rule of thumb: use Component mode for the value of a single query parameter, and Full mode for an already-assembled URL. If you encode an entire URL with Component mode, you destroy it — the :// and ? get escaped and the URL stops working. If you encode a parameter value with Full mode, characters like & survive un-escaped and can break the query string apart. This tool exposes both modes explicitly so you always pick the right one, plus an optional “+” for spaces toggle for the form-encoded (application/x-www-form-urlencoded) convention used in HTML form submissions.
URL decoding explained
Decoding is the exact inverse of encoding: every %XX sequence is replaced by the byte it represents, and the resulting bytes are interpreted as UTF-8 text. So caf%C3%A9 decodes back to café and a%20b becomesa b. Decoding is essential when you receive a URL from logs, an analytics export, an email link or an API response and need to read what it actually contains.
A few decoding subtleties this tool handles for you:
- The “+” convention. In query strings, a
+historically means a space. Enable the “+” for spaces option and the decoder converts them; leave it off to treat+literally. - Double encoding. If you see
%2520instead of%20, the string was encoded twice — the%itself got encoded to%25. The Analyzer reports how many encoding layers are present so you can decode the right number of times. - Malformed input. A lone
%or a%not followed by two hex digits is invalid; the decoder catches this and explains the problem instead of crashing.
Query string parameters in depth
The query string is everything after the ? in a URL. It is a list of key=value pairs joined by&, and it is how URLs carry dynamic data: search terms, filters, pagination, sorting, feature flags, tracking tags and API arguments. For example, ?q=shoes&color=red&page=2 tells the server to search for “shoes”, filter to red, and show page 2.
Query strings have important properties developers should understand. Keys can repeat — ?tag=a&tag=b is valid and usually means a list, which is why this tool converts repeated keys into a JSON array. Order is generally insignificant to the server (parameters are looked up by name) but does matter for caching, because ?a=1&b=2 and ?b=2&a=1are different cache keys to a CDN. And values must be encoded — a value containing &, = or a space will corrupt the query string unless percent-encoded.
The Query Editor tab turns all of this into a visual workflow: paste a URL or query string, then add, edit, reorder, sort and delete parameters with the rebuilt URL updating live. It also converts between a query string and JSON in both directions, so you can move data cleanly between a browser address bar and your code.
The anatomy of a URL
A fully-qualified URL packs a surprising amount of structure into one line. Understanding each part is the key to parsing, debugging and securing URLs:
https://john:pass@shop.example.co.uk:8443/products/shoes?color=red&size=42#reviews
└─┬─┘ └──┬───┘ └──────┬──────────┘└─┬─┘└──────┬──────┘└────────┬───────┘└──┬──┘
scheme userinfo host port path query fragment| Component | Example | Purpose |
|---|---|---|
| Scheme | https | Protocol used to connect |
| Userinfo | john:pass | Credentials (rare, discouraged) |
| Host | shop.example.co.uk | Domain or IP of the server |
| Port | 8443 | Network port (defaults per scheme) |
| Path | /products/shoes | Location of the resource |
| Query | ?color=red&size=42 | Parameters / options |
| Fragment | #reviews | Client-side anchor (never sent to server) |
The host itself decomposes further into a subdomain (shop), a registrable domain(example.co.uk) and a top-level domain (co.uk) — and note that multi-part TLDs like co.ukrequire special handling, which the Parser tab gets right. Knowing the anatomy makes it obvious why, for instance, a credential in the userinfo section is a phishing red flag, or why the fragment can hold client-side routing state without ever reaching the server.
UTM parameters: the marketing guide
UTM parameters (Urchin Tracking Module, a legacy of the tool that became Google Analytics) are standardized query parameters that let analytics platforms attribute a visit to a specific marketing effort. They do not change the page that loads — they are pure metadata that your analytics reads and files away. The five standard tags are:
| Parameter | Required | Describes | Example |
|---|---|---|---|
| utm_source | Yes | Where traffic comes from | google, newsletter |
| utm_medium | Yes | Marketing channel | cpc, email, social |
| utm_campaign | Yes | Specific campaign | spring_sale |
| utm_term | No | Paid keyword | running+shoes |
| utm_content | No | Ad / link variant (A/B) | top_banner |
Consistency is everything with UTMs: Email, email and e-mail become three different sources in your reports, fragmenting your data. Best practice is to keep tags lowercase, use a fixed vocabulary for source and medium, and separate words with underscores or plus signs. The UTM Builder tab enforces the required fields and produces a correctly-encoded, ready-to-share link every time — and the Tracking Cleaner reverses the process when you want a clean link without the tags.
How to write SEO-friendly URLs
A URL is a small but real ranking and usability signal. Clean URLs are easier to read, share, remember and click, and they give search engines clearer context about a page. The SEO score in the Parser tab grades your URL against the criteria below:
- Keep it short. Aim for under ~75 characters. Long URLs get truncated in search results and are harder to share.
- Use lowercase. Some servers treat
/Pageand/pageas different URLs, splitting ranking signals and risking duplicate content. - Separate words with hyphens. Google reads
blue-shoesas two words butblue_shoesas one token — always prefer hyphens over underscores or spaces. - Include relevant keywords. A descriptive slug like
/running-shoes-guidebeats/p?id=4827for both users and crawlers. - Keep it shallow. Fewer path levels signal importance; bury pages too deep and they look less significant.
- Minimize query parameters. Static, readable paths are preferable to long dynamic query strings for indexable pages.
- Always use HTTPS. Security is a confirmed ranking factor and a trust signal.
URL security best practices
URLs are a common attack surface. Because they are user-controllable and flow through many systems, they are exploited for phishing, redirects and injection. The Security scanner in the Parser tab checks for the most common red flags:
- Open redirects. A parameter like
?next=https://evil.comthat the server blindly follows lets attackers send users from a trusted domain to a malicious one. Always validate redirect targets against an allow-list. - Dangerous schemes.
javascript:,data:andvbscript:URLs can execute code — a classic XSS vector. Never render an untrusted URL into anhrefwithout validating its scheme. - Embedded credentials. The
user:pass@hostform can disguise the true destination and leak secrets in logs and history. - Homograph / punycode hosts. Internationalized domains (
xn--) can visually impersonate a known brand. Verify the real registrable domain. - Double encoding. Layered percent-encoding is sometimes used to slip past naive input filters — decode fully before validating.
The golden rule: treat every URL from an untrusted source as hostile. Validate it server-side, prefer allow-lists over block-lists, and never make a security decision based on a substring match of a URL.
URL encoding for API development
When you build API requests, correct encoding is the difference between a 200 and a baffling 400. The single most important habit is to encode each parameter value individually with Component mode, then assemble the URL — never encode the finished URL as a whole. Consider a search call:
// Right: encode the value, keep the structure
const q = encodeURIComponent("tom & jerry"); // tom%20%26%20jerry
const url = `https://api.example.com/search?q=${q}&lang=en`;
// Best: let URLSearchParams handle every value
const params = new URLSearchParams({ q: "tom & jerry", lang: "en" });
const url2 = `https://api.example.com/search?${params}`;The URLSearchParams approach is the most robust because it encodes every value automatically and consistently. Other practical API tips: remember that path segments and query values have different encoding needs (a / is structure in a path but must become%2F inside a value); be careful with the + sign, which means space in form-encoded bodies but a literal plus elsewhere; and when debugging, paste the failing endpoint into the Parser tab to see exactly how the server will interpret each parameter. Because this tool runs entirely client-side, you can safely inspect endpoints that contain tokens and internal hostnames.
Frequently asked questions
42 answers about URL encoding, decoding, query strings, UTM tags and security.
URL encoding (also called percent-encoding) converts characters that are unsafe or reserved in a URL into a “%” followed by two hexadecimal digits representing the byte. For example a space becomes %20 and an ampersand becomes %26. It ensures a URL is transmitted correctly across browsers, servers and APIs without ambiguity.
Spaces are not allowed in URLs, so they must be encoded. The space character is byte 32, which is 0x20 in hexadecimal — hence %20. In the query-string part of a URL, a space may instead be encoded as a “+”, a convention inherited from HTML form submissions (application/x-www-form-urlencoded).
Paste the encoded URL into the Decode tab and the readable version appears instantly. Decoding replaces each %XX sequence with the character it represents. This tool also handles the “+” as space convention and warns you if the percent-encoding is malformed (for example a stray “%”).
encodeURI is for encoding a whole URL — it leaves structural characters like “:”, “/”, “?”, “&” and “#” intact so the URL still works. encodeURIComponent is for encoding a single piece of data, such as one query-parameter value — it escapes those structural characters too, so the value cannot break the URL apart. Use Component mode for parameter values and Full mode for entire URLs.
In practice the terms are used interchangeably; both refer to percent-encoding defined in RFC 3986. A URI (Uniform Resource Identifier) is the general concept and a URL (Uniform Resource Locator) is a URI that also tells you how to locate the resource. The encoding rules are identical, which is why the JavaScript functions are named encodeURI / encodeURIComponent.
Reserved characters (: / ? # [ ] @ ! $ & ’ ( ) * + , ; =), the space, the percent sign itself, and any character outside the unreserved set (A–Z, a–z, 0–9, and - _ . ~) should be encoded when they appear as data. Non-ASCII characters such as accented letters and emoji are first converted to UTF-8 bytes and then percent-encoded.
Query parameters are the key=value pairs after the “?” in a URL, separated by “&” — for example ?page=2&sort=price. They pass data to the server or application: filters, pagination, search terms, tracking tags and more. The Parser and Query Editor tabs let you view, add, edit, sort and rebuild them visually.
Open the Query Editor tab and paste your query string. The tool parses each key=value pair and outputs a JSON object, turning repeated keys (like tags=a&tags=b) into arrays. You can also go the other way — paste JSON and generate an encoded query string.
UTM parameters are tags appended to a URL so analytics tools can attribute traffic to a marketing campaign. The five standard tags are utm_source, utm_medium, utm_campaign, utm_term and utm_content. The UTM Builder tab generates correctly-formatted, shareable campaign URLs for you.
When a visitor clicks a link containing UTM tags, the analytics platform (Google Analytics, etc.) reads them and records the source, medium and campaign that drove the visit. They do not change the page that loads — they are purely informational metadata for attribution and reporting.
Use the Tracking Cleaner tab. It detects and strips known tracking tags — utm_*, fbclid, gclid, msclkid, mc_eid, igshid and dozens more — and returns a clean, shareable URL while listing exactly what was removed. This is great for sharing links without leaking campaign or click identifiers.
fbclid is the Facebook Click Identifier and gclid is the Google Click Identifier. Platforms append them automatically to outbound links so they can match a click to a conversion. They are not needed by the destination site, so removing them produces a cleaner, more private URL.
A URL-safe string contains only characters that are valid in a URL without further encoding — the unreserved set A–Z, a–z, 0–9 and - _ . ~. Any other character (spaces, &, =, /, non-ASCII) must be percent-encoded to make the string URL-safe. Encoding a value with Component mode guarantees it is URL-safe.
That is double encoding. %20 is an encoded space; if you encode that string again, the “%” itself becomes %25, turning %20 into %2520. It usually means a value was encoded twice in the pipeline. The Decode tab and Analyzer detect multiple encoding layers so you can fix the root cause.
No. URL encoding is a reversible formatting scheme with no secret key — anyone can decode it instantly. It provides compatibility, not security or confidentiality. Never rely on URL encoding to hide sensitive data; use HTTPS for transport security and proper encryption for secrets.
Yes. Characters outside ASCII are first encoded to their UTF-8 byte sequence, and each byte is then percent-encoded. So “ä” becomes %C3%A4 and an emoji becomes several %XX bytes. Decoding reverses the process and reconstructs the original Unicode text perfectly.
Use Component mode (encodeURIComponent). It escapes every reserved character — including & = ? / # — so a value containing those symbols cannot break the surrounding URL. Always encode individual parameter values, never the whole URL, with Component mode.
The HTTP standard sets no hard limit, but browsers and servers do in practice. Many browsers handle around 2,000 characters reliably, and some servers reject URLs beyond ~8,000 bytes. For SEO and shareability, keep URLs well under 100 characters where possible. The Analyzer reports the exact length.
An SEO-friendly URL is short, lowercase, uses hyphens (not underscores or spaces) to separate words, describes the content with relevant keywords, avoids excessive query parameters, and is served over HTTPS. The SEO score in the Parser tab grades your URL against these criteria and gives specific recommendations.
Use hyphens. Google treats a hyphen as a word separator (so “blue-shoes” is two words) but treats an underscore as a word joiner (so “blue_shoes” reads as one token). Hyphens therefore give search engines cleaner keyword signals. The SEO analyzer flags underscores automatically.
An open redirect happens when a site blindly forwards users to a URL supplied in a parameter (like ?redirect=https://evil.com). Attackers abuse it for phishing because the link starts on a trusted domain. The Security scanner flags parameters that carry absolute URLs so you can enforce an allow-list server-side.
Paste any URL into the Parser tab. It breaks the URL into protocol, username/password, hostname, port, path, query parameters and fragment, plus a domain breakdown (subdomain, registrable domain and TLD). It also shows a parameter table and a structured JSON view.
A full URL looks like scheme://user:pass@host:port/path?query#fragment. The scheme (https) says how to connect, the host is the domain, the optional port defaults per scheme, the path locates the resource, the query carries parameters, and the fragment points to a section within the page. The Parser visualizes each part.
The fragment, or hash, is everything after the “#”. It identifies a sub-resource such as a section anchor (#installation) and is handled entirely by the browser — it is never sent to the server. Single-page apps also use it for client-side routing.
Yes. The Bulk tab accepts one URL per line and lets you encode, decode or clean all of them in a single pass, then copy or download the results. It is ideal for cleaning a list of marketing links or batch-encoding API endpoints.
Use the Query Editor: enter or paste a base URL, then add, edit, reorder and remove parameters with the visual editor. The encoded URL is rebuilt automatically as you type, so you always have a valid, copy-ready link.
Parameter order generally does not affect how a server reads them, since they are looked up by name. However, ordering matters for caching and for generating identical URLs across systems. The Query Editor lets you sort parameters alphabetically for consistent, diff-friendly URLs.
Completely. All encoding, decoding, parsing and analysis run locally in your browser using the standard URL APIs. Your URLs are never uploaded, logged or stored on a server — so it is safe to process internal endpoints, tokens and confidential links.
Yes. Because everything runs client-side, the core features keep working after the page has loaded even without an internet connection. You can encode, decode, parse and clean URLs anywhere.
Use encodeURIComponent(value) for a single parameter value and encodeURI(fullUrl) for an entire URL. To build query strings safely, use the URLSearchParams API: new URLSearchParams({ q: "a b", page: 2 }).toString(). This tool uses exactly these standard APIs under the hood.
Use urllib.parse: quote(value, safe="") to encode a component, quote_plus(value) to use “+” for spaces, and urlencode(dict) to build a query string. To decode, use unquote or unquote_plus. These mirror the Component and Full modes in this tool.
A path parameter is part of the URL path that identifies a resource, like /users/42 where 42 is the user id. A query parameter comes after the “?” and refines or filters a request, like ?sort=name. Path parameters suit identity; query parameters suit options and filters.
Tracking parameters can leak which campaign, email or click a recipient came from, make URLs ugly and long, and sometimes tie a link back to your personal session. Stripping them yields a shorter, cleaner, more private link that still points to the same page.
Percent-encoding is the formal name for URL encoding: representing a byte as a “%” followed by its two-digit hexadecimal value. It is defined in RFC 3986 and is the mechanism that lets URLs carry reserved characters and non-ASCII data safely as plain ASCII text.
Not literally — a raw space is invalid and will break or be silently rewritten. Spaces must be encoded as %20 anywhere in the URL, or as “+” specifically within a query string. This tool flags raw spaces during validation and encodes them for you.
Inside a query string, “&” separates parameters, so a literal ampersand in a value (like a company name “Tom & Jerry”) must be encoded as %26 to avoid being read as a separator. Component mode handles this automatically — that is why you encode values, not whole URLs.
Paste a flat JSON object into the Query Editor and switch to JSON → query string. Each key becomes a parameter, array values become repeated keys, and everything is percent-encoded. Nested objects are stringified so the output stays a valid query string.
An API URL is the endpoint your code calls, often with query parameters carrying filters, tokens or search terms. Always encode each parameter value with Component mode so special characters (spaces, &, =, +) do not corrupt the request. Encode the value, then assemble the URL — never encode the whole URL with Component mode.
That usually means the bytes were not valid UTF-8, or the string was encoded with a different character set, or it was double-encoded. Try decoding once more if you see %25 sequences, and check the original encoding. The Analyzer reports the number of encoding layers to help diagnose it.
Yes, for HTTP caches and CDNs, ?a=1&b=2 and ?b=2&a=1 are different cache keys even though the server treats them the same. Normalizing parameter order (for example sorting them) improves cache hit rates. Use the Query Editor to sort parameters consistently.
Yes, completely free with no sign-up, no usage limits and no watermarks. Encode, decode, parse, build UTM links, clean tracking and process URLs in bulk as much as you like. An optional Pro tier removes ads, but every core feature is free forever.
Common actions are bound: Ctrl/Cmd + Enter swaps between Encode and Decode, Ctrl/Cmd + / opens the shortcuts panel, and native undo/redo works inside the editor. The Copy and Download buttons handle exporting your results.
Related Tools
Explore More Tools
Go ad-free & unlock power features
- Zero ads, faster focused workflow
- Upload 50MB+ files & batch process
- Priority AI type & schema generation