Fixing LifterLMS 404 Errors on Courses, Lessons and the Dashboard

Work through every common cause of a LifterLMS 404: stale rewrite rules, permalink bases that clash with page slugs, unpublished or detached lessons, dashboard endpoints, the catalog page and plugin conflicts, with WP-CLI checks for developers.

  • Add as a preferred source on Google
Illustration for “Fixing LifterLMS 404 Errors on Courses, Lessons and the Dashboard”

A LifterLMS 404 error usually appears at the worst moment: right after launch, after a migration, or after someone changed a setting. The course exists in the admin, yet visitors get "Page not found". Or courses work but /my-courses/ on the student dashboard does not.

The cause is nearly always one of six things, and the first one fixes most cases in seconds. This guide explains why LifterLMS URLs break, then goes through each cause in order of likelihood, with WP-CLI checks for developers at the end.

Why LifterLMS URLs return 404

Courses, lessons, quizzes and memberships are custom post types, and WordPress only knows how to answer a URL such as /course/intro-to-design/ if a matching rewrite rule exists. LifterLMS registers those rules for its post types, its taxonomies such as course categories, and the student dashboard's endpoints such as my-courses.

WordPress stores rewrite rules in the database and only rebuilds them when told to. Anything that changes the rules without rebuilding them, such as a migration, a changed slug or a newly activated plugin, can leave a URL with no matching rule. The result is a 404 even though the content is there.

Do this first, every time:

  1. Go to Settings > Permalinks in the WordPress admin.
  2. Make sure a structure other than Plain is selected; Post name is the usual choice.
  3. Click Save Changes, even without changing anything.
  4. Reload the broken URL in a private window.

According to the WordPress documentation for the Permalinks screen, visiting it already flushes rewrite rules, and saving also rewrites .htaccess on Apache if the file is writable. If WordPress shows rules for you to copy instead, the file is not writable, so ask your host to add them. On Nginx, the server configuration must send unknown URLs to index.php; if every pretty URL 404s, not just LifterLMS ones, that configuration is the problem.

Clear any page cache and CDN cache afterwards, because a cached 404 can outlive the fix.

The same Permalinks screen has a LifterLMS Permalinks section. It controls the first part of each LifterLMS URL:

SettingDefaultExample URL
Course Post Typecourse/course/intro-to-design/
Course Archive basecourses/courses/, when no catalog page is set
Lesson Post Typelesson/lesson/welcome/
Quiz Post Typequiz/quiz/module-1-check/
Memberships Archive basememberships/memberships/
Course Category, Tag, Track and Difficulty basescourse-category and similar/course-category/design/

Three things go wrong here:

  • A base matches a page slug. If you have a page called "Course" with the slug course, WordPress cannot tell whether /course/something/ is a child page or a course. Keep the single-item bases different from your page slugs.
  • The bases were changed on a live site. Every old link, bookmark and search result now points to a URL that no longer exists. Add redirects from the old pattern to the new one with a redirect plugin or server rules.
  • The bases are in another language. LifterLMS sets the defaults in the site language when it is installed. If the site was installed in, say, French and later switched to English, the bases may still be the French words, which looks like a 404 when you type the English URL. Check the section and correct them if needed.

Changing a base safely

If you do need different URLs, for example /program/ instead of /course/, plan it like a small migration:

  1. Export a list of current course and lesson URLs, for example from your SEO plugin's sitemap.
  2. Change the base in LifterLMS Permalinks and save.
  3. Add one pattern redirect from the old base to the new one, such as /course/(.*) to /program/$1, with a permanent (301) status.
  4. Update menus, buttons and links inside lessons and emails that point to the old URLs.
  5. Test a sample of old URLs and submit the new sitemap to search engines.

Fix 3: Check the course, lesson or quiz itself

If only one item 404s, look at the item rather than the rules.

  • Status. Draft, pending, private and trashed content returns a 404 to students and visitors, though you can see it while logged in as an editor. Check the status of each lesson, not just the course: a published course can contain draft lessons.
  • Slug changed. Editing a title or permalink in the course builder or editor changes the URL. WordPress often redirects old post slugs automatically, but links inside lesson content, menus and emails should be updated.
  • Typos in hand-built links. Copy the URL from the editor's permalink field rather than typing it.

