Quick answer: Add a GameplayTagRedirects entry to DefaultGameplayTags.ini mapping the old name to the new, then resave referencing assets. Without a redirect, the tag silently disappears from all references.
You renamed Ability.Combat.Slash to Ability.Melee.Slash in the Gameplay Tag Manager. Open a referencing Gameplay Ability Blueprint — the tag picker now shows “None”. Open a data table that listed the tag — same. Worse, you can’t even tell which assets used the old tag.
Why Renames Break Tag References
Gameplay Tags are stored in referencing assets as FName strings, not GUIDs. The asset on disk contains literally Ability.Combat.Slash. When the tag is renamed, the editor updates the tag definition but doesn’t rewrite every referencing asset (which would touch hundreds of files). The next time those assets load, they fail to resolve the old name and the reference becomes invalid.
The Redirect Mechanism
Unreal supports rename redirects via the GameplayTags ini:
; DefaultGameplayTags.ini
[/Script/GameplayTags.GameplayTagsSettings]
+GameplayTagRedirects=(OldTagName="Ability.Combat.Slash",NewTagName="Ability.Melee.Slash")
At load time, every FGameplayTag that’s about to resolve to Ability.Combat.Slash gets remapped to Ability.Melee.Slash. Existing assets work without modification.
Step-by-Step Rename Procedure
- Open Project Settings → Gameplay Tags.
- Rename the tag in the manager.
- Open
Config/DefaultGameplayTags.iniand add the redirect entry above. - Restart the editor.
- Open File → Resave Packages (or use the commandlet) to rewrite every referencing asset.
- After resave, the redirect can be removed — assets now contain the new name.
Commandlet for bulk resave:
UnrealEditor.exe MyProject.uproject -run=ResavePackages -PackageFolder=Content -SkipCheckedOutFiles
Commit the resaved assets and the redirect together so anyone pulling the branch sees both.
Finding Assets That Reference a Tag
The Asset Registry can list every reference to a specific tag:
auto& AR = FAssetRegistryModule::GetAssetRegistry();
FARFilter Filter;
Filter.bRecursiveClasses = true;
Filter.ClassPaths.Add(FTopLevelAssetPath(TEXT("/Script/GameplayAbilities.GameplayAbility")));
TArray<FAssetData> Assets;
AR.GetAssets(Filter, Assets);
for (auto& A : Assets)
{
if (A.GetTagValueRef<FString>("AbilityTags").Contains("Ability.Combat.Slash"))
UE_LOG(LogTemp, Log, TEXT("References: %s"), *A.AssetName.ToString());
}
Drop this in an editor utility widget to scan before renaming so you know exactly what to verify after.
Native Tag Renames
If you used UE_DEFINE_GAMEPLAY_TAG in C++, renaming the C++ macro also changes the tag string. Code re-references work after the C++ change but Blueprint assets still need the redirect treatment described above.
Verifying
Open a previously-affected Blueprint after applying the redirect. The tag picker should show the new tag name, not “None”. Open the asset’s text-form .uasset (or use the asset diff tool) and confirm the new name is stored. Trigger the gameplay flow that uses the tag; it should fire as before.
“Gameplay Tags are strings. Renames lose references silently unless you redirect — redirects are mandatory, not optional.”
Adopt a rule: every tag rename gets a redirect line in the same PR. No exceptions.