Перейти до вмісту
themeforge
UA
Почати безплатно
Меню

AI генерація

Цей посібник пояснює, як розміщувати атрибути ThemeForge на HTML-елементах, щоб генератор створив WordPress тему з повноцінною адмін-панеллю.

Ви можете поділитися цією сторінкою з будь-яким AI-асистентом (ChatGPT, Claude, Gemini тощо), щоб він прочитав правила та правильно розставив атрибути.

Поділіться посиланням з вашим AI: https://themeforge.pro/ai

Надішліть ШІ-помічника за цією адресою — він прочитає правила розстановки з першоджерела, ті самі, за якими генератор оцінює вашу розмітку. Спершу віддається короткий зміст, потім кожен модуль правил на запит.

Варіанти роботи

Є кілька способів використання атрибутів ThemeForge залежно від вашої відправної точки та інструментів.

1. AI генерує сайт одразу з атрибутами

Для кого: користувачі з дизайном (Figma, макет, референс)

Поділіться посиланням на цю сторінку з вашим AI-асистентом разом з дизайном. AI згенерує HTML з уже розставленими атрибутами. Ви перевіряєте звіт, просите виправлення та генеруєте WordPress тему.

  1. Дайте AI посилання на цей посібник + ваш дизайн (посилання Figma, скріншоти, референс)
  2. AI генерує HTML з усіма атрибутами за правилами
  3. Перевірте звіт по атрибутах — скоригуйте за потреби
  4. Згенеруйте WordPress тему через ThemeForge

2. AI розставляє атрибути на готовий HTML

Для кого: розробники з готовим HTML (експорт з Webflow, шаблон, ручна верстка)

У вас вже є HTML без атрибутів ThemeForge. Поділіться цим посібником з AI та попросіть проаналізувати HTML і розставити атрибути на потрібні елементи.

  1. Дайте AI посилання на цей посібник + ваші HTML-файли
  2. AI аналізує структуру та додає атрибути на тексти, зображення, посилання
  3. Перевірте звіт — AI не завжди знає, які елементи декоративні
  4. Запустіть валідацію, виправте проблеми, згенеруйте тему

3. Ручне розміщення у Webflow Designer

Для кого: досвідчені користувачі Webflow, які віддають перевагу повному контролю

Додавайте кастомні атрибути прямо у Webflow Designer (Налаштування елемента → Custom Attributes). Експортуйте сайт та запустіть валідацію перед генерацією теми.

  1. Виберіть елемент у Webflow → Settings → Custom Attributes
  2. Додайте ім'я атрибута (напр. fld-text) та значення (напр. Heading)
  3. Експортуйте сайт (Code Export або .webflow.io)
  4. Запустіть валідацію та згенеруйте тему

Повний цикл

Незалежно від методу, цикл перевірки швидкий — не потрібно імпортувати у Webflow чи ставити на WordPress лише щоб перевірити атрибути:

  1. Розставте атрибути (AI або вручну)
  2. Запустіть звіт — перегляньте дерево за секунди
  3. Не подобається? → скажіть AI що виправити → знову звіт
  4. Запустіть валідацію — перевірте помилки
  5. Згенеруйте WordPress тему

Ready-Made AI Prompts

Copy a prompt below and paste it into your AI assistant (ChatGPT, Claude, Gemini) along with the link to this guide. The AI will follow the attribute rules automatically.

Prompt A: Add attributes to existing HTML

Use this when you already have an HTML site and need to add ThemeForge attributes.

I have a finished HTML website that I want to convert into a WordPress theme with an editable admin panel, using ThemeForge.

Read the placement rules and follow them exactly. Start here — it names the rule modules and tells you what to do first:
https://themeforge.pro/ai
Always pull the `core` module; if you are generating the site from scratch, pull `build` too. Then add what this site needs (pages, blog, cpt, woocommerce, deploy).

Then add ThemeForge attributes to every piece of editable content in my HTML:
- Each visual section = a tab + group pair; short headings/labels = text, paragraphs and long wrapping headings = textarea, images on  tags, links as a URL + text pair.
- Repeating cards (features, team, FAQ) = a repeater with 2+ rows.
- Header, footer, navigation, logo and contacts = site-wide options.
- If my site is multilingual, mark the language switcher with wp-menu="Language" and do NOT hardcode any visible text — every label must be a field (each language has its own value).
- Keep image/file paths as they are; do not skip any visible text.

