the problem is likely you're not adding velocity based on the 'angle' of hit. i did this using sprites, which is kinda "evil", but it works fairly well.
so, to do this yourself, it's time to use drunk math.
let's assume 1. the ball is smaller than the paddle.
2. the idea is that the surface is 'magic' and will bounce the ball left if hit left, right if hit right, and a sweet spot if hit dead center, which can either
3. reflect it using the original angle, or
4. dead upright.
quick way is to add or subtract to the horizontal speed to create the deflection you need, you can also add 'curvature', i.e. acceleration and deceleration to speed over time to simulate gravity,
be careful of acceleration and vectors you use, as it increases game difficulty and also complicates collisions as you can go through the paddle if you accelerate or make the velocity larger in value than the physical size of the ball.
remember to set a cap on the velocity or be ready tp reset them if you see the ball gets stuck during/after object collisions or goes off screen, past the bounds. checks are always fun, you never know how the game fails until it does.
let's say we use the center of the object at collision, so ball x and paddle x, it's 165 ball / 180 for the paddle (left / negative)
and 175 ball / 140 paddle (right / positive)
and the ball width is 10.
a) you get -15, which is above 1 ball lengths from the center, so a small deflect.
b) you get 25, which is 2 ball lengths from the center
if you simply divide that result , or use an integer function, you get a clean number to add to ballXspeed that's X/Y relative, i.e. int (-15/10) and int (25/10), -1 and 2
this way, you get a nice 'center' hit for values where the ball is between 170 and 190.
you can also add a challenge if you use width/2 which gives you a smaller sweet spot and a stronger deflection speed off center
i.e.
BallXspeed = BallxSpeed + int(((ballx + (object size x(Ball)/2)) - (paddlex + (object size x(Paddle)/2))) / (object size x(ball)/2))
it's like 1am here, so check that with your own code.