Few things are more frustrating than a student telling you they finished a lesson, while LearnDash insists it’s still incomplete. If you’ve searched for a fix to a LearnDash lesson not marking complete, you’ve probably already tried the obvious things: refreshing the page, checking the student’s account, maybe even re-saving the lesson. None of that fixes it, because the real causes sit in settings most course creators never think to check.
This guide walks through every real cause, in the order they actually occur in practice, based on both LearnDash’s own documented behavior and the most common patterns support threads and course-builder communities report. By the end, you’ll know exactly which setting is blocking your specific case, not just a generic “try turning it off and on again.”
Quick Answer
A LearnDash lesson not marking complete almost always comes down to one of seven things: a Forced Lesson Timer still running, required lesson materials the student hasn’t opened, a quiz sitting unmarked in manual grading, a passing score the student hasn’t hit yet, video progression that never received its completion signal, an assignment waiting on manual approval, or a plugin conflict or caching layer overwriting what LearnDash recorded. Check them in that order.
📋 What’s Covered
02Common Scenarios Where This Happens
03A Forced Lesson Timer Is Still Running
04Lesson Materials Are Marked as Required
05An Attached Quiz Needs Manual Grading
06The Student Didn’t Hit the Passing Score
07Video Progression Never Got the Finished Signal
08An Assignment Is Waiting on Approval
09A Plugin Conflict or Caching Layer
10How to Check What LearnDash Recorded
11Diagnostic Order to Follow
12Why This Is So Common
13Frequently Asked Questions
How LearnDash Decides a Lesson Is “Complete” in the First Place
Before troubleshooting, it helps to know what LearnDash actually checks. Course progression in LearnDash runs in one of two modes: Linear, where a student must click “Mark Complete” (or satisfy every requirement) on each lesson before the next one unlocks, or Free Form, where students can move around freely and completion isn’t enforced step by step. If your course is set to Linear, which most structured courses are, LearnDash is actively checking a list of conditions behind the scenes before it will let a lesson flip to “complete.” When one of those conditions silently fails, the lesson looks stuck, even though everything visible on the page seems fine.
That’s the trap: LearnDash doesn’t tell the student, or you, which specific condition is unmet. It just doesn’t mark the lesson complete. The rest of this guide is that missing explanation.

Common Scenarios Where a LearnDash Lesson Won’t Mark Complete
Before the full breakdown, here are three real patterns that show up constantly in course-builder communities and support threads. See if one matches what you’re seeing:
“The video plays fully but the lesson stays stuck.” This is almost always the Forced Lesson Timer (cause 1) or video progression (cause 5) counting differently than you’d expect: requiring 100% of a video’s runtime watched, not just “played to the end,” which can fail if a student skips ahead even briefly.
“It worked for most students but a few are stuck.” This pattern points strongly toward cause 3 (an ungraded essay-type quiz) or cause 4 (a failed passing score). Both are per-student conditions, not site-wide settings, which is exactly why only some students are affected while others sail through.
“It was working fine last week, now nobody can complete it.” A sudden, site-wide change like this is rarely a LearnDash setting. It’s almost always a plugin update or a caching change (the “Other Causes” section below). Check your site’s plugin update log first.