If the page loads but shows "you do not have access" instead of the content, it is not a 404 at all. See our guide to students who cannot access a course.

Fix 4: Student dashboard endpoints and core pages

Dashboard tabs are rewrite endpoints added to your dashboard page, so /dashboard/my-courses/ only works if all of these are true:

  1. The right page is set. Dashboard Page under LifterLMS > Settings > Accounts must point to the published page you are linking to.
  2. The endpoint is enabled. In Student Dashboard Endpoints on the same tab, each tab, such as View Courses (my-courses) or Edit Account (edit-account), has a slug. A blank slug disables that endpoint, so links to it 404.
  3. The slug is unique. If a child page of the dashboard has the same slug as an endpoint, they clash. Rename one of them.
  4. Rules are current. Saving the Accounts settings rebuilds rewrite rules, so save once after any change.

The checkout works the same way: Checkout Page under LifterLMS > Settings > Checkout must be a published page, and its Confirm Payment endpoint needs a unique slug. The course catalog is either the page set as Course Catalog under LifterLMS > Settings > Courses or, if none is set, the Course Archive base. If that page has been deleted, set a new one and refresh permalinks.

For a tour of what each tab shows, see our student dashboard guide.

Fix 5: Plugin, theme and server conflicts

If permalinks are refreshed and the settings are right, something else is claiming or rewriting the URL.

  • Another plugin uses the same slug. A second LMS, an events plugin or a portfolio plugin registering course or courses will clash. Deactivate leftovers from a previous platform after a migration to LifterLMS.
  • Redirect and SEO plugins. Rules that strip a base from URLs, or old redirects that now point at deleted pages, produce 404s. Check their redirect lists for course and lesson patterns.
  • Multilingual plugins can add language prefixes or translate slugs; test each language's URLs separately.
  • Security plugins and firewalls sometimes block query strings or paths they consider suspicious.
  • The theme or a page builder template can output a "not found" layout for a post type it does not support.

Test on a staging copy with all plugins except LifterLMS deactivated and a default theme active, then reactivate them one at a time. LifterLMS's own troubleshooting guide recommends the same conflict test.

Developer checks with WP-CLI

If you have shell access, WP-CLI shows exactly which rule matches a URL:

# Which rewrite rules match this URL?
wp rewrite list --match=/course/intro-to-design/

# Rebuild rewrite rules, including .htaccess on Apache
wp rewrite flush --hard

# Confirm the post exists, and check its status and slug
wp post list --post_type=course --name=intro-to-design --fields=ID,post_status,post_name

# See the LifterLMS permalink bases stored in the database
wp option get llms_permalinks --format=json

If wp rewrite list --match returns no LifterLMS rule, the rules are missing: flush them, and if they still do not appear, a plugin is preventing registration. If a page rule matches first, you have a slug clash.

Frequently asked questions

Why do my LifterLMS courses 404 after migrating the site?

Rewrite rules are not always rebuilt after a migration, and the new server may not have the right .htaccess or Nginx rules. Re-save the permalinks, then check the server configuration.

Why does the student dashboard work but its tabs 404?

The tab endpoints are missing or clashing. Check Student Dashboard Endpoints for blank or duplicate slugs, make sure no child page uses the same slug, and save the Accounts settings.

Can I remove "course" from LifterLMS course URLs?

Not with a setting. Removing a post type base makes WordPress guess between pages and courses, which causes exactly the clashes described above. It needs custom rewrite code and careful testing.

What to do next

Refresh the permalinks, check the LifterLMS bases for clashes, then check the specific item and the dashboard settings. If the 404s started after a migration or a URL restructure, also plan redirects so you do not lose search traffic.

If you are planning a URL change, a platform move or a cleanup of years of redirects, our LifterLMS migration service can map and redirect every course and lesson URL safely. Get in touch with a few of the broken links.

Add LifterLMS Expert to your preferred sources

Add lifterlmsexpert as a preferred source on Google, or open this article in your AI assistant to use it as a source.

  • Add as a preferred source on Google
Free consultation

Prefer expert help over DIY?

Skip the trial and error. Get specialist LifterLMS help and ship faster.

Talk to a LifterLMS Expert Explore our services

Replies within one business day