Despite knowing essentially nothing about socket scripts (I take your word that it works),
it is obvious why it never returns the url.

There are 2 identical if statements trying to parse the same data in 2 different ways. mirc will never see the second if.
Try this.
Code:
on *:SOCKREAD:clan.*: { 
  if ($sockerr) { 
    %clan.way. Socket Error: $sockname $+ . Error code: $sockerr Please inform $me of this error message. 
    return 
  } 
  else { 
    var %sockreader 
    sockread %sockreader 
    if (*|* iswm %sockreader) { 
      noop $regex(%sockreader,/(.*?)\|(.*)/Si)
      set %clan.name $regml(1) 
      set %clan.url $regml(2) 
      %clan.way. Clan: %clan.name URL: %clan.url 
      sockclose $sockname 
    } 
    elseif (*Not Found* iswm %sockreader) { 
      %clan.way. ERROR: %clan.nick. isn't in any clanlist. 
      sockclose $sockname 
    } 
  } 
}

If it works, say so, and we'll call it even smile


LonDart