diff --git a/Frontmatter.Test/EquivalentKeyMergeTests.cs b/Frontmatter.Test/EquivalentKeyMergeTests.cs
new file mode 100644
index 0000000..83d2fc5
--- /dev/null
+++ b/Frontmatter.Test/EquivalentKeyMergeTests.cs
@@ -0,0 +1,68 @@
+// Copyright (c) 2023-2026 ktsu-dev contributors
+
+namespace ktsu.Frontmatter.Test;
+
+using System.Collections.Generic;
+using System.Linq;
+
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+///
+/// Regression tests for keys that normalize to the same name, such as related and
+/// page_related. Each key used to be mapped to the other key's name, so the two were
+/// swapped rather than merged.
+///
+[TestClass]
+public class EquivalentKeyMergeTests
+{
+ private static readonly string[] ListA = ["a"];
+ private static readonly string[] ListB = ["b"];
+
+ [TestMethod]
+ [DataRow(FrontmatterMergeStrategy.Aggressive, false)]
+ [DataRow(FrontmatterMergeStrategy.Aggressive, true)]
+ [DataRow(FrontmatterMergeStrategy.Maximum, false)]
+ [DataRow(FrontmatterMergeStrategy.Maximum, true)]
+ public void EquivalentListKeys_MergeUnderOneNameWithBothValues(FrontmatterMergeStrategy strategy, bool prefixedFirst)
+ {
+ Dictionary frontmatter = prefixedFirst
+ ? new() { ["page_related"] = ListB, ["related"] = ListA }
+ : new() { ["related"] = ListA, ["page_related"] = ListB };
+
+ Dictionary result = PropertyMerger.MergeSimilarProperties(frontmatter, strategy);
+
+ Assert.HasCount(1, result);
+ Assert.IsTrue(result.TryGetValue("related", out object? related), "The unprefixed key should name the merged property");
+ CollectionAssert.AreEquivalent(new object[] { "a", "b" }, ((IEnumerable