Тире уже могут использоваться для чего-то другого, например, для имени файла с тире, поэтому использование их для пробела может привести к путанице в зависимости от того, как они используются.
%20
- это шестнадцатеричный эквивалентсимвол ASCII 32, который является пробелом.
SO использует тире, чтобы сделать URLS «дружелюбными», но это не является обязательным требованием.
Согласно W3c Spec :
Пробелы и управляющие символы в URL должны быть экранированы для передачи в HTTP, как и другие запрещенные символы.