Index: src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 18194)
+++ src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(working copy)
@@ -20,6 +20,7 @@
 import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -57,6 +58,10 @@
 
     static final double DETOUR_FACTOR = 4;
 
+    private final Set<String> priorityHighwayTags = Stream.of("MOTORWAY", "MOTORWAY_LINK", "TRUNK", "TRUNK_LINK", "PRIMARY",
+                    "PRIMARY_LINK", "SECONDARY", "SECONDARY_LINK", "TERTIARY", "TERTIARY_LINK", "RESIDENTIAL", "UNCLASSIFIED")
+            .collect(Collectors.toCollection(HashSet::new));
+
     protected abstract boolean isCandidate(OsmPrimitive p);
 
     protected boolean isWantedWay(Way w) {
@@ -349,6 +354,17 @@
         for (Entry<Node, MyWaySegment> error : errorMap.entrySet()) {
             Node node = error.getKey();
             MyWaySegment ws = error.getValue();
+
+            // Get parent way from nearby end node and extract highway tag.
+            Way parentWay = getWantedParentWay(node);
+            String parentWayHighwayTag = parentWay.get(HIGHWAY);
+
+            // Check if highway tag is Unclassified or above (Residential - Motorway)
+            // New message for warning categories.
+            // #12493 - Categorize 'Way end node near other highway' warnings.
+            if (priorityHighwayTags.contains(parentWayHighwayTag.toUpperCase())) {
+                message = tr("Way end node near other highway - Major");
+            }
             errors.add(TestError.builder(this, severity, code)
                     .message(message)
                     .primitives(node, ws.w)
@@ -373,7 +389,7 @@
         if (!searchNodes.isEmpty()) {
             maxLen = DETOUR_FACTOR * mindist;
             if (isHighwayTest) {
-                addErrors(Severity.WARNING, getHighwayEndNodesNearOtherHighway(), tr("Way end node near other highway"));
+                addErrors(Severity.WARNING, getHighwayEndNodesNearOtherHighway(), tr("Way end node near other highway - Minor"));
             } else {
                 addErrors(Severity.WARNING, getWayEndNodesNearOtherWay(), tr("Way end node near other way"));
             }
