본래 삼한시대에는 이서국(伊西國)이었으나, 42년(유리왕 19)에 유리왕의 공략을 받아 신라의 영토가 되었다. 처음에는 솔이산현(率伊山縣, 또는 率已山縣)이었으나 748년(경덕왕 7)에 구도현(仇刀縣)과 합쳐 대성군(大城郡)으로 하였다.
757년(경덕왕 16)에 솔이산현을 떼어 소산현으로 고치고 밀성군(密城郡, 지금의 密陽)의 영현으로 하였다. 940년(태조 23) 청도군(淸道郡)에 통합되었고, 군사적으로는 조선 말기까지 밀양도호부 관내에 있었다. 1914년 행정구역 개편 때 청도군 매전면이 되었다.
소산의 지명유래는 솔이산과 같은 뜻을 갖는데, 소는 ‘고(高)’나 ‘상(上)’의 뜻이 있으며 솔이산은 ‘고개’나 ‘산성’ 등의 의미를 가지므로, ‘높은 산’ 또는 ‘산성(山城)’의 뜻이 된다.
소산은 낙동강의 지류인 동창천(東倉川) 상류의 산간분지를 중심으로 발달하였다. 조선시대에는 이곳에 매전역(買田驛)이 있어 서쪽으로는 건현(巾峴)을 넘어 청도에 이르고, 동쪽으로는 서지역(西芝驛)·의곡역(義谷驛)과 어의현(於義峴)을 넘어 경주에 이르는 도로가 발달하였다.