Fix Up Redirectors only works while the redirector exists. It does not exist when an asset was moved in Explorer or a Git client instead of the editor, or when a branch still using the old path was merged after redirectors were fixed up and deleted.
The referencing package then names a path nothing lives at, and the reference loads as nothing: a material instance with no parent, a mesh slot with no material, a variable set to None. Save it in that state and the reference is gone for good, because the file that recorded what it pointed at is the one you just overwrote.
We built an editor plugin for UE 5.8 that handles this case. It reads the Asset Registry dependency edges and keeps the ones whose target package is missing from disk, so nothing is loaded to find them. For each hard reference it reads the referencing package’s own import table to get the missing asset’s name and class, then looks for an asset with the same name and the same class in your project content and project plugins. Engine content is never offered as a new home.
It refuses whatever it cannot prove. Two candidate homes, a same named asset of the wrong class, a package under a plugin that is not enabled, and a reference held only as a soft path, which records no class, are each reported with the reason and left alone.
With -Apply it copies every file it may write into a journal first, relinks through a temporary package redirect, loads every referencer, checks that each rescued reference now holds a live object, and only then saves. It then removes the redirect, rereads the saved files from disk and counts every edge, succeeding only if all of them point at the new location. -Undo=<journal> puts every file back byte for byte.
Disclosure: this plugin was written by AI. It is $14.99 here.