1. A Forced Lesson Timer Is Still Running
If you’ve set a minimum time a student must spend on a lesson before it can be marked complete, LearnDash will block completion until that timer runs out, even if the student has read everything and clicked every link on the page. This setting is entered in an HH:MM:SS format (for example, 00:15:00 for fifteen minutes), and it’s easy to set generously “just in case” during course setup, then forget it’s there.
Check the lesson’s settings for Forced Lesson Timer. If it’s set higher than the content actually needs (a 20-minute timer on a 5-minute lesson, for instance), students will hit a wall that looks like a bug but is working exactly as configured.
One detail that trips people up: per LearnDash’s own course progression documentation, video progression, assignment uploads, and the forced lesson timer can’t all be active at once. Only one of the three can be enabled per lesson. If you’re seeing unexpected behavior after adding a video requirement, check whether it silently disabled your timer setting, or vice versa.
Fix: Lower the timer to something realistic for the actual content length, or disable it if it’s not genuinely needed for your course’s pacing.
2. Lesson Materials Are Marked as Required
If a lesson has attached materials (a PDF, a worksheet, a downloadable template) marked as required, LearnDash won’t mark the lesson complete until the student has interacted with that material, even if they’ve watched the entire video. This is one of the least obvious causes because the Materials tab sits slightly apart from the main lesson content editor, and it’s easy to overlook entirely when building a course quickly.
Check the lesson’s Materials tab specifically. If the material isn’t actually essential to completing the lesson, un-require it. If it genuinely is essential, consider adding a visible note in the lesson body telling students to check it. LearnDash won’t do that for you.
Fix: Un-require non-essential materials, or make the requirement visible to students so they’re not left guessing why the lesson won’t advance.
3. An Attached Quiz Needs Manual Grading
If a lesson has a quiz attached with open-ended or essay-type questions, LearnDash can’t auto-grade those responses. The lesson stays incomplete until an instructor manually reviews and grades the submission. This is correct, intentional behavior, not a bug, but it’s genuinely easy to forget you have a stack of ungraded quizzes quietly blocking a batch of students from moving forward.
Fix: Check LearnDash → Reports → Quizzes for anything sitting in a “pending review” state, and build a habit of checking it weekly if your course uses essay-type questions regularly.
4. The Student Didn’t Hit the Passing Score
If a lesson requires a passing quiz score to proceed, a student who scored below that threshold will see the lesson as permanently incomplete until they retake it. If quiz retakes aren’t enabled, they can get stuck with genuinely no way forward. This is a common source of “the course is broken” support messages that aren’t actually a bug at all.
Fix: Confirm retakes are allowed if you expect students to need more than one attempt, and double-check the passing score is set to something realistic for your content’s actual difficulty.
5. Video Progression Never Got the “Finished” Signal
If the lesson uses Video Progression, LearnDash holds it closed until it receives a completion signal back from the video player itself. That signal comes from the provider’s player, not from your site, which is why this cause behaves unlike every other one on this list: nothing in your LearnDash settings is wrong, the video plays perfectly on screen, and the event that would flip the lesson to complete simply never arrives.
The usual version of this is a video the player cannot fully control. LearnDash supports Vimeo, YouTube, Wistia, Bunny.net, Spotlightr, Presto Player, Amazon S3 and files uploaded to the WordPress Media Library, and each source carries its own conditions. Vimeo is the strictest: LearnDash’s documentation states that a Vimeo video not listed as public will not work, so an unlisted or password-protected video that plays fine while you are logged in can quietly block every student on the course. Bunny.net separately requires that the video be 720p or higher.
One detail here is worth more than the rest, because it explains the most confusing version of this problem. Per LearnDash’s documentation, video progression logic is not applied to an administrator who has the Bypass Course Limits option active. Test the lesson on your own admin account and it will complete normally every time, no matter how thoroughly the progression is broken for the people actually taking the course. This is the single most common reason a course creator cannot reproduce a problem their students keep reporting.
Fix: Open the lesson’s Video Progression settings, confirm the video is genuinely public and from a supported source, then re-test in a real student account rather than an admin one.
6. An Assignment Is Waiting on Instructor Approval
If the lesson accepts assignment uploads, one grading setting decides whether the student moves on or stops. On auto-approve, the upload is accepted the moment it lands and the student continues immediately. On manual approval, the lesson cannot be completed until an admin or group leader actually approves the submission and awards the points.
Manual approval is the setting that generates support messages, because from the student’s side a submitted assignment and an approved one look identical: the file uploaded, nothing errored, and the lesson still will not advance. It is the same shape of problem as the ungraded essay quiz in cause 3, sitting in a different queue entirely, which is exactly why checking one and not the other leaves you convinced the lesson itself is broken.
Fix: Check LearnDash → Assignments for submissions sitting unapproved, and switch the lesson to auto-approve if you are not genuinely grading the uploads.
7. A Plugin Conflict or Caching Layer Is Overwriting Progress
If none of the six causes above apply, two more things are worth checking before assuming it’s a deeper bug. First, try the course in an incognito or private browser window: a caching plugin can serve a stale “incomplete” state to a returning student even after LearnDash has correctly recorded their progress server-side. Second, temporarily deactivate other plugins one at a time to check for a conflict; LearnDash’s progress tracking writes to user-meta data, and another plugin touching that same data (a membership plugin, a custom dashboard, an aggressive security plugin) can silently overwrite it.
If your site runs a caching layer like LiteSpeed Cache or WP Rocket, specifically check whether logged-in user pages are excluded from caching. Course and lesson pages should never be served from cache for a logged-in student, since progress state is unique per user. This is a surprisingly common cause on managed hosting, where aggressive caching is turned on by default site-wide, including on pages it should never touch.
How to Check What LearnDash Actually Recorded
If you want to confirm the problem from the admin side rather than guessing, LearnDash’s own reporting gives you the real, per-student record. Go to LearnDash → Users, select the student in question, and open their course report. It shows lesson-by-lesson completion status and, for quizzes, the actual recorded score and pass/fail state. This tells you definitively whether LearnDash considers the lesson incomplete because of a genuine unmet condition, or whether the front-end display is simply out of sync, which is a strong signal it’s a caching issue, not a settings issue.
Cross-referencing this report against the causes above turns guesswork into a five-minute diagnosis: if the report shows a passing quiz score and completed materials but the student still sees “incomplete” on screen, you’re looking at a display or caching problem, not a LearnDash settings problem.
A Quick Diagnostic Order to Follow
When a student reports a stuck lesson, check these in order. It’s faster than guessing:
- Open the lesson settings and check for a Forced Lesson Timer.
- Check the Materials tab for anything marked required.
- Check Reports → Quizzes for anything pending manual grading.
- Check the attached quiz’s passing score and retake settings.
- If the lesson uses Video Progression, re-test it in a real student account, not an admin one.
- Check LearnDash → Assignments for a submission still waiting on approval.
- Test in an incognito window to rule out caching.
- If still stuck, deactivate other plugins one at a time.

