[{"data":1,"prerenderedAt":415},["ShallowReactive",2],{"blog-5-scorm-errors-that-break-powerpoint-conversions":3},{"id":4,"title":5,"author":6,"body":7,"description":393,"draft":394,"extension":395,"meta":396,"navigation":403,"path":404,"publishedAt":405,"seo":406,"stem":407,"tags":408,"updatedAt":413,"__hash__":414},"blog\u002Fblog\u002F5-scorm-errors-that-break-powerpoint-conversions.md","5 SCORM errors that break PowerPoint conversions (and what to do about each)","Larry \u002F LOST END FOUND LTD",{"type":8,"value":9,"toc":381},"minimark",[10,14,23,26,29,83,106,110,113,116,171,187,195,203,220,229,233,236,254,257,266,270,273,329,334,337,341,344,369,372,374],[11,12,13],"p",{},"When a PowerPoint-converted SCORM package breaks, it breaks in one of five ways. Over the years we've seen every flavour, usually multiple times in the same client's library. Here's the checklist we run through before blaming the LMS.",[15,16,18,19],"h2",{"id":17},"_1-invalid-imsmanifestxml","1. Invalid ",[20,21,22],"code",{},"imsmanifest.xml",[11,24,25],{},"The manifest is the metadata file that tells the LMS what's in the package and how to launch it. Most SCORM failures start here.",[11,27,28],{},"Common breakages:",[30,31,32,56,65,75],"ul",{},[33,34,35,43,44,47,48,51,52,55],"li",{},[36,37,38,39,42],"strong",{},"Missing ",[20,40,41],{},"schemaversion","."," If it's not ",[20,45,46],{},"\u003Cschemaversion>1.2\u003C\u002Fschemaversion>"," (or ",[20,49,50],{},"2004 3rd Edition"," \u002F ",[20,53,54],{},"2004 4th Edition","), the LMS can't classify the package and either silently fails or throws an \"invalid SCORM\" error with no detail.",[33,57,58,64],{},[36,59,60,63],{},[20,61,62],{},"identifier"," not unique."," Identifiers must be unique within the manifest. PowerPoint conversions that paste the same identifier on every resource fail validation.",[33,66,67,70,71,74],{},[36,68,69],{},"Relative path issues."," The ",[20,72,73],{},"href"," on each resource must match the actual zip layout. Converters that ship on Windows occasionally emit backslashes; SCORM requires forward slashes.",[33,76,77,82],{},[36,78,38,79],{},[20,80,81],{},"adlcp:scormtype=\"sco\""," on the launchable resource. Some LMSs accept its absence; Cornerstone and Workday won't.",[11,84,85,88,89,91,92,99,100,105],{},[36,86,87],{},"Debug",": unzip the package and open ",[20,90,22],{},". Run it through ",[93,94,98],"a",{"href":95,"rel":96},"https:\u002F\u002Fcloud.scorm.com",[97],"nofollow","SCORM Cloud's validator"," or ",[93,101,104],{"href":102,"rel":103},"https:\u002F\u002Fwww.rustici-software.com",[97],"Rustici's online manifest checker",". If it fails there, your LMS doesn't stand a chance.",[15,107,109],{"id":108},"_2-completion-isnt-tracking","2. Completion isn't tracking",[11,111,112],{},"You finish the course. The LMS still says \"In Progress\". Classic.",[11,114,115],{},"Causes, in rough order of frequency:",[30,117,118,131,160],{},[33,119,120,126,127,130],{},[36,121,122,123],{},"The SCO never calls ",[20,124,125],{},"LMSFinish()"," (SCORM 1.2) or ",[20,128,129],{},"Terminate()"," (SCORM 2004). The JavaScript has an error and exits early, or the close button isn't wired up, or the converter didn't emit the call at all.",[33,132,133,139,140,143,144,143,147,143,150,143,153,143,156,159],{},[36,134,135,138],{},[20,136,137],{},"cmi.core.lesson_status"," set to the wrong value."," For SCORM 1.2, the valid values are ",[20,141,142],{},"\"passed\"",", ",[20,145,146],{},"\"failed\"",[20,148,149],{},"\"completed\"",[20,151,152],{},"\"incomplete\"",[20,154,155],{},"\"browsed\"",[20,157,158],{},"\"not attempted\"",". Anything else — including whitespace — fails silently.",[33,161,162,170],{},[36,163,164,165,167,168],{},"Progress is set to ",[20,166,149],{}," but the LMS is configured to require ",[20,169,142],{},". Some LMSs gate completion on a pass, not on finishing. Check with the LMS admin; the fix is usually a config change on their side, not a repackage.",[11,172,173,175,176,51,179,182,183,186],{},[36,174,87],{},": open browser DevTools on the SCORM launch page. In the console, watch for calls to ",[20,177,178],{},"API.LMSSetValue",[20,180,181],{},"API_1484_11.SetValue",". If you don't see ",[20,184,185],{},"lesson_status"," being set, that's your bug.",[15,188,190,191,194],{"id":189},"_3-suspend_data-overflow-silent-failure","3. ",[20,192,193],{},"suspend_data"," overflow (silent failure)",[11,196,197,198,202],{},"Already covered in the ",[93,199,201],{"href":200},"\u002Fblog\u002Fscorm-1-2-vs-2004-for-powerpoint","SCORM 1.2 vs 2004"," post, but worth repeating because it's the most insidious failure mode:",[30,204,205,211,214,217],{},[33,206,207,208,210],{},"SCORM 1.2 caps ",[20,209,193],{}," at 4,096 characters.",[33,212,213],{},"Most LMSs enforce the cap. Some truncate silently. Some accept more than 4KB for a while, then stop.",[33,215,216],{},"When truncation hits, the learner's progress resets on resume. They can't finish the course because they can never get back to where they were.",[33,218,219],{},"The LMS logs nothing. The browser logs nothing. The learner emails you saying \"it keeps losing my place\".",[11,221,222,224,225,228],{},[36,223,87],{},": in DevTools, watch ",[20,226,227],{},"LMSSetValue(\"cmi.suspend_data\", ...)",". If the string length grows past ~3,500 characters, you have a time bomb. Fix by splitting the course into multiple SCOs, or by changing what's stored (serialise only the last completed slide, not the full history).",[15,230,232],{"id":231},"_4-cross-origin-content-breaks-inside-the-lms-iframe","4. Cross-origin content breaks inside the LMS iframe",[11,234,235],{},"SCORM packages are served by the LMS inside an iframe. If your course embeds a YouTube video, a Vimeo player, a Typeform, or an external survey, the LMS's iframe sandbox rules apply:",[30,237,238,245,248],{},[33,239,240,241,244],{},"Videos with strict ",[20,242,243],{},"X-Frame-Options: SAMEORIGIN"," won't play.",[33,246,247],{},"Third-party cookies are often blocked (Chrome's phase-out, Safari's ITP), breaking anything that needs a login.",[33,249,250,253],{},[20,251,252],{},"postMessage"," between the LMS parent and an embedded widget is usually blocked.",[11,255,256],{},"This isn't a SCORM problem per se — it's a general \"iframes in iframes\" problem — but it shows up in SCORM conversions because PowerPoint decks love embedded videos.",[11,258,259,261,262,265],{},[36,260,87],{},": open the browser console with the LMS course loaded. Look for CORS errors, ",[20,263,264],{},"X-Frame-Options"," errors, or \"blocked by sandbox\" warnings. If you see any, the fix is usually to self-host the asset inside the SCORM package instead of embedding it externally.",[15,267,269],{"id":268},"_5-lms-specific-quirks","5. LMS-specific quirks",[11,271,272],{},"The ones that will ruin your week:",[30,274,275,290,299,313,323],{},[33,276,277,280,281,283,284,286,287,289],{},[36,278,279],{},"Cornerstone OnDemand",": converts all ",[20,282,185],{}," of ",[20,285,142],{}," into ",[20,288,149],{}," regardless of your score. If scoring matters to you, check that your reporting joins on the right field.",[33,291,292,295,296,298],{},[36,293,294],{},"Moodle",": occasionally truncates ",[20,297,193],{}," at 2KB (yes, half the spec) on older versions. Check your instance's config.",[33,300,301,304,305,308,309,312],{},[36,302,303],{},"Docebo",": ignores ",[20,306,307],{},"cmi.core.session_time"," if it's formatted in the SCORM 1.2 ",[20,310,311],{},"HHHH:MM:SS.SS"," format with more than 4 hour digits — which breaks courses that span multiple sessions.",[33,314,315,318,319,322],{},[36,316,317],{},"SAP SuccessFactors",": requires the manifest's ",[20,320,321],{},"\u003Ctitle>"," to be ≤ 255 characters. Your \"Fire Safety Awareness and Evacuation Procedures for Building Supervisors Version 3 (2026)\" title will fail ingestion.",[33,324,325,328],{},[36,326,327],{},"Workday Learning",": doesn't support SCORM 2004 4th Edition; falls back to 3rd Edition silently, dropping sequencing rules.",[11,330,331,333],{},[36,332,87],{},": every LMS has its own error log, usually buried two menus deep under \"Reports\" → \"SCORM\" → \"Launch History\". Get your LMS admin to export it and grep for the course name.",[335,336],"hr",{},[15,338,340],{"id":339},"the-checklist","The checklist",[11,342,343],{},"When a SCORM conversion breaks, before anything else:",[345,346,347,350,357,363,366],"ol",{},[33,348,349],{},"Validate the manifest.",[33,351,352,353,356],{},"Watch ",[20,354,355],{},"LMSSetValue"," calls in DevTools.",[33,358,359,360,362],{},"Check ",[20,361,193],{}," length.",[33,364,365],{},"Check for iframe\u002FCORS errors in the console.",[33,367,368],{},"Check your specific LMS's known quirks.",[11,370,371],{},"In our experience, 4 out of 5 \"my SCORM is broken\" calls are one of these five things.",[335,373],{},[11,375,376,377],{},"If you've got a conversion that's misbehaving and you'd rather hand it off, we do SCORM rescue work as a flat-rate job. ",[93,378,380],{"href":379},"\u002Fquote","Get a quote.",{"title":382,"searchDepth":383,"depth":383,"links":384},"",2,[385,387,388,390,391,392],{"id":17,"depth":383,"text":386},"1. Invalid imsmanifest.xml",{"id":108,"depth":383,"text":109},{"id":189,"depth":383,"text":389},"3. suspend_data overflow (silent failure)",{"id":231,"depth":383,"text":232},{"id":268,"depth":383,"text":269},{"id":339,"depth":383,"text":340},"Manifest validation, completion tracking, suspend_data overflow, cross-origin, and the LMS-specific quirks we see repeatedly. A debugging checklist.",false,"md",{"relatedPages":397},[398,400],{"path":200,"title":399},"SCORM 1.2 vs 2004 for PowerPoint",{"path":401,"title":402},"\u002Fblog\u002Fwhy-free-ppt-to-scorm-tools-fail-on-mobile","Why free PPT-to-SCORM tools fail on mobile",true,"\u002Fblog\u002F5-scorm-errors-that-break-powerpoint-conversions","2026-04-18",{"title":5,"description":393},"blog\u002F5-scorm-errors-that-break-powerpoint-conversions",[409,410,411,412],"scorm","powerpoint","debugging","lms","2026-04-25","7eIYmYa7ALg7jHXtOhia8wjeS-sEvbR1dLrr_zddMKc",1777204340856]