add normalizeUrl helper