URLs follow the URI spec for…
URLs follow the URI spec for URLs/URNs which is RFC 3986
There's a couple of small but vital details in there, such as the treatment of relative URIs, relative to a base, and also fragment identifiers, which while often misused can create a clean separation between a protocol, the data, and the meta data -- this will be useful for scaling and bridges with multiple protocls. For example the DID spec gets both of these two things wrong, which is why I think we can do alot better in nostr.
A reference is slightly more of a nebulous term, though the two are often interchangable in that a reference in REST architectures means URI Reference. However I would possibly consider reference as a more generic and parent term of which URIs/URLs are an example. I expect the r tag would be looser in terms of data format, and I think I saw some things already.
I spent about 10 years learning various tips and techniques of how to get the most out of URIs, which if used correctly can tie much of the internet together. Im keen to import all the things ive learnt into nostr and show case some of the things that can be done that I've learnt in the world of standards for making scalable and interoperable apps.