In Geometric Semantic Genetic Programming (GSGP), genetic operators directly work at the level of semantics rather than syntax. It provides many advantages, including much higher quality of resulting individuals (in terms of error) in comparison with a common genetic programming. However, GSGP produces extremely huge solutions that could be difficult to apply in systems with limited resources such as embedded systems. We propose Subtree Cartesian Genetic Programming (SCGP) -- a method capable of reducing the number of nodes in the trees generated by GSGP. SCGP executes a common Cartesian Genetic Programming (CGP) on all elementary subtrees created by GSGP and on various compositions of these optimized subtrees in order to create one compact representation of the original program. SCGP does not guarantee the (exact) semantic equivalence between the CGP individuals and the GSGP subtrees, but the user can define conditions when a particular CGP individual is acceptable. We evaluated SCGP on four common symbolic regression benchmark problems and the obtained node reduction is from 92.4% to 99.9%.