[Add your specific requirements here: which pages, WooCommerce / blog support, languages, etc.]

When done, follow the Final Delivery steps: create the theme-options page with ALL option fields, serve the files locally, and give me the complete list of page URLs to paste into ThemeForge.

Prompt B: Generate HTML with attributes from scratch

Use this when you want the AI to create an HTML site from a design (Figma, screenshot, description) with ThemeForge attributes already included.

I need you to generate an HTML website with ThemeForge attributes already in place, ready for WordPress theme generation.

Read the placement rules and follow them exactly. Start here — it names the rule modules and tells you what to do first:
https://themeforge.pro/ai
Always pull the `core` module; if you are generating the site from scratch, pull `build` too. Then add what this site needs (pages, blog, cpt, woocommerce, deploy).

Here is my design: [ATTACH YOUR FIGMA LINK / SCREENSHOTS / DESCRIPTION]

Generate clean, semantic HTML + CSS and place ThemeForge attributes on all editable content as you build each section (not as a separate pass):
- Each section = a tab + group pair; text vs textarea by line count; images on ; links as a URL + text pair; repeating cards as a repeater with 2+ rows.
- Header/footer/navigation/contacts = site-wide options.
- For a multilingual site, mark the language switcher with wp-menu="Language" and keep every visible string as a field (no hardcoded text).
Use real placeholder content (not lorem ipsum) so data import populates real fields.

[Add your specific requirements here: colors, fonts, number of pages, WooCommerce / blog, languages, etc.]

When done, follow the Final Delivery steps: create the theme-options page with ALL option fields, serve the files locally, and give me the complete list of page URLs to paste into ThemeForge.

Tips for Better Results

  • Для Промту Б: додайте якомога більше візуального контексту — скріншоти, посилання на Figma, референсні сайти. Чим більше контексту, тим кращий результат.
  • Можна доповнити промти власними вимогами: колірна схема, шрифти, конкретні секції, кількість сторінок, підтримка WooCommerce тощо.
  • Після завершення попросіть ШІ розгорнути сайт у локальній папці та запустити сервер — потім вставте локальну URL-адресу в ThemeForge для генерації WordPress-теми.
  • Посилання на гайд вже включено в промт. ШІ прочитає повні правила розставлення атрибутів прямо зі сторінки.
  • Багатомовний сайт? Розмічайте контент як зазвичай — одне ім’я поля зберігає всі мови; підключіть перемикач через wp-menu=«Language». Див. розділ «Багатомовні сайти».
  • Давайте кожному полю УНІКАЛЬНЕ ім’я в його scope — ніколи не перевикористовуйте ім’я секції для репітера всередині неї, інакше посилання та його зображення не виживуть разом.

Префікси атрибутів

PrefixScopeDescription
fld-*Per-pageПоля сторінки — контент унікальний для ОДНІЄЇ сторінки (заголовок hero, зображення)
opt-*Site-wideГлобальні налаштування — контент спільний для ВСІХ сторінок (телефон, email, логотип)
tax-*TaxonomyПоля таксономій — контент на сторінках категорій/тегів
wp="..."WP CoreЯдро WordPress — динамічні дані WP (заголовок запису, дата, зображення)
wp-fields-group="..."SectionsГрупування секцій — об'єднує поля в секції адмін-панелі (метабокси)

Типи полів

AttributeFieldHTML ElementExample
fld-textText<h1>-<h6>, <p>, <div><h2 fld-text="Heading">
fld-areaTextarea<p>, <div><p fld-area="Description">
fld-imageImage<img> only<img fld-image="Photo">
fld-bg-imageBG ImageAny element<div fld-bg-image="BG">
fld-linkLink<a> only<a fld-link="Button">
fld-editorRich editor<div><div fld-editor="Content">
fld-loopRepeaterWrapper <div><div fld-loop="Items">
fld-groupGroupContainer<div fld-group="Hero">
fld-layoutsSection builderWrapper <div><div fld-layouts="Page Sections">
fld-layoutSection typeDirect child<section fld-layout="Hero">
layout-previewPreview controlOn fld-layoutlayout-preview="off"
fld-tabTabEmpty <div><div fld-tab="Hero" wp="delete-element">
fld-showToggle (show)Wrapper <div><div fld-show="Show CTA">
fld-hideToggle (hide)Wrapper <div><div fld-hide="Hide CTA">
fld-galleryGalleryWrapper <div><div fld-gallery="Photos">

