It’s not 100% true that this is the solution. The slash comes from the template you used before. It depends on how you evaluate the URL. If your baseURL parameter is maybe set to a slash this might be added.
You show only how render-link is handling the links, but not what exactly is handed over to that specific link that is doing that hash thing. Nor do we know where exactly this link happens. I think it might be good to experiment around with RelURL and it’s friends: