The search performance of conventional Genetic Programming (GP) methods is strongly guided by the performance of the fitness function. In each generation, the fitness function evaluates every program in the population and measures the distance between the final output of the programs and the desired output. Human programmers often rely on the feedback from the intermediate execution states, which are the semantics, to localize and resolve software bugs. However, the semantics of a program is seldom explicitly considered in the fitness function to assess the quality of a program in GP. In this paper, we invent methods to improve fitness evaluation leveraging semantics in GP. We propose semantics flow analysis for programs using information theoretic concepts. Next, we develop a novel semantic fitness evaluation technique to rank programs using semantics based on the semantics flow analysis. Our evaluation results show that adopting our method can improve the success rates in Grammar-Based GP.