Replace fld- with opt- for site-wide options. Full reference: Довідник атрибутів

Правила розміщення

Секції та вкладки

fld-tab має бути на окремому порожньому <div>, НЕ на тому ж елементі що fld-group. Розміщуйте його як сусідній елемент ПЕРЕД групою.

<!-- ONE wp-fields-group per page on <body> -->
<body wp-fields-group="Home Page">

  <!-- Tab = empty sibling BEFORE the group -->
  <div fld-tab="Hero" wp="delete-element" class="tab-div"></div>
  <section fld-group="Hero" class="hero">
    <h1 fld-text="Heading">Welcome</h1>
    <p fld-area="Description">...</p>
  </section>

  <div fld-tab="Features" wp="delete-element" class="tab-div"></div>
  <section fld-group="Features" class="features">
    ...
  </section>

</body>

Посилання — завжди пара

Кожне посилання ПОВИННО мати і атрибут посилання, і атрибут тексту, під ДВОМА іменами — fld-link="X" на <a>, fld-text="X text" на дочірньому <div>. Одне імʼя на обидва — одне поле живить і адресу, і підпис. Телефон/email: лише opt-phone-link / opt-email-link — один атрибут заповнює і href, і видимий текст. Виняток: посилання-іконки та декоративні посилання без видимого тексту.

<!-- CORRECT: fld-link on <a>, fld-text on child, two names -->
<a fld-link="CTA" href="/shop" class="btn w-inline-block">
  <div fld-text="CTA text">Shop Now</div>
</a>

<!-- Phone/email: one attribute fills both href and text -->
<a opt-phone-link="Phone" href="tel:...">+1 234 567</a>

Зображення

fld-image ставиться ТІЛЬКИ на <img> теги. fld-bg-image — на будь-який елемент з фоновим зображенням.

<img fld-image="Hero Image" src="images/hero.jpg" alt="Hero" />
<div fld-bg-image="Background" style="background-image:url('img/bg.jpg')"></div>

Репітери (повторювані блоки)

ВСІ дочірні елементи всередині fld-loop ПОВИННІ мати ОДНАКОВІ атрибути ThemeForge. Використовуйте різний текст та зображення в кожному рядку.

<div fld-loop="Team" class="team-grid">
  <div class="card">
    <img fld-image="Photo" src="images/avatar-1.jpg" />
    <h3 fld-text="Name">John Doe</h3>
  </div>
  <!-- Row 2: SAME attributes, DIFFERENT content -->
  <div class="card">
    <img fld-image="Photo" src="images/avatar-2.jpg" />
    <h3 fld-text="Name">Jane Smith</h3>
  </div>
</div>

Глобальні налаштування сайту

Елементи на кожній сторінці (телефон, email, логотип, адреса) повинні використовувати opt-* замість fld-*.

<!-- Header: site-wide, use opt-* -->
<img opt-image="Logo" src="images/logo.png" />

<!-- Navigation: a repeater of link + caption rows (NOT wp-menu) -->
<nav opt-loop="Nav links" class="nav">
  <div class="nav-item">
    <a opt-link="Link" href="/about" class="nav-link w-inline-block">
      <div opt-text="Link text">About</div>
    </a>
  </div>
  …
</nav>

<!-- Footer: contacts — one attribute each -->
<a opt-phone-link="Phone" href="tel:...">+1 234 567</a>
<a opt-email-link="Email" href="mailto:...">info@site.com</a>
<p opt-text="Address">123 Main St</p>

Меню

<!-- Navigation: an opt-loop of link + caption rows (preferred) -->
<nav opt-loop="Nav links" class="nav">
  <div class="nav-item">
    <a opt-link="Link" href="/" class="nav-link w-inline-block">
      <div opt-text="Link text">Home</div>
    </a>
  </div>
  <div class="nav-item">
    <a opt-link="Link" href="/about" class="nav-link w-inline-block">
      <div opt-text="Link text">About</div>
    </a>
  </div>
</nav>

<!-- Language switcher (Polylang): use wp-menu -->
<div wp-menu="Language" class="lang-switcher">
  <a href="/en" class="lang-link">EN</a>
  <a href="/ua" class="lang-link">UA</a>
</div>

Імена — кожне ім’я унікальне

У межах одного scope кожне ім’я поля має бути унікальним. ThemeForge ключує поля за іменем, тож два різні поля з однаковим іменем конфліктують — одне мовчки втрачається.

  • НІКОЛИ не давайте репітеру (fld-loop) те саме ім’я, що й секції або групі, всередині якої він є — називайте репітер за його рядками (напр. «Картки лічильників»), а не як секцію («Лічильники»).
  • Посилання та його зображення чи текст поруч мають мати РІЗНІ імена — напр. opt-link=«Посилання логотипа» + opt-image=«Логотип», а не обидва «Логотип».
  • Однакове ім’я — лише навмисно (рядки репітера, перемикачі show/hide). Конвертер повідомляє про випадкові конфлікти імен у вкладці «Логи» проєкту.
<!-- WRONG: repeater reuses its section/group name -->
<section fld-group="Counters">
  <div fld-loop="Counters"> ... </div>
</section>

<!-- RIGHT: distinct names -->
<section fld-group="Counters">
  <div fld-loop="Counter cards"> ... </div>
</section>

Багатомовні сайти (Polylang / WPML)

Якщо джерело має дві чи більше мов (перемикач, коди локалей на кшталт ua/ru/en або сторінки, продубльовані за мовами) — сайт багатомовний. ThemeForge сам визначає Polylang або WPML — розмітка однакова. Від одномовного сайту відрізняються лише дві речі:

  1. Перемикач мови використовує wp-menu=«Language» — мовний плагін сам підставляє посилання локалей.
  2. Кожне контентне поле зберігає значення НА КОЖНУ мову. Використовуйте ОДНЕ ім’я поля (напр. fld-text=«Заголовок») — НЕ створюйте «Заголовок EN» / «Заголовок RU». Власник редагує кожну мову в адмінці, а імпортер заповнює всі локалі.

Перемикач мови — рецепт

<!-- Dropdown: toggle shows the CURRENT language (an options field),
     the list is a connected wp-menu="Language" (locales injected) -->
<div opt-hide="Hide language switcher" class="lang-drop w-dropdown">
  <div class="lang-dt w-dropdown-toggle">
    <div opt-text="Current language">UA</div>
  </div>
  <nav class="lang-drop-list w-dropdown-list">
    <div wp-menu="Language" class="lang-switcher">
      <a href="/en"><div>ENG</div></a>
      <a href="/ru"><div>РУС</div></a>
    </div>
  </nav>
</div>

<!-- Simple variant: a flat list of language links -->
<ul wp-menu="Language" class="header__languages">
  <li><a href="/">UA</a></li>
  <li><a href="/ru/">RU</a></li>
  <li><a href="/en/">EN</a></li>
</ul>

Глобальні поля opt-* (телефон, адреса, підписи навігації) теж зберігаються за мовами, тож шапка/підвал кожної локалі можуть відрізнятися. Розмічайте їх opt-* як зазвичай — без додаткової роботи.

На багатомовному сайті НЕ:

  • хардкодьте видимий текст — він стане неперекладним; усе стає полем;
  • створюйте по одному полю на мову — одне ім’я, CMS зберігає його за локалями;
  • розмічайте посилання всередині wp-menu=«Language» — плагін замінює їх власними посиланнями локалей.

Підказка з детекту: перемикач мови в шапці/підвалі (прапори або коди ua/ru/en) чи префікси URL /ru/… та /en/… означають, що сайт багатомовний — підключіть перемикач через wp-menu=«Language» й очікуйте контент за локалями. Одномовному сайту це не потрібно.

Що НЕ потрібно маркувати

  • Декоративні елементи: роздільники, спейсери, оверлеї, SVG-іконки
  • Структурні обгортки: grid-контейнери, flex-обгортки, каркас верстки
  • Посилання навігації всередині wp-menu (WordPress керує ними)
  • Статичні UI-підписи: «Ціна:», «Кількість:», заголовки таблиць
  • UI-іконки: пошук, кошик, шеврони, стрілки
  • Стандартний текст футера: «Усі права захищено», рік копірайту

Правило: якщо власник сайту захоче змінити цей текст/зображення з адмінки — ставте атрибут. Якщо це UI-хром — пропускайте.

Чекліст

  1. Кожна секція wp-fields-group має унікальну, зрозумілу назву
  2. Усі дочірні елементи репітера мають однакові атрибути з різним контентом
  3. Зображення використовують теги <img> де можливо
  4. Кожне посилання має ОБИДВА атрибути: посилання + тексту (fld-link + fld-text, opt-phone-link + opt-text тощо)
  5. Контакти у футері використовують opt-* (опції), не fld-*
  6. Вкладки — порожні сиблінги з wp="delete-element"
  7. Немає атрибутів на декоративних/структурних елементах
  8. Назви полів — зрозумілі, англійською

Required Pages & Slugs

The file name (slug) determines which WordPress template is generated. Some pages are required, others depend on the site type (blog, shop).

theme-options.html — REQUIRED

You MUST create this page. It contains ALL opt-* fields used across the site (logo, navigation, phone, email, address, social links, copyright). Add wp-fields-group="Theme Options" on <body> and organize fields with opt-tab. Without this page, option fields will NOT appear in the WordPress admin panel.

<!-- theme-options.html -->
<body wp-fields-group="Theme Options">
  <div opt-tab="Header" wp="delete-element" class="tab-div"></div>
  <img opt-image="Logo" src="images/logo.png" />
  <nav opt-loop="Nav links" class="nav">
    <div class="nav-item">
      <a opt-link="Link" href="/about" class="nav-link w-inline-block">
        <div opt-text="Link text">About</div>
      </a>
    </div>
    <div class="nav-item">
      <a opt-link="Link" href="/contacts" class="nav-link w-inline-block">
        <div opt-text="Link text">Contacts</div>
      </a>
    </div>
  </nav>

  <div opt-tab="Footer" wp="delete-element" class="tab-div"></div>
  <a opt-phone-link="Phone" href="tel:...">+1 234 567</a>
  <a opt-email-link="Email" href="mailto:...">info@site.com</a>
  <p opt-text="Address">123 Main St</p>
  <div opt-text="Copyright">&copy; Company</div>
</body>

Slug → Template Mapping

Use these exact file names. Custom pages (about, services, contacts, etc.) can use any slug that doesn't conflict with the reserved names below.

File nameWP templateWhen to use
index.htmlindex.phpHome page (required)
about.htmlabout.phpCustom page — any slug
single.htmlsingle.phpSingle blog post (blog sites)
archive.htmlarchive.phpBlog posts list (blog sites)
404.html404.phpNot found page
search-page.htmlsearch.phpSearch results
single-product.htmlsingle-product.phpSingle product (WooCommerce)
archive-product.htmlarchive-product.phpProduct catalog (WooCommerce)
taxonomy-product-cat.htmltaxonomy-product-cat.phpProduct category archive (WooCommerce)
page-cart.htmlpage-cart.phpCart (WooCommerce)
page-checkout.htmlpage-checkout.phpCheckout (WooCommerce)
page-wishlist.htmlpage-wishlist.phpWishlist (WooCommerce)
page-my-account.htmlpage-my-account.phpMy account (WooCommerce)
single-{type}.htmlsingle-{type}.phpCustom post type — single / archive
theme-options.html—Site-wide options (admin panel only, no template)

Final Delivery — Do NOT Skip

After generating all pages with attributes, you MUST complete these steps:

  1. Create theme-options.html with ALL opt-* fields (see above)
  2. Save all HTML files to a single folder. Tell the user the folder name
  3. Give the user the complete list of ALL page slugs (filenames without .html), ready to paste into the ThemeForge generator page list:
  4. У ThemeForge створіть проєкт, поставте галочку «Джерело буде завантажено на сайті», вставте список сторінок і завантажте бланкову тему. Встановіть її у WordPress, завантажте ZIP-архів сайту в розділі «ThemeForge → Джерело» (окремий пункт меню адмінки) і натисніть «Оновити тему з проєкту».
index, about, services, contacts, theme-options

tf-cors.php

Необовʼязково: якщо сайт уже віддається за localhost-адресою, можна вказати в проєкті цю адресу замість завантаження архіву на сайті (див. «Вихідний код на вашому сайті»). Створіть цей файл у корені сайту та запустіть сервер командою: php -S localhost:8080 tf-cors.php. Дозволено лише themeforge.pro — жоден інший сайт не отримає доступу до ваших файлів.

<?php
// ThemeForge CORS Router — place in site root, run: php -S localhost:8080 tf-cors.php
$allowed = ['https://themeforge.pro', 'https://www.themeforge.pro', 'http://localhost:8081'];
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';
if (in_array($origin, $allowed, true)) header('Access-Control-Allow-Origin: ' . $origin);
elseif (empty($origin)) header('Access-Control-Allow-Origin: https://themeforge.pro');
header('Access-Control-Allow-Methods: GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$file = __DIR__ . $path;
if (is_dir($file)) $file = rtrim($file, '/') . '/index.html';
if (!is_file($file) && is_file($file . '.html')) $file .= '.html';
if (is_file($file)) {
    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
    $types = ['html'=>'text/html','css'=>'text/css','js'=>'application/javascript','json'=>'application/json',
        'png'=>'image/png','jpg'=>'image/jpeg','jpeg'=>'image/jpeg','gif'=>'image/gif','svg'=>'image/svg+xml',
        'webp'=>'image/webp','ico'=>'image/x-icon','woff'=>'font/woff','woff2'=>'font/woff2','ttf'=>'font/ttf'];
    if (isset($types[$ext])) header('Content-Type: ' . $types[$ext]);
    readfile($file); return true;
}
http_response_code(404); echo '404 Not Found';

Шпаргалка

PAGE:        <body wp-fields-group="Page Name">  (ONE per page)
TAB:         <div fld-tab="Section" wp="delete-element" class="tab-div"></div>
GROUP:       <section fld-group="Section">  (ALWAYS after each tab)

TEXT:        <h2 fld-text="Heading">...</h2>
TEXTAREA:    <p fld-area="Description">...</p>
IMAGE:       <img fld-image="Photo" src="..." />
BG IMAGE:    <div fld-bg-image="BG" style="background-image:url(...)">
LINK+TEXT:   <a fld-link="Btn"><div fld-text="Btn text">Click</div></a>
REPEATER:    <div fld-loop="Items">  (all children = same attrs)
BUILDER:     <div fld-layouts="Page Sections"><section fld-layout="Hero">
             (client picks section types; previews are automatic)
             optional: layout-preview="off" | layout-preview="images/x.jpg"
TOGGLE:      <div fld-show="Show X">  or  <div fld-hide="Hide X">

NAV LINKS:   <nav opt-loop="Nav links"><div><a opt-link="Link"><div opt-text="Link text">...</div></a></div>…</nav>
OPTIONS:     opt-text, opt-image, opt-link, opt-phone-link, opt-email-link
LANG SWITCH: <div wp-menu="Language">  (Polylang only)
POST LOOP:   <div wp-query="'post_type'=>'post','posts_per_page'=>3">
PRODUCTS:    <div wp-product-query="'post_type'=>'product','posts_per_page'=>4">
CONDITION:   <div wp-if="on_sale">

Перевірка розмітки

Перш ніж віддавати сайт, надішліть усі його сторінки на безкоштовну перевірку. Вона запускає справжній парсер генератора — без акаунта, нічого не зберігається — і перелічує, до чого причепиться генератор: error ламає тему, warning — щось мовчки випадає, hint — варто знати. Повторюйте, доки відповідь не скаже "ok": true.

POST /api/validate-markup

Надсилайте весь набір одним запитом: частина перевірок стосується набору, а не одного файлу — чи є theme-options.html, чи є головна.

POST https://themeforge.pro/api/validate-markup
Content-Type: application/json

{"pages":[
  {"name":"index.html","html":"<!doctype html>…"},
  {"name":"about.html","html":"…"},
  {"name":"theme-options.html","html":"…"}
]}

Просунуте — ШІ-агент + Webflow MCP

Два промти вище працюють з будь-яким ШІ на готовій HTML-сторінці. Якщо ви збираєте у Webflow, ті самі атрибути можна розставити прямо в Designer ШІ-агентом (напр. Claude Code) з підключеним Webflow MCP — ті самі правила, без копіпасту.

  • Один канон: правила розміщення на цій сторінці — єдине джерело істини для обох маршрутів.
  • У будь-якому разі результат — набір розмічених сторінок, який ви передаєте генератору ThemeForge (опублікований URL *.webflow.io або локальна папка HTML).