If your URLs look like /index.php?id=4821&sid=9f3a, you are making life harder for people and search engines. SEO friendly URLs are short, readable addresses made from real words. They use hyphens between words, they are in lowercase, and they sit in a sensible folder structure. They will not push a weak page to the top of Google. But they help Google crawl your site cleanly, and they help people decide whether to click.
This guide follows Google’s own URL structure help pages. I add the practical choices you face on a real site, and I show how to change URLs without losing traffic.
What Makes a URL SEO-friendly?
A URL is the full address of a page, such as https://example.com/garden/raised-beds/. The slug is the last part that names the page itself, here raised-beds. Most of your day-to-day choices are about slugs and folders.
Google’s advice comes down to one idea: make URLs easy to understand. In practice that means:
- Readable words instead of long ID strings.
- Hyphens between words, not underscores or nothing at all.
- One case used everywhere, ideally lowercase.
- As few parameters as possible, with no session IDs or tracking codes in links you control.
- Words in your audience’s language, correctly encoded if they use non-Latin characters.
- A logical folder structure that groups related content.
Google’s URL structure best practices page is the main source for everything below.
Use Readable Words, Not IDs
Compare these two addresses for the same page:
https://example.com/wiki/aviationhttps://example.com/index.php?topic=42&area=3a5ebc944f41daa6f849f730f1
The first tells a person what they will find before they click. The second tells them nothing. It is also easy to break when you copy it into an email or a chat message.
Readable URLs also work as their own link text. When someone pastes a bare link into a forum or a document, the words in the URL describe the page.
How Long Should a URL Be?
Google does not set a character limit for ranking. Aim for a slug that describes the page in a few words. Drop anything that adds no meaning.
Take a post titled “How to Build a Raised Garden Bed on a Budget”. /raised-garden-bed-budget/ is clearer than /how-to-build-a-raised-garden-bed-on-a-budget-step-by-step-guide/. Your page title can carry the full wording. Our guide to title tag best practices covers that side.
Should You Remove Stop Words?
Stop words are small words like “a”, “the” and “of”. They can usually go, because the slug reads fine without them. Keep them where removing them changes the meaning or makes the slug awkward, for example in a book or product name.
Hyphens, Not Underscores
Google recommends hyphens to separate words. Underscores are a poor choice. Programming languages use them to join names into one unit, such as format_date. So they do not show a clear break between words.
Running words together is even worse. /greendress is harder for people to read and less clear than /green-dress.
- Good:
/summer-dresses/green-dress - Avoid:
/summer_dresses/green_dress - Avoid:
/summerdresses/greendress
If your current site uses underscores and ranks well, don’t rush to change them. The gain is small, and every URL change carries risk. My rule is simple: use hyphens for new content, and only move old URLs as part of a bigger, planned change.
Lowercase and Consistent URLs
Google treats URLs as case-sensitive. To Google, /APPLE and /apple are two different URLs that could hold different content.
Many servers, especially on Windows hosting, return the same page for both. That creates duplicate URLs. Google’s advice is to pick one case and stick with it. That makes it easier for Google to work out which pages are duplicates.
The same idea applies to other versions that point to the same content:
http://andhttps://wwwand non-www- With and without a trailing slash, such as
/shoesand/shoes/
Choose one version of each. Redirect the others to it, and link inside your site to the version you chose. A self-referencing canonical tag on each page makes the signal stronger. A canonical tag is a line of code that tells Google which version of a page is the main one. If you still need to move to HTTPS, I cover the steps in my guide to switching to HTTPS safely.
Parameters, Session IDs and Other URL Clutter
Parameters are the part after the question mark, such as ?color=red&sort=price. They are not bad on their own. Filtering and sorting often need them. The problem is parameters that do not change the content. Another problem is combinations that multiply into thousands of near-identical URLs.
Format Parameters the Standard Way
When you do use parameters, Google recommends the standard format. Put an equals sign between key and value, and an ampersand between parameters. For several values under one key, use a separator such as a comma.
Recommended:
https://example.com/category?category=dresses&color=purple,pink,salmon&sort=low-to-high
Not recommended:
https://example.com/category?[category:dresses][sort:lowtohigh]
https://example.com/category?category,dresses,,sort,lowtohigh
Remove Parameters That Do Nothing
Google lists several types of useless parameters that cause trouble:
- Session IDs such as
sessionid=. Each visitor, and each crawl, can get a different URL for the same page. Store sessions in cookies instead. - Referral and tracking codes such as
ref=,click=orreferrerid=in internal links. - Sort parameters that just reorder the same list, such as
search_sort=relevance.
Campaign tags like UTM parameters belong on links from emails, ads and social posts. They don’t belong on links between your own pages. Internal UTM tags also overwrite the real traffic source in analytics. I see this mistake a lot, and it is one of the first things I check in an audit.
Watch for Endless URL Spaces
Some site features create an almost endless number of URLs. Google names a few common causes:
- Stacked filters on listing pages, where every mix of colour, size, price and brand makes a new URL.
- Calendars with “next month” links that run forever into the future.
- Broken relative links such as
../../category/stuffplaced on the wrong page. These can create deeper and deeper paths if the server does not return a proper error for pages that don’t exist.
Googlebot only needs a handful of listing views to reach every product or article. Use robots.txt to block crawling of search result pages, endless calendars and pointless filter combinations. Add nofollow to links to future calendar pages. And use root-relative links (starting with /) instead of parent-relative ones.
Do Not Use Fragments to Change Content
Everything after a # is a fragment. Google generally ignores fragments. So a single-page app that loads different content at /#/potatoes and /#/carrots may look like one page. Use the History API so each view has a real URL path.
Non-ASCII Characters and UTF-8 Encoding
Google recommends using words in your audience’s language. That includes non-Latin scripts, and transliterations where people search that way. A German site can use /lebensmittel/pfefferminz, and a Japanese site can use Japanese characters in the path.
The technical detail is encoding. In the href of your links, non-ASCII characters should be percent-encoded as UTF-8. That means each special character is written as a code. Browsers still show the readable version to users.
Displayed: https://example.de/gemüse
In the link: https://example.de/gem%C3%BCse
Most modern content management systems do this for you. Check it if you build links by hand, make URLs with custom code, or see odd characters in Search Console reports.
For sites aimed at several countries, Google’s advice supports two models. One is a country domain such as example.de. The other is a country subfolder on a general domain such as example.com/de/. Pick one model and use it everywhere.
Folder Structure: Group Related Pages
Folders (directories) show how your content fits together. Google’s SEO Starter Guide notes that on sites with more than a few thousand URLs, grouping similar topics in folders can help. It lets Google learn how often each section changes.
A simple, shallow structure works for most sites:
- Service business:
/services/boiler-repair/,/areas/leeds/ - Online shop:
/womens/dresses/for categories,/products/green-linen-dress/for products - Blog:
/blog/raised-garden-bed-budget/or simply/raised-garden-bed-budget/
Keep the nesting shallow. /shop/clothing/women/summer/dresses/linen/green/ is long, easy to break and adds little meaning.
Be careful with product URLs that include the category. If a product sits in two categories, the CMS may make two URLs for it. Either keep products outside the category path, or make sure a canonical tag points to one version.
Should Blog URLs Include Dates?
Dates like /2025/07/ make sense for news sites, where the date is part of the story. For evergreen guides they add length and make updated content look old. They also push you towards changing URLs later. In my opinion, most blogs are better without them.
Keep Years and Numbers Out of Evergreen Slugs
The same goes for years and list counts in slugs. A guide at /best-crm-tools-2025/ or /10-email-tips/ becomes awkward the moment you update it for next year or add an eleventh tip.
Put the year or the number in the title, where you can change it freely. Keep the slug stable: /best-crm-tools/ and /email-tips/. A stable URL keeps its links and history every time you refresh the content. I follow this rule on every guide I plan.
Product Slugs and SKUs
Shops often make slugs from product codes. A slug like /p/88213-b/ works technically, but /products/green-linen-dress/ is clearer. If shoppers search by model number, include it next to the name, such as /products/acme-x200-blender/. Don’t use it instead of the name.
Do Keywords in URLs Help Rankings?
Only a little. Google’s SEO Starter Guide says keywords in a domain name or URL path have hardly any effect beyond showing in breadcrumbs. Choose words that describe the page, not words picked to game rankings.
The value of a clear slug is mostly for people. On desktop results, Google can show parts of the URL as a breadcrumb trail under the site name. Since January 2025, Google’s mobile results show only the domain, so the path is less visible on phones. It still shows when links are shared, bookmarked or read in the address bar.
Using the main topic of the page in the slug makes sense. Repeating it, as in /seo-tips-best-seo-tips-seo-guide/, looks spammy and helps nobody.
Good vs Bad URL Examples
| Avoid | Better | Why |
|---|---|---|
/index.php?p=4821 |
/raised-garden-bed-budget/ |
Readable words instead of an ID |
/Raised_Garden_Beds/ |
/raised-garden-beds/ |
Lowercase and hyphens |
/shoes?sessionid=8f2c91 |
/shoes/ |
No session ID in the URL |
/dresses?sort=price&ref=nav |
/dresses/ |
Parameters that don’t change content are removed from internal links |
/blog/2019/03/14/post-1/ |
/blog/email-subject-lines/ |
Describes the topic, no needless date |
/#/contact |
/contact/ |
Real path instead of a fragment |
WordPress Permalink Settings
WordPress controls URL structure under Settings > Permalinks. The options include Plain (?p=123), Day and name, Month and name, Numeric, Post name, and a Custom Structure.
For most sites, Post name is the right choice. It makes /%postname%/ URLs like example.com/raised-garden-bed-budget/. Avoid Plain, which gives every post a numeric parameter URL.
WordPress builds the slug from your post title. It turns it to lowercase and replaces spaces with hyphens. Edit the slug in the post settings panel before you publish, so it is short and clear, not the full headline. This is a habit I’d build into every publishing checklist.
Two warnings:
- Set your permalink structure when the site is new. Changing it on an older site changes every post URL at once.
- If you must change it, plan redirects from every old URL to the matching new one and test them. Don’t assume a plugin or WordPress itself catches every case.
How to Change URLs Safely With 301 Redirects
When you change a URL, Google has to find the new address, process the redirect and pass signals to it. Done properly, most sites recover well. Done carelessly, pages drop out of the index and backlinks point to errors.
Only change URLs when there is a real benefit. Examples are a confusing structure, ID-based URLs, a rebrand or merging sites. Don’t rewrite well-performing URLs just to add a keyword.
- List every URL that will change. Export them from your CMS, sitemap or a crawl. Include pages with backlinks and traffic.
- Map old URLs to new ones. Each old URL should point to its closest match, not to the homepage.
- Set up permanent redirects. Google treats both 301 and 308 as permanent. Avoid chains where one redirect leads to another. Our guide to HTTP status codes and SEO explains how Google reads each code.
- Update internal links, canonicals and sitemaps. Link straight to new URLs, give each new page a self-referencing canonical, and submit the updated sitemap in Search Console.
- Test before and after launch. Crawl the old URL list. Check that each returns a single redirect to a page that returns 200.
- Keep the redirects. Google’s site move guidance recommends keeping them for at least a year, and ideally for as long as possible.
The Change of Address tool in Search Console is only for moving to a new domain or subdomain. You don’t need it for path changes on the same domain.
Expect some ranking movement for a few weeks while Google recrawls. Compare organic landing page traffic before and after the change. Our walkthrough on building GA4 reports for organic search shows how to set that up.
Conclusion
SEO friendly URLs are not a ranking trick. They are a sign of a tidy site: readable words, hyphens, lowercase, few parameters, correct encoding and a clear folder structure. Those habits make crawling simpler and give people a reason to trust the link.
Get the structure right for new content, fix the real problems on old URLs, and redirect carefully when you do change them. The next step I recommend is to crawl your site and export the URL list. Then flag anything with uppercase letters, underscores, session IDs or tracking parameters in internal links.