Why This Specific Problem Is So Common in LearnDash
It’s worth understanding why a LearnDash lesson not marking complete is such a widely reported issue, rather than a rare edge case. LearnDash gives course creators a genuinely large number of completion conditions to choose from: timers, materials, quizzes, video-watch requirements, and passing scores, precisely because different course types need different rules. A compliance-training course legitimately needs a forced timer to prove engagement. A self-paced hobby course usually doesn’t. That flexibility is a real strength of the platform, but it also means every course accumulates its own specific combination of settings, and it’s easy to add one requirement without remembering it interacts with another.
This is also why generic advice (“clear your cache,” “check your plugins”) only solves the problem some of the time. A LearnDash lesson not marking complete because of a forced timer needs a completely different fix than one stuck because of an ungraded quiz, even though both present identically to the student: a lesson that just won’t advance.
Preventing This Before It Happens Again
The real fix isn’t just resolving one stuck lesson. It’s auditing your course structure so this doesn’t keep generating support tickets. Before launching a new course (or a new cohort of an existing one), walk through every lesson as a test student account and confirm each one actually marks complete under normal use. It takes twenty minutes and catches exactly this class of problem before real students hit it.
Frequently Asked Questions
Why does my course show 100% complete but the certificate won’t generate?
This is usually a separate, related issue. Check that the certificate is actually attached to this specific course, not just a site-wide default, and that no individual quiz within the course is still sitting ungraded.
Can students see why a lesson won’t complete?
Not by default. LearnDash doesn’t explain the blocker to the student, which is exactly why this becomes a support headache. Worth adding a short note directly in the lesson itself if you’re using timers or required materials, so students aren’t left guessing.
Is this fixable without a developer?
Yes, in most cases. The first six causes above are settings changes inside LearnDash itself, not code fixes. If you’ve checked all six and it’s still not resolving, that’s when it’s worth bringing in someone to look at a possible plugin conflict.
Does this happen more on mobile than desktop?
The underlying causes are the same on both, but caching issues (cause 7 above) show up more often on mobile because mobile browsers and some caching plugins handle logged-in sessions less consistently.
Does this affect the whole course or just one lesson?
It depends on the cause. Settings-based causes (timer, materials, quiz grading, passing score) are usually specific to one lesson unless you’ve applied the same setting course-wide. Caching and plugin-conflict causes tend to affect every lesson at once, which is a useful clue when narrowing down which category you’re dealing with.
Will upgrading LearnDash fix this automatically?
Rarely. Most cases of a LearnDash lesson not marking complete are configuration issues, not bugs in LearnDash itself, so a version update won’t change a Forced Lesson Timer or an ungraded quiz sitting in your course. It’s worth staying updated for security and compatibility, but don’t expect an update alone to resolve a stuck lesson.
Still stuck after checking all of this?
A LearnDash lesson not marking complete is almost always one of these seven things. If you’ve worked through the list and it’s still not resolving, I’ll help you track down exactly what’s blocking it.
Building a course from scratch?
Get the progression logic set up correctly from day one, so this problem never shows up in the first place.