Is the following acceptable or is it bad English? Is there a better way to phrase the question and answer? (Someone told me it is bad English but he couldn't elaborate. I'm confused.)

Qn: Is there school today?
Ans: Today, there is no school because it is a school holiday.
Please help.

It's not bad English.

I'd rephrase the answer slightly, though ... like this:
There is no school today because it is a school holiday.

The phrasing of the question and answer you provided is grammatically correct and acceptable in English. However, there are alternative ways to phrase the question and answer that may be clearer or more concise, depending on the context and the level of formality you wish to maintain. Here are a few examples:

1. Can you confirm if there is school today?
- Today, school is not in session due to a holiday.

2. Do we have school today?
- No, today is a school holiday.

3. Is school on today?
- No, school is closed today because it is a holiday.

Remember, language can be flexible, and different variations may exist depending on the regional dialect or personal preference. It's also essential to consider the context in which the question and answer are being used.