I think because your $type is a slice of values: .Site.Data.songs.ranking has these three values: "/songs/luke-bryan/one-margarita.md", "/songs/dan-and-shay/10000-hours.md", "/songs/luke-combs/six-feet-apart.md".
It might be that you first have to loop over those values with range, and then inside the loop use .GetPage.
Perhaps something like this (untested):
{{ $type := .Site.Data.songs.ranking }}
{{ range $type }}
{{ $page := .Site.GetPage . }}
{{ with $page }}
{{ .Title }}
{{ end }}
{{ end }}
I don’t know if this works since I cannot test your setup on my end, but this is what I’d try in your situation.