Database Schema Design for Pages

I have a project that has a template that contains N pages, these pages contains N groups of interactions and single interactions and they need to be ordered . The interaction can be content, survey, question or an avaliation.

I’m worried about the page matrix is not be the best solution. There is a database schema design that handle store content of pages of N sites with a good performance and a good normalization too?

interface Template {
name: string;
friendly_url: string;
pages: Page[][];
}

interface Page {
type: 'group' | 'interaction';
group?: Group;
interaction?: Interaction;
}

interface Group {
name: string;
interactions: Interaction[];
}

interface Content {
description: string;
images?: string[];
}

interface Interaction {
type: 'content' | 'survey' | 'question' | 'avaliation';
required: boolean;
content?: Content;
survey?: {};
question?: {
 content: Content;
 options: Content[];
};
avaliation?: {
 content: Content;
};
weblink?: {
 content: Content;
 link: string;
};
}