Migrating course URLs
Changing the course or lesson URL structure on a site that is already live, without stranding your students.
What changes
Three settings, on Settings → Permalinks under Custom post types:
| Setting | Changes |
|---|---|
| "Course" Custom slug | Every course URL |
| "Lesson" Custom slug | Every lesson URL |
| Enable child structure | Every lesson URL, nesting it under its course |
Any of them rewrites addresses across the whole site at once. WordPress does not redirect the old ones.
What breaks
- Bookmarks students saved.
- Links in emails you have already sent, including order confirmations.
- Links from your own pages, menus and posts.
- Any external link to a course.
- Search results, until the site is recrawled.
On a course site those are not cosmetic. A student following a bookmark to a course they paid for gets a not-found page.
Decide whether it is worth it
Honestly: usually not, on an established site. A slug reading course instead of training costs you nothing that a broken link does not cost more.
Do it when:
- The site is new and nothing is published.
- The slug is wrong in a way that matters — the wrong language, or a word that collides with a page.
- You are restructuring anyway and can absorb the redirect work.
The migration
1. Record the current URLs
Before changing anything, list every course and lesson URL. A crawl, an export or a copy from the administration list — anything you can compare against afterwards.
You need this list to build the redirects, and you cannot reconstruct it after the change.
2. Do it at a quiet time
Between the change and the redirects being in place, links are broken. Pick the hour with the least traffic.
3. Change the setting and save
Open Settings → Permalinks, change the slugs or the child structure, and use Save Changes. That stores the values and rebuilds the rewrite rules in one step.
4. Verify immediately
Open a course and a lesson. If either returns not found, save the permalink screen again without changing anything — rebuilding the rules is exactly what that does.
5. Set up redirects
With a redirect plugin, map each old URL to its new one.
If only the base segment changed, a pattern redirect covers the lot: everything under the old base to the same path under the new base. If you enabled the child structure, lesson paths gained a segment and each one needs mapping — this is where your list from step 1 earns its keep.
Use permanent redirects, so search engines transfer the old addresses to the new ones.
6. Update your own links
Redirects catch other people's links. Yours should be correct:
- Menus and buttons.
- Your catalogue page.
- Any course or lesson linked from posts or pages.
- Email templates and automations that contain course URLs.
Search your content for the old base segment.
7. Tell students
A short note is enough:
We have tidied up our course addresses. Old bookmarks will still work, but the easiest way in is always My courses in your account.
That last sentence is the real fix. The account area does not change when slugs do, so a student who navigates from there is immune to this whole problem — which is why it should be the link you send in the first place.
8. Check afterwards
- Follow three old URLs from your list and confirm they land correctly.
- Open My courses as a student and confirm every link works.
- Check your search console for new not-found errors over the following days.
Slug collisions
The new base must not clash with an existing page. If a page lives at /training/ and you set the course base to training, one of them becomes unreachable.
Check your pages, your WooCommerce shop and account pages, and the My courses endpoint slug before saving.
What does not change
- Course and lesson content.
- Access configuration.
- Student progress, which is stored against the course, not its URL.
- The My courses endpoint, which has its own slug setting under Settings → POM LMS → Account.