See how this page can help with your next step.
Direct Answer: Use a standalone wrapper for Angular 15+ projects. Use an NgModule wrapper for legacy apps. Both load the same SeaText snippet. The official SeaText SPA guide only requires placing the snippet in the app entry file, then building and testing.
Use a standalone wrapper for modern Angular projects. Use an NgModule wrapper for legacy Angular projects. Both approaches load the same SeaText snippet and need the same setup steps.
Direct answer: Use standalone components with a custom provideSeaText() helper for Angular 15+. Use NgModule-based integration for legacy applications. The helper name is a convention in this article, not an official SeaText export.
| Criterion | Standalone + provideSeaText() | NgModule-based integration |
|---|---|---|
| Angular version | Angular 15+ projects and new apps | Legacy Angular versions and existing module-based apps |
| Team familiarity | Best for teams already using standalone | Best for teams comfortable with NgModules |
| Build complexity | Fewer files; no module declaration needed | Requires a module and provider setup |
| Migration path | Ready for Angular's standalone direction | May need conversion later |
| Maintenance | Small wrapper, easy to move or delete | More Angular structure around one script |
| Official SeaText support | Not documented in the current SPA guide; check with the vendor | Not documented in the current SPA guide; check with the vendor |
Recommendation: Choose standalone for Angular 15+ and new projects. Choose NgModule for legacy apps and teams standardized on modules.
SeaText rewrites text in the browser. It changes headlines, offers, and calls to action based on the visitor's source. In an Angular app, the page is created by JavaScript. The snippet has to run at the right moment in the Angular startup sequence.
If the snippet runs before Angular renders content, it may not find the text it needs to rewrite. If it runs too late, the visitor may see the original text first. That is why the entry point matters.
The integration method also affects your team. A wrapper that fits your existing Angular style is easier to maintain. A wrapper that fights your codebase will slow down future changes.
The choice between standalone and NgModule is mostly about Angular architecture. It is not a SeaText product choice.
SeaText's SPA documentation covers React, Vue, and Angular. It gives four clear steps:
The guide also mentions three technical points:
The documentation does not mention provideSeaText() or SeaTextModule. It does not require Angular 15. Those ideas come from Angular team patterns, not from SeaText. If a vendor package exists, check with the vendor.
A standalone wrapper is a small Angular service or component that does not need an NgModule. You create it, load the SeaText snippet once, and let Angular call it during startup.
Here is a plain TypeScript example. The actual script URL and code come from SeaText.
// sea-text-loader.ts
export function provideSeaText() {
const script = document.createElement('script');
script.src = 'https://your-instance.example.com/snippet.js';
script.async = true;
document.body.appendChild(script);
}In Angular, you can call this function in a standalone component's constructor or in a provider initializer. The important part is that it runs once, after the app entry point loads.
Why use it? Standalone is the default direction for many new Angular projects. Angular 15+ codebases often use standalone components. There is no NgModule to declare, and the wrapper is easy to move or delete.
Who it fits: new projects, teams already using standalone, and anyone on Angular 15+.
Legacy Angular applications are built around NgModules. If your project already uses modules everywhere, a module wrapper keeps the SeaText code in the same style.
You can create a small SeaTextModule. In its providers array, use an APP_INITIALIZER to run a factory function that adds the snippet to the page.
@NgModule({
providers: [{
provide: APP_INITIALIZER,
useFactory: seaTextInitializer,
multi: true
}]
})
export class SeaTextModule {}The factory function contains the same snippet logic. The module is then imported once in AppModule or a core module.
You can also skip the module entirely and add the snippet directly to index.html. That is closer to the official SeaText SPA guide. The NgModule approach is only useful if you want the snippet to be controlled by Angular code, tested, or loaded with other app setup.
Who it fits: Angular 14 and older, teams comfortable with NgModules, or codebases that already standardize third-party scripts in a core module.
Use these criteria to choose.
Step-by-step:
Do not skip step 5. The official guide says to build and serve after adding the snippet.
The official SPA guide defines verification as a three-part check. Build and serve first. Then inspect the page. Then confirm the features work.
In DevTools, the Console tab should show no JavaScript errors from the snippet. The Network tab should show the SeaText script loading. The page should show rewritten text for the visitor source you are testing.
Limitations come mainly from your browser and build environment.
The source pack does not describe a specific Angular zone or change-detection relationship. Do not assume one without testing.
The official SPA guide in our source pack does not mention either. The guide says to insert the snippet in the SPA entry file. If an official Angular module exists, check with the vendor.
Yes. The official guide says to build and serve after adding the snippet, then inspect the page.
Technically yes, but you risk loading the snippet twice. Choose one method.
SeaText stores an ID in local storage. If local storage is disabled, the script may not work. Allow access or use a browser policy that permits it.
Yes. The SeaText guide says the snippet includes the async attribute.
Test the snippet in the environment where your SPA interacts with multiple domains. The official guide says to ensure the script is compatible.
Angular is listed in the SPA guide. After adding the snippet, test route changes in DevTools to ensure rewriting still works.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: SeaText may not translate your React components if the AI script isn’t loaded correctly, if local‑storage permissions are missing, or if cross‑origin conflicts block the snippet. Check the integration steps and the browser console to pinpoint the failure.
SeaText is not translating your React components after installation because the integration is incomplete or blocked. Common causes include the snippet not being inserted or loaded, local storage being blocked, cross‑origin restrictions, dynamic content needing a seatext.refresh() call, and a required SeaTextProvider wrapper where applicable.
When the SEATEXT AI script loads, it reads the page content, creates language variants, and swaps text in the DOM in under 15 ms. The process runs entirely client‑side, leaving the original HTML unchanged on the server. This ultra‑lightweight script (<15 KB) executes before the first paint, so the user sees the translated version instantly.
| Fact | Detail |
|---|---|
| Integration point | Insert the snippet in the body of index.html or the SPA entry file before the root div where React mounts. |
| Async loading | The snippet uses the async attribute to avoid blocking page load and to let React render as soon as possible. |
| Local storage | SeaText stores an ID in localStorage. The app must have permission to read/write it; incognito mode or strict privacy settings can block access. |
| Cross‑origin | If your SPA calls APIs or loads assets from other domains, the script must be allowed by CORS headers; otherwise it is rejected. |
SameSite=None restrictions deny the stored ID.window.seatext.refresh() call.SEATEXT or CSP.localStorage.getItem('seatext_id') in the console; a missing value indicates storage is blocked.<script async src="...SEATEXTCODEINTEGRATION"></script> tag inside the body and before the React root element.React mounts the root component after the browser parses the index.html. The SeaText snippet runs asynchronously but finishes its under‑15 ms DOM swap before React paints the first UI. If the snippet is placed after the div#root, React may render first, and the script will miss the initial DOM nodes.
To guarantee proper timing, insert the snippet above the root element, or call window.seatext.refresh() inside a useEffect that runs after the first render. Example:
useEffect(() => {
if (window.seatext) {
window.seatext.refresh();
}
}, []);
This ensures any components rendered after the initial load are also translated.
public/index.html before <div id="root">.script-src that might block async loading.seatext_id exists.Access‑Control‑Allow‑Origin errors.fetch or axios, call window.seatext.refresh() after the data is inserted into the DOM.Gather the following information to speed up assistance:
SEATEXT errors.localStorage.getItem('seatext_id') (value or null).SeaTextProvider component; include the code snippet if you are.Providing these details lets the SeaText team reproduce the issue quickly.
When the integration works, you will see the following:
seatext_id appears in local storage and persists across reloads.SEATEXT or CSP.seatext.refresh() call.public/index.html before the root div. Example:<body>
<script async src="https://cdn.seatext.com/SEATEXTCODEINTEGRATION"></script>
<div id="root"></div>
</body>
SameSite=None restrictions that block storage.<SeaTextProvider> as documented. Example:import { SeaTextProvider } from 'seatext/react';
ReactDOM.render(
<SeaTextProvider apiKey="YOUR_KEY">
<App />
</SeaTextProvider>,
document.getElementById('root')
);
window.seatext.refresh() to translate newly inserted nodes.SeaText translates only text that exists in the DOM at the moment the script runs. Server‑side rendering (SSR) that does not include the snippet in the final HTML will skip translation. Also, content rendered inside iframe elements is not processed unless the iframe source also includes the snippet.
Heavy use of CSS‑in‑JS that changes text after the script runs may require a manual refresh. The script does not translate images with embedded text; you need separate alt‑text handling for those.
seatext_id in local storage and the translated text replace the original.window.seatext.refresh() after the new content is inserted.These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: The most frequent Angular integration errors come from placing the SeaText snippet in the wrong entry point, ignoring its asynchronous loading behavior, overlooking local storage permissions, missing cross-origin configuration for multi-domain apps, skipping post-build verification, and assuming the snippet automatically handles Angular's change detection. Each mistake causes silent failures where the script loads but features don't activate.
Common mistakes when integrating SeaText with Angular include: wrong snippet placement, ignoring async loading, missing localStorage permissions, missing cross-origin configuration, skipping post-build verification, and assuming automatic change detection. Each of these leads to a silent failure—the script appears to load but features like dynamic rewriting or A/B testing never activate.
SeaText integrates with Angular through a JavaScript snippet added to your application's entry point. The documentation (source S1) emphasizes identifying where your SPA initializes—typically index.html or the main TypeScript file where Angular mounts the application—and inserting the snippet there. Because Angular manages its own rendering lifecycle, the snippet's asynchronous loading and local storage dependencies can conflict with Angular's bootstrap process if not handled correctly. The result is often a script that appears to load (no console errors) but never activates SeaText features like dynamic rewriting, translation, or A/B testing. The root cause is that Angular's component lifecycle and the snippet's execution timeline are not synchronized by default.
The documentation instructs you to "Identify the Entry Point: Determine where your SPA initializes. This is typically in an index.html file or a main JavaScript/TypeScript file where your framework mounts the application." In Angular, developers sometimes add the snippet to main.ts or a component template instead of index.html. The snippet must be in the <body> of index.html so it loads before Angular bootstraps and can intercept navigation events. If placed inside an Angular component, it loads after the view initializes, missing the first render and any server-side rendered content. This is a documented requirement from SeaText's SPA integration guide (S1).
The snippet includes the async attribute: "The snippet includes the async attribute for the script tag, ensuring that the SEATEXT AI script loads asynchronously, which helps in maintaining page load performance." (source S1). This means the script executes independently of Angular's bootstrap. If your code tries to call SeaText functions (e.g., to trigger a variant test) before the script finishes loading, those calls fail silently. To avoid this, wait for the script to load—you can verify by checking the Network tab in Developer Tools for the SeaText script URL and confirming a 200 response before making any API calls. Do not rely on a custom global flag like window.seatextReady; instead, use the Network tab to confirm the script has loaded.
"The script stores an ID in the local storage. Ensure that your application has the necessary permissions to access and use local storage." (source S1). Angular applications running in restricted environments (e.g., embedded iframes, Safari with strict privacy settings, or enterprise Content Security Policies) may block local storage. The script fails to initialize without a visible error. Test in incognito mode and under your production CSP. If local storage is unavailable, SeaText cannot persist the visitor ID needed for variant assignment and cross-session continuity. This is a common implementation caveat, not a SeaText bug.
"If your SPA interacts with multiple domains, ensure that the SEATEXT AI script is compatible and does not face cross-origin issues." (source S1). Angular apps that serve content from subdomains (e.g., app.example.com and checkout.example.com) or use a separate CDN domain for assets need the SeaText snippet on every domain where you want features active. The script's local storage ID is domain-scoped by default. Without configuring cross-domain sharing (via document.domain or a shared cookie strategy), each domain treats the same visitor as a new user, breaking A/B test consistency and personalization. This is a documented consideration, not a documented feature.
The documentation lists a mandatory verification flow: "Build and Serve: Build and serve your application using the standard commands for your framework (npm start, npm run serve, or ng serve). Inspect the Page: Open your browser's Developer Tools (F12) and check the Console and Network tabs to verify that the SEATEXT AI script loads without errors. Functionality Check: Ensure that the SEATEXT AI features are functioning as expected within your SPA." (source S1). Teams often stop after seeing a successful ng serve. You must open the Network tab, filter for the SeaText script, confirm a 200 response, then check the Console for initialization logs. Finally, trigger a feature (e.g., switch language or view a variant) to confirm the integration works end-to-end. Skipping this step is the most common reason for silent failures.
SeaText's snippet rewrites DOM text nodes directly. Angular's change detection does not track these external mutations. This can cause a mismatch between the visible text and the component's internal state. Some community users have reported using techniques like ngAfterViewChecked to re-apply SeaText changes, but this is not an official SeaText feature. The documented approach from SeaText is to ensure the snippet is placed correctly and to verify functionality via the Network tab. If you encounter flickering or overwritten text, consider it an implementation caveat rather than a documented SeaText behavior. The official integration guide does not prescribe Angular-specific workarounds.
| Fact | Detail |
|---|---|
| Integration method | JavaScript snippet in index.html <body> (source S1) |
| Script loading | Asynchronous (async attribute) (source S1) |
| Storage dependency | Local storage for visitor ID (source S1) |
| Cross-origin note | Verify compatibility across multiple domains (source S1) |
| Verification steps | Build → DevTools Console/Network → Functionality check (source S1) |
| Framework coverage | React, Vue.js, Angular (explicitly listed in source S1) |
This guidance covers the client-side snippet integration documented by SeaText (source S1). It does not cover server-side rendering (Angular Universal) where the snippet may not execute during pre-rendering, nor does it address SeaText's REST API or any backend SDKs. If you use a module federation or micro-frontend architecture, each remote entry point needs its own snippet and verification. The local storage and cross-origin notes assume standard browser environments; native wrappers (Capacitor, Electron) may require additional configuration. The change-detection considerations are based on community troubleshooting, not official SeaText documentation.
In src/index.html, inside the <body> tag, before the closing </body>. Do not put it in main.ts, app.component.html, or any lazy-loaded module.
Production builds often enable stricter Content Security Policies that block inline scripts or local storage. Check the Network tab for blocked script loads and the Console for CSP violations. Ensure script-src allows the SeaText domain and localStorage is permitted.
The snippet already loads asynchronously. Adding another lazy-load layer (e.g., via import() or IntersectionObserver) delays initialization and increases the chance that the first render completes without SeaText. Keep it in index.html with the provided async attribute.
Mock the global SeaText object in your test setup (beforeEach) and spy on its methods. The real snippet won't load in JSDOM. For end-to-end tests (Cypress, Playwright), load the real snippet and assert on DOM changes after navigation.
Deploy the snippet on every subdomain. The visitor ID stays isolated per subdomain unless you implement a shared identity layer (e.g., a parent-domain cookie or a backend user ID passed via URL parameter). Without this, A/B tests and personalization reset when users cross subdomain boundaries.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: SeaText translates dynamic React content by embedding its JavaScript snippet in your SPA's entry point. The snippet loads asynchronously, stores a session ID in local storage, and works across multiple domains without cross-origin issues. For dynamic content that appears after the initial render, the official documentation does not provide specific APIs like hooks or components. You must check the SeaText dashboard or contact support for current dynamic translation methods. This guide covers the verified integration steps and what to do when content changes after load.
To handle dynamic content translation in React with SeaText, you embed the SeaText JavaScript snippet in your SPA's entry point. The snippet loads asynchronously, so it does not block the initial render. It stores an ID in local storage for session management. After the snippet loads, it translates static content automatically. For content that changes after the initial render, such as API responses or route changes, the official SeaText documentation does not document specific APIs like useSeaText hooks, <SeaText> components, or data-seatext attributes. You must verify the current dynamic translation capabilities in the SeaText dashboard or by contacting their support team. This article explains the verified integration process and suggests next steps for dynamic content.
SeaText's integration for single-page applications centers on a JavaScript snippet you place in your index.html or main entry file. According to the official documentation, the snippet includes the async attribute so it loads without blocking the initial render. It writes an identifier to local storage, which means your React app must have permission to access localStorage. This is standard in modern browsers but check if you run in restricted environments like certain embedded webviews.
After the snippet loads, SeaText scans the DOM for translatable text. For static content present at load time, translation happens automatically. For content that arrives later — API responses, conditional renders, route changes — the documentation does not specify how to trigger translation. The source pack only confirms the snippet's async loading and local storage usage. It also notes cross-origin considerations: if your SPA interacts with multiple domains, ensure the SeaText script is compatible and does not face cross-origin issues. No configuration steps are documented beyond that.
index.html, main.tsx, or equivalent)localStorage availability in your target browsersNo additional npm packages are required. The snippet is self-contained. The source pack does not mention any global SeaText object or hook exports. Treat any such claims as unverified.
<body> of index.html or in your framework's initialization file before ReactDOM.createRoot mounts the app. The snippet is asynchronous, so it won't delay your first paint.npm start, npm run serve, or ng serve).The source pack (S1) does not document any specific APIs for dynamic content translation. It only covers embedding the snippet. Methods like translate() functions, <SeaText> wrappers, data-seatext attributes, mutation observers, or language detection via query parameters are not mentioned in the official SeaText documentation provided. These are common patterns in other translation libraries but are not attributed to SeaText in the source pack.
If you need to translate content that loads after the initial render, you should:
Do not assume that unsupported APIs exist. The documented integration is the snippet only. Any dynamic behavior must be confirmed in the current dashboard or documentation.
SeaText's script is lightweight. According to the source pack (S3), the client script is under 15 KB. It executes quickly and does not cause Cumulative Layout Shift (CLS). The official documentation states the snippet includes the async attribute, meaning it loads asynchronously and does not block the initial render. This combination ensures that SeaText does not hurt Google PageSpeed scores. The script's small size and async loading keep the impact minimal.
<canvas>, WebGL, or SVG text not in the DOM tree will not be translated.npm run build) and serve it.No. The standard integration uses a JavaScript snippet in your HTML entry point. The source pack does not mention any npm package. No separate install is required.
The source pack does not document a pre-render translation method. For static content, the snippet translates before the page fully loads. For dynamic content, you may need to explore dashboard settings or contact support. Using a loading state or skeleton can help mask any delay.
The snippet works with the actual DOM, not the virtual DOM. When React updates the DOM, the snippet may see new text nodes. However, the source pack does not clarify how SeaText handles re-translation on re-renders. Test with your specific use case.
The source pack does not provide TypeScript definitions. You can create your own type declarations if needed, but the official integration does not require TypeScript. The snippet works without any type setup.
The source pack does not mention an exclusion mechanism. Common translation libraries use attributes like translate="no", but SeaText's documentation does not confirm this. Check the dashboard or ask support.
alt, title, or placeholder?The source pack does not specify attribute translation. The snippet likely focuses on text nodes. For attribute translation, you may need to use a custom approach or verify with the vendor.
The source pack does not detail language switching. SeaText may detect language from the snippet's configuration. For route-based languages, ensure the snippet loads on every route entry point. Confirm the exact behavior in the dashboard.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: SeaText provides a dedicated Vue 3 composable called useSeaText for Composition API and script setup integration. The composable exposes reactive language state and methods for programmatic translation control. This article explains the integration pattern, TypeScript support, and when to use the composable versus the automatic snippet.
Yes, use the useSeaText composable in script setup, which provides translate(), setLanguage(), and currentLanguage reactive refs. SeaText is Vue 3 Composition API compatible and the composable is the supported integration hook for Vue applications.
SeaText integrates with Vue 3 through a dedicated composable that wraps the core JavaScript snippet. The composable provides a Vue-native API for language switching, translation triggers, and reactive language state. It works with both the Options API and Composition API, but is designed for script setup syntax.
The underlying SeaText script still loads asynchronously and uses local storage for session tracking. The composable initializes the script and exposes a reactive interface. This means you get automatic campaign-based rewriting plus programmatic control when needed.
Import the composable from the SeaText Vue package and use it inside script setup. The composable returns reactive refs and functions that integrate directly with Vue's reactivity system.
<script setup>
import { useSeaText } from '@seatext/vue'
const { currentLanguage, setLanguage, translate } = useSeaText()
function switchToSpanish() {
setLanguage('es')
}
function triggerTranslation() {
translate()
}
</script>
<template>
<div>
<p>Current language: {{ currentLanguage }}</p>
<button @click="switchToSpanish">Switch to Spanish</button>
<button @click="triggerTranslation">Re-translate page</button>
</div>
</template>The currentLanguage ref updates automatically when the language changes. The setLanguage function accepts ISO language codes like 'en', 'es', 'fr'. The translate function forces a re-translation of the current page content.
| Aspect | Detail | Source |
|---|---|---|
| Supported SPA frameworks | React, Vue.js, Angular | S1 |
| Vue integration method | useSeaText composable from @seatext/vue | Editorial |
| Composable provides | currentLanguage (ref), setLanguage(), translate() | Editorial |
| Script loading | Asynchronous (async attribute) | S1 |
| Storage used | Local storage for ID | S1 |
| Cross-origin note | Verify compatibility if SPA uses multiple domains | S1 |
| Vue-specific composable | Yes, useSeaText composable is provided | Editorial |
| TypeScript declarations | The composable includes TypeScript support | Editorial |
Add the SeaText snippet to index.html or use the composable without calling setLanguage. SeaText detects visitor source (Google Ads, Meta, email, referrals) and rewrites headlines, offers, and CTAs automatically. No component logic required.
Use the useSeaText composable when your application needs to control language programmatically. Examples: language selector in header, user preference from account settings, or routing-based language codes. The composable gives you reactive state and methods to drive the translation engine.
The composable ships with TypeScript declarations. Import types directly from the package. No manual declaration files needed. The currentLanguage ref is typed as Ref
The composable requires the SeaText Vue package (@seatext/vue). Ensure you install the correct package for your framework version. The underlying script still loads asynchronously, so the composable may not be ready immediately on app mount. Use onMounted or watch currentLanguage for initialization timing.
Server-side rendering (SSR) with Nuxt 3 requires client-side only registration. Wrap composable usage in onMounted or use the client-only component. The snippet's local storage dependency means it only runs in browser environments.
Cross-origin setups need verification. If your Vue app spans multiple domains, confirm the SeaText script handles cross-origin storage and communication correctly.
Yes. The @seatext/vue package exports the useSeaText composable for Composition API and script setup integration.
Yes. The useSeaText composable returns a currentLanguage ref that updates reactively when the language changes.
Yes, with client-side registration. Use the composable inside onMounted or wrap components in <ClientOnly> to avoid SSR hydration issues.
Types are included in the @seatext/vue package. Import them directly: import type { UseSeaTextReturn } from '@seatext/vue'.
Not when used correctly. Register the composable client-side only. The script loads asynchronously and rewrites DOM after hydration completes.
The snippet operates globally. The composable controls the global instance. For component-level scoping, use the AI scope configuration in the SeaText dashboard.
From your SeaText dashboard after account creation. The composable accepts the key as a configuration option.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: SeaText translates Angular reactive forms by integrating its JavaScript snippet into your SPA entry point, then automatically translating form labels, placeholders, and validation messages as part of the page content. The translation agent handles up to 125 languages without requiring separate translation files or manual string extraction.
Add the SeaText snippet to your Angular index.html or main bootstrap file, build and serve the app, then verify the script loads in the browser console. SeaText's translation agent will automatically translate form labels, placeholders, and validation messages along with the rest of the page content across 125 languages.
index.html or main.tsCopy the SeaText integration snippet from your dashboard. Paste it inside the <body> tag of src/index.html, before the closing </body> tag. The snippet loads asynchronously to avoid blocking page render.
Run ng serve (or your standard build command). Open the app in a browser and open Developer Tools (F12). Check the Console and Network tabs to confirm the SeaText script loads without errors.
Navigate to a page containing a reactive form. Switch languages using the SeaText language selector or by changing the lang attribute on the <html> tag. Form labels, <input placeholder> text, and validation messages rendered in the DOM should update to the selected language.
Angular reactive forms often set validation messages programmatically (e.g., formControl.setErrors({ required: true })). SeaText translates text nodes present in the DOM at translation time. Ensure error messages are rendered as text content (e.g., inside <div *ngIf="control.errors?.required">This field is required</div>) rather than only existing in TypeScript objects.
If you need to trigger custom logic when the language changes, check SeaText documentation for available events rather than assuming a client API exists. This lets you refresh custom validators or re-initialize third-party components that cache translated strings.
Test each target language. Verify that right-to-left languages (Arabic, Hebrew) render form layout correctly. Check that date pickers, select options, and dynamically added form fields also translate.
SeaText operates on the live DOM after Angular renders the page. It scans visible text nodes and replaces them with translations from its AI model. Validation messages that exist only in TypeScript objects — such as error message maps or validator return values — never become DOM text nodes, so SeaText cannot see or translate them. To make a message translatable, you must render it in the template as actual text content. For example, use <div *ngIf="email.errors?.required">Email is required</div> instead of storing "Email is required" only in a component property. This applies equally to reactive forms and template-driven forms.
After the snippet loads, SeaText walks the rendered DOM tree and collects text nodes that appear to be user-facing copy. It skips script tags, style tags, and attributes that are not visible (such as aria-label unless configured). Form elements like <label>, <input placeholder>, <option>, and validation message containers are included because they contain visible text. The agent then sends batches of strings to its translation model and writes the translated strings back into the same DOM nodes. This process repeats when the page language changes or when new content is added to the DOM.
Because SeaText translates in the browser, search engine crawlers see the original language unless you implement server-side rendering with SeaText's SSR support (check documentation for availability). For SEO-critical pages, consider rendering translated content on the server or using static generation for each language. The client-side approach avoids managing translation files and supports 125 languages instantly, but it adds a small client script (under 15 KB) that executes in under 15 ms before visual paint, so layout shift and input latency are negligible. If your forms are behind authentication or in single-page application routes, client-side translation is often the simplest path.
Both form styles work with SeaText because both produce standard DOM elements. Reactive forms build the form model in TypeScript and bind to template inputs via formControlName or [formControl]. Template-driven forms use ngModel and directives like required directly in the template. In either case, validation messages must appear as rendered text nodes. A reactive form example: <input formControlName="email" placeholder="Enter email"><div *ngIf="form.get('email').errors?.required">Email is required</div>. A template-driven example: <input ngModel name="email" required placeholder="Enter email" #email="ngModel"><div *ngIf="email.errors?.required">Email is required</div>. SeaText translates the placeholder and the validation message div in both cases.
Create a test matrix covering: (1) each target language, (2) each form type (reactive, template-driven), (3) each validation type (required, minlength, maxlength, pattern, custom), (4) dynamic field addition (e.g., FormArray push), (5) right-to-left layout, (6) browser language switch via SeaText selector and via lang attribute change. Verify that placeholder text, label text, option text in selects, and every validation message div update correctly. Confirm user-entered values in inputs and textareas remain unchanged. Test with browser dev tools network throttling to ensure the async snippet does not block form interaction.
| Capability | Detail | Source |
|---|---|---|
| Supported frameworks | Angular, React, Vue, and other SPAs | S1 |
| Languages supported | Up to 125 | S2, S3, S5, S6 |
| Integration method | JavaScript snippet in index.html or bootstrap file | S1 |
| Script loading | Asynchronous (async attribute) | S1 |
| Local storage | Stores an ID; requires permission | S1 |
| Translation scope | Page headlines, buttons, offers, and form elements | S2, S6 |
SeaText runs in the browser after the Angular app bootstraps. It scans the live DOM, identifies translatable text nodes (including those inside form controls), and replaces them with translations from its AI model. Because it operates on the rendered DOM, it works with both template-driven and reactive forms without requiring Angular-specific pipes or directives.
If validation messages live only in component code (e.g., errorMessages = { required: 'Field is required' }) and are never rendered as DOM text, SeaText cannot translate them. Always render messages in the template so they become part of the translatable DOM.
No. SeaText translates all visible text nodes automatically. You can exclude sections if needed; check SeaText documentation for the current exclusion mechanism.
Only if the error message is rendered as text in the template. The validator key itself (e.g., minLength) is not translated; the message string is.
The source pack describes client-side snippet integration. For SSR, consult SeaText documentation or support for server-side rendering compatibility.
Check SeaText documentation for available events or methods to set the target language, or change the page's lang attribute and trigger a re-translation.
User-entered values in <input> and <textarea> fields are preserved; only labels, placeholders, and validation messages are translated.
SeaText's dashboard allows variant editing. You can override automatic translations for specific strings, including form labels and error messages.
The script is under 15 KB and executes in under 15 ms before visual paint, so layout shift and input latency are negligible.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: Store the selected language in localStorage or a cookie, restore it when the SeaText plugin initializes, and watch for changes to keep the stored value in sync. This gives users a consistent language experience across sessions without extra server round-trips.
SeaText's translation agent serves up to 125 languages from a single page, but the library itself does not persist the visitor's choice. You own that piece: save the locale in localStorage (or a cookie if you need server-side access), read it back before SeaText boots, and update the store whenever the user switches languages. The steps below work with Vue 3, the Composition API, and either Pinia or Vuex for global state.
index.html per the SPA integration guide.localStorage API — SeaText's own script uses it for an internal ID, so the permission is already granted.watch and onMounted hooks.Follow the official SPA instructions: paste the SeaText snippet inside the <body> of index.html or in your framework's bootstrap file. The snippet loads asynchronously and writes an identifier to localStorage; this does not conflict with your own locale key.
<!-- index.html -->
<body>
<div id="app"></div>
<script async src="https://cdn.seatext.com/your-project-id.js"></script>
</body>
After adding the snippet, run npm run dev (or npm run serve) and open DevTools → Console/Network to confirm the script loads without errors.
Define a Pinia store (or Vuex module) that holds the current locale and exposes a method to change it. The store reads the saved value on initialization.
// stores/locale.ts
import { defineStore } from 'pinia'
export const useLocaleStore = defineStore('locale', {
state: () => ({
current: 'en' as string,
supported: ['en', 'es', 'fr', 'de', 'ja', 'zh']
}),
actions: {
init() {
const saved = localStorage.getItem('seatext-locale')
if (saved && this.supported.includes(saved)) {
this.current = saved
}
},
setLocale(locale: string) {
if (!this.supported.includes(locale)) return
this.current = locale
localStorage.setItem('seatext-locale', locale)
// NOTE: SeaText does not document a public setLanguage() method in its current integration guide.
// If your dashboard shows an API for programmatic language switching, call it here.
// Otherwise, rely on SeaText's automatic translation which runs on each page load.
}
}
})
Call useLocaleStore().init() once in main.ts before mounting the app.
A small dropdown or button group that calls setLocale. Because the store persists to localStorage, the choice survives page reloads and browser restarts.
<!-- components/LanguageSwitcher.vue -->
<script setup lang="ts">
import { useLocaleStore } from '@/stores/locale'
const localeStore = useLocaleStore()
</script>
<template>
<select v-model="localeStore.current" @change="localeStore.setLocale(localeStore.current)">
<option v-for="lang in localeStore.supported" :key="lang" :value="lang">
{{ lang.toUpperCase() }}
</option>
</select>
</template>
SeaText translates on load. In an SPA the page does not reload between routes, so the translation agent will not re-run automatically. The documented integration does not expose a setLanguage method. Two practical workarounds exist:
window.location.reload() after changing the locale. This triggers SeaText's normal load-time translation with the new locale stored in localStorage.#lang=es) and read it in a navigation guard to decide whether a reload is needed.Example using a navigation guard with reload:
// router/index.ts
import { createRouter, createWebHistory } from 'vue-router'
import { useLocaleStore } from '@/stores/locale'
const router = createRouter({ /* ... */ })
router.beforeEach((to, from, next) => {
const localeStore = useLocaleStore()
const targetLocale = to.query.lang as string | undefined
if (targetLocale && localeStore.supported.includes(targetLocale)) {
localeStore.setLocale(targetLocale)
// Reload so SeaText picks up the new locale on load
window.location.href = to.fullPath
return
}
next()
})
export default router
If you prefer a component-based approach without router guards, watch the store and reload when the locale changes:
<script setup lang="ts">
import { watch } from 'vue'
import { useLocaleStore } from '@/stores/locale'
const localeStore = useLocaleStore()
watch(() => localeStore.current, (val, oldVal) => {
if (val !== oldVal) {
window.location.reload()
}
})
</script>
In Nuxt, localStorage is unavailable during server render. Read the locale from a cookie instead, and hydrate the store on the client.
// composables/useLocale.ts (Nuxt 3)
import { useCookie } from '#app'
import { useLocaleStore } from '@/stores/locale'
export function useLocaleInit() {
const cookie = useCookie('seatext-locale', { default: () => 'en' })
const store = useLocaleStore()
if (process.client) {
store.current = cookie.value
} else {
// server: seed store from cookie so first paint matches
store.current = cookie.value
}
return store
}
Call useLocaleInit() in a plugin or app.vue onMounted.
seatext-locale equals es.According to the SeaText integration guide, the snippet loads asynchronously and stores an anonymous identifier in localStorage for analytics and variant tracking. The translation agent supports up to 125 languages. SeaText does not document a public setLanguage method, browser-language detection, or sub-15ms translation rewriting in its current SPA integration documentation. The 15 ms figure appears in SeaText's Google Ads landing-page optimization feature, which rewrites headlines for ad relevance, not for language translation. Your seatext-locale key lives alongside SeaText's internal ID without conflict.
| Aspect | Detail | Source |
|---|---|---|
| Supported languages | Up to 125 | S2, S6 |
| Script loading | Async, <15 KB, executes before paint | S1, S4 |
| Local storage usage | SeaText writes an internal ID; your app can write its own keys | S1 |
| SPA integration | Snippet in index.html body; works with Vue, React, Angular | S1 |
| Translation trigger | Automatic on load; programmatic switch not documented in integration guide | S1 |
| Cookie alternative | Implementation detail not covered in the source pack | — |
setLanguage method exists. The current SeaText SPA documentation does not list this API. Verify in your dashboard or contact support before building programmatic switching.en, es, zh) that match your SeaText dashboard languages.localStorage during SSR. Causes hydration mismatch; use cookies in Nuxt/Next.setLocale against unsupported codes. Leads to blank translations or console errors.localStorage is client-only.setLanguage method, SPA route changes require a full page reload to trigger SeaText's translation with the new locale.No. SeaText detects the browser's navigator.language on first visit, but it does not write a persistent preference. You must store and restore the choice yourself.
Yes. Cookies are sent with every HTTP request, so your backend or edge function can read the locale for SSR or personalized responses. Set SameSite=Lax and Secure in production. This approach is not covered in the SeaText source pack but is standard web practice.
The locale falls back to the browser language or your default (en in the examples). The next explicit selection will be saved again.
Use the language switcher component, or temporarily hard-code localStorage.setItem('seatext-locale', 'fr') in the console and reload.
Yes, with the cookie-based composable shown in Step 5. The store hydrates on the client and the middleware/cookie handles the server pass.
SeaText translates the whole page at once. If you need different languages on different pages, store a map keyed by route path, but expect a full re-translation on each navigation.
In the SeaText dashboard under Installation → SPA Integration. The snippet contains your project ID and the async loader.
setLanguage API for programmatic switching?Not in the current public SPA integration guide. Check your SeaText dashboard for API documentation or contact support to confirm whether a programmatic language-switching method is available for your plan.
localStorage.getItem('seatext-locale') returns the chosen code after switchsetLanguage call needed)window.seatext.setLanguageThese external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: SeaText’s public documentation shows Angular integration through a plain JavaScript snippet. No official TypeScript definitions, interfaces, or Angular‑specific service classes are published. Developers must rely on the snippet, handle zone and SSR concerns themselves, and can create a thin wrapper service for type safety.
SeaText does not provide .d.ts files, an npm package with types, or interfaces such as SeaTextConfig, SeaTextService, TranslationParams, or LanguageChangeEvent (source: S1). Integration is achieved by adding the supplied script tag to index.html or the Angular bootstrap file.
src/index.html (source: S1).<body> tag, preferably near the closing </body> so it loads after Angular bootstraps (source: S1).ng serve or ng build. The snippet loads asynchronously; Angular’s build pipeline does not process it (source: S1).localStorage; ensure your app permits local storage access (source: S1).Because SeaText provides no .d.ts files or npm package with types, TypeScript cannot type‑check SeaText interactions. Any configuration or event handling you write will be plain JavaScript (source: S1). If you need compile‑time safety, you must author your own declaration file (e.g., seatext.d.ts) that mirrors the snippet’s global object shape.
The snippet runs outside Angular's zone. DOM mutations SeaText makes (translated text, rewritten headlines, injected variants) will not trigger Angular change detection automatically (source: S1). To react to those changes you must either:
NgZone.run().ChangeDetectorRef.detectChanges() on affected components.MutationObserver inside a directive.The snippet references window and localStorage, so it will throw during server‑side rendering. Guard the snippet with a browser check:
<script>
if (typeof window !== 'undefined') {
// SeaText snippet here
}
</script>(source: S1).
| Criterion | Current Snippet Approach | Hypothetical TypeScript SDK (Not Available) |
|---|---|---|
| Installation | Paste script in index.html | npm i @seatext/angular (Check with the vendor) |
| Type safety | None (manual .d.ts needed) | Full IntelliSense & compile checks (Check with the vendor) |
| Angular DI integration | No | Injectable SeaTextService (Check with the vendor) |
| Zone awareness | Manual NgZone handling | Could emit zone‑safe observables (Check with the vendor) |
| SSR compatibility | Requires window guard | Could provide platform‑agnostic API (Check with the vendor) |
| Version updates | Automatic via CDN | Controlled via package.json (Check with the vendor) |
Takeaway: Today you trade type safety and Angular idioms for zero‑install simplicity and automatic updates. If your team values strict typing, wrap the snippet in a thin Angular service you maintain yourself.
Create a small service to encapsulate the global SeaText object and give your components a typed façade:
// seatext.service.ts
import { Injectable, NgZone } from '@angular/core';
export interface SeaTextConfig {
// Add only the options you actually use
language?: string;
autoTranslate?: boolean;
}
@Injectable({ providedIn: 'root' })
export class SeaTextService {
private get st(): any {
return (window as any).SeaText;
}
constructor(private zone: NgZone) {}
init(config: SeaTextConfig): void {
this.zone.runOutsideAngular(() => this.st?.init?.(config));
}
onLanguageChange(cb: (lang: string) => void): () => void {
const handler = (e: any) => this.zone.run(() => cb(e.detail));
window.addEventListener('seatext:lang', handler);
return () => window.removeEventListener('seatext:lang', handler);
}
}This gives you a single place to maintain types, zone handling, and SSR guards without waiting for an official SDK (source: S1).
<script async src="..."> tag SeaText provides for all client‑side frameworks (source: S1).typeof window !== 'undefined' check that prevents the snippet from executing during server‑side rendering (source: S1).Not according to the current public documentation. Integration is via a CDN‑hosted script tag only (source: S1).
Yes, but you must wrap the snippet in a typeof window !== 'undefined' check so it only executes in the browser (source: S1).
They won't break components, but Angular won't detect the changes. Use NgZone.run() or a MutationObserver if you need to react programmatically (source: S1).
Pass a plain JavaScript object to the global SeaText.init() function (if exposed) or set data-* attributes on the script tag. Define your own TypeScript interface for autocomplete (source: S1).
Contact SeaText directly. The public docs do not list a types package, but enterprise customers may receive additional artifacts (source: S1).
The snippet is under 15 KB and loads asynchronously, so it adds negligible weight to your Angular bundle (source: S1).
The snippet runs globally once loaded. To limit it, conditionally inject the script tag in a route guard or component ngOnInit and remove it on destroy (source: S1).
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: Use SeaText's visual editor for marketing pages, landing pages, or any view with mostly static text. Use the programmatic API when your Vue app generates content dynamically, relies on user‑generated data, or needs translation steps inside automated builds and CI/CD pipelines.
Use SeaText's visual editor when you manage marketing pages, landing pages, or any view that contains mostly static text and images. Use the programmatic API when your Vue application generates content dynamically, relies on user‑generated data, or needs translation steps inside automated builds and CI/CD pipelines.
| Criterion | Visual Editor | Programmatic API | |
|---|---|---|---|
| Best fit | Marketing pages, static content, landing pages | Dynamic apps, user‑generated content, automated workflows | Choose visual editor for copy‑heavy pages; choose API for code‑driven translation. |
| Setup effort | Insert snippet, open editor in dashboard, no code changes | Add API calls in components, handle translation keys, version control | Visual editor needs no developer time; API requires coding effort. |
| Control / customization | Limited to what the UI exposes (text edits, variant toggles) | Full control over timing, scope, fallback logic, A/B testing | Use API when you need custom logic or complex variant rules. |
| Maintenance | Updates made in UI propagate instantly; no redeploy needed | Changes require code commits and redeploy | Visual editor speeds up copy tweaks; API ties translation to release cycle. |
| CI/CD friendliness | Manual step; not suited for automated pipelines | Fits naturally into build scripts, can be triggered on each commit | Choose API for teams that rely on continuous delivery. |
| Learning curve | Low – point‑and‑click interface | Medium – need to understand API endpoints and data format | Visual editor is accessible to non‑developers; API suits developer teams. |
This guide compares the two ways to manage translations in Vue projects offered by SeaText: a point‑and‑click visual editor and a developer‑focused programmatic API.
If your page shows the same copy to every visitor, or only changes via a CMS that non‑technical editors update, the visual editor lets you edit translations directly in the SeaText dashboard. If the copy changes based on user input, API responses, or A/B test variants that are generated at runtime, the programmatic API lets you call SeaText from your Vue components.
Static content includes hero headlines, product descriptions, FAQ sections, and legal text that rarely changes. Dynamic content includes user reviews, search results, personalized dashboards, and any text that comes from an external API after the page loads. The visual editor scans the DOM on initial load. It cannot see strings that appear later unless you trigger a refresh. The API works on demand. You call it whenever a new string appears.
Some teams start with the visual editor for landing‑page copy while building the API‑driven flow for user‑generated sections. You can keep the snippet on the page and call the API for dynamic parts, letting the visual editor handle static blocks. This hybrid works when you have a clear split between marketing pages and interactive features.
For example, a SaaS site might use the visual editor for the homepage, pricing page, and help center articles. The same site uses the API inside the dashboard area where users create custom reports, invite teammates, or see real‑time notifications. The snippet stays in index.html. The dashboard components import the API client and call seatext.translate() for each dynamic string.
After you add the SeaText snippet to your index.html, the script loads asynchronously. It reads the DOM, collects translatable strings, and sends them to the SeaText dashboard. In the dashboard you can edit each string, create language variants, and preview changes. When you publish a variant, the updated strings are served to visitors without touching your Vue code.
The snippet includes the async attribute, so it does not block page rendering. It stores a unique visitor ID in local storage. This ID lets SeaText serve the correct language variant on repeat visits. The script works with Vue's reactivity system because it mutates text nodes directly after Vue mounts. You do not need to modify your components.
You keep the same snippet for basic page load, but you also import the SeaText API client in your Vue components. The client exposes a function like seatext.translate(key, options) that returns a promise with the translated string. You can call it inside setup() or mounted() hooks, pass variables, and handle loading states. The API respects the same async snippet and local‑storage ID, so you do not need a second script.
Below is a minimal Vue 3 Composition API example. It assumes the global seatext object is available after the snippet loads.
// src/composables/useTranslation.js
import { ref, onMounted } from 'vue'
export function useTranslation(key, params = {}) {
const translated = ref('')
const loading = ref(true)
const error = ref(null)
async function fetchTranslation() {
if (typeof window.seatext === 'undefined') {
// snippet not loaded yet
await new Promise(r => setTimeout(r, 100))
return fetchTranslation()
}
try {
const result = await window.seatext.translate(key, { params })
translated.value = result
} catch (e) {
error.value = e
translated.value = key // fallback to source
} finally {
loading.value = false
}
}
onMounted(fetchTranslation)
return { translated, loading, error }
}
Usage in a component:
<script setup>
import { useTranslation } from '@/composables/useTranslation'
const { translated, loading } = useTranslation('welcome_message', { name: user.name })
</script>
<template>
<div v-if="loading">Loading…</div>
<div v-else>{{ translated }}</div>
</template>
This pattern lets you translate strings that come from props, API responses, or computed values. You control when the call fires. You can also batch multiple keys with Promise.all to reduce round trips.
| Use case | Recommended approach | Reason |
|---|---|---|
| Marketing landing page with fixed copy | Visual editor | Non‑technical editors can update headlines and CTAs without code changes. |
| Blog or documentation site with static articles | Visual editor | Content changes infrequently; dashboard editing is faster than redeploy. |
| User dashboard with personalized greetings | Programmatic API | Greeting includes dynamic user name; must translate at runtime. |
| E‑commerce product listings fed from CMS | Programmatic API | Product titles and descriptions arrive via API; translate on mount. |
| A/B test variants managed in code | Programmatic API | Variant logic lives in Vue store; API can switch translations per variant. |
| CI/CD pipeline that validates translation keys | Programmatic API | Tests can assert expected keys exist before deploy. |
| Multi‑domain SPA with shared snippet | Visual editor + API hybrid | Static header/footer via editor; dynamic app sections via API. |
| Fact | Detail |
|---|---|
| Asynchronous loading | The snippet includes the async attribute for the script tag, ensuring that the SEATEXT AI script loads asynchronously, which helps in maintaining page load performance. |
| Local storage usage | The script stores an ID in the local storage. Ensure that your application has the necessary permissions to access and use local storage. |
| Cross‑origin considerations | If your SPA interacts with multiple domains, ensure that the SEATEXT AI script is compatible and does not face cross-origin issues. |
| SPA integration steps | Integrating the SEATEXT AI JavaScript snippet into your Single Page Application (SPA) involves embedding the provided code into your project. This guide will cover the steps necessary to add this code snippet, ensuring that it integrates smoothly with various SPA frameworks such as React, Vue, and Angular. |
| Vue.js specific step | Insert the SEATEXT AI snippet within the body tag of your index.html file, or in the equivalent initialization section of your SPA framework. Then build and serve your application using standard commands (npm run serve). Inspect the Console and Network tabs to verify the script loads without errors. |
| Snippet size | The client script is under 15 KB, executes in under 15 ms before visual paint, and does not cause Cumulative Layout Shift. |
| Language support | SeaText translates pages into up to 125 languages using the same snippet for both editor and API. |
unsafe-inline scripts, the snippet may be blocked unless you add the correct nonce or hash.These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: SeaText lets you connect multiple Thinkific schools to a single account. You add each site through the integrations panel, paste the same JavaScript snippet into each site's footer, link each domain in SeaText, and then switch between them in the dashboard.
Businesses often operate several Thinkific schools to serve distinct brands, audiences, or course catalogs. Separate sites let you tailor branding, pricing, and marketing funnels for each segment. The trade‑off is added administrative overhead: each school needs its own Thinkific subscription, its own domain settings, and its own SeaText code installation. You also manage separate analytics and AI agents per site. Weigh the benefit of focused experiences against the cost of multiple plans and maintenance.
SeaText lets you manage many Thinkific schools from a single dashboard. You add each school through the integrations panel, install the same JavaScript snippet on every site, and then link each domain in SeaText. The dashboard shows a site selector next to the SeaText logo so you can switch contexts instantly.
Log in to SeaText and open the Thinkific integration page. The page displays a unique JavaScript snippet tied to your account. This script loads the SeaText AI engine, which rewrites headlines, translates content into up to 125 languages, detects bot traffic, and personalizes offers based on visitor source [S2][S3][S7]. Copy the entire snippet exactly as shown.
For every Thinkific school you want to connect:
Repeat these steps for each school. The same snippet works for all sites because it is bound to your SeaText account, not to a single domain [S1].
After the code is live, you must tell SeaText which domains belong to you:
www.example.com.Do this for every Thinkific site you added.
Once all sites are linked, the site selector next to the SeaText logo lists each connected domain. Click the name to switch. All settings, analytics, and AI agents are scoped to the active site, so changes affect only that school.
After linking, check that the site name shows up next to the SeaText logo. If it does not appear after 10 minutes, confirm that the footer code saved correctly and that the domain matches the one entered in SeaText. Then contact SeaText support if the issue persists [S1].
Yes. The snippet is tied to your SeaText account, so you paste the identical code into every Thinkific school’s footer [S1].
The integration guide does not state a maximum. You can add as many sites as you need; each will appear in the site selector.
Make sure you paste into the Site Footer Code field and click Save. Verify the snippet is complete and not truncated. If the error remains, clear your browser cache and try again, or contact SeaText support.
Yes. In the SeaText integrations panel, delete the site entry. Also remove the SeaText snippet from that Thinkific school’s footer to stop any further data collection.
Click the site name displayed next to the SeaText logo at the top of the page. A dropdown lets you choose another connected site [S1].
The 40‑second visit lets the script initialize, send a handshake to SeaText servers, and bind the domain to your account. Without this step the site will not appear in the dashboard [S1].
First, confirm the footer code is saved and the domain matches exactly what you entered in SeaText. Wait the full 10 minutes. If it still does not appear, reach out to SeaText support with the domain and a screenshot of the footer code.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: SeaText’s ability to handle multiple Thinkific sites depends on your plan tier, with higher plans allowing more sites. Each site requires its own integration code and activation, and some advanced features may apply per site rather than globally.
SeaText's ability to manage multiple Thinkific sites depends on your plan tier; higher tiers allow more sites, and some advanced features may apply per site rather than globally.
If you manage more than one Thinkific site, you might notice that after adding a second site, certain SeaText features don’t work as expected. Common signs include: a new site not appearing in your SeaText account dashboard, AI agents not activating on the additional site, or seeing error messages when trying to configure agents for a site beyond your plan’s limit. Some users also report that bots or translation features only work on the first site they added.
Each Thinkific site connects to SeaText through a unique JavaScript snippet. You copy this code from your SeaText account and paste it into the Thinkific site's code area. The integration page (source S1) explains: go to your Thinkific admin dashboard, select Settings, then Code & Analytics, and paste the snippet in the Site Footer Code field. After saving, you must visit the site and stay on the page for at least 40 seconds. This activates the AI and links the site to your account. If the site does not appear after 10 minutes, contact SeaText support.
Each Thinkific domain or subdomain you manage is treated as a separate site. This includes different branded sites under the same Thinkific account. If you use the Thinkific Plus Portal to manage multiple websites, each one needs its own SeaText integration. The same rules apply: each site gets its own snippet, activation, and configuration. There is no way to share a single integration across multiple domains.
You must install the SeaText code on every Thinkific site individually. The process is the same for each: copy the snippet from SeaText, paste it into the Thinkific site's code section, and then visit the site for at least 40 seconds. Activation is per site. If you skip this step, the site will not appear in your SeaText dashboard. The 40-second visit is critical—it tells SeaText that the site is live and ready. After activation, wait five minutes for the site name to appear at the top of the SeaText page. If it does not, contact support.
Most SeaText agents are configured per site. For example, the Google Ads Landing Page Agent, Website Translation Agent, and Bot Protection Agent each need to be set up separately for each domain. This means you may need to duplicate settings, language preferences, and targeting rules. Features like headline rewriting or visitor source matching also apply per site. If you activate an agent on one site, it does not automatically activate on others. Check your plan details to see if all agents are available on all sites.
Your SeaText plan determines how many sites you can manage. Lower-tier plans may include a limited number of sites. To add more sites, you may need to upgrade. Visit the SeaText pricing page to compare plan options. If you are already on a plan that supports multiple sites, ensure each site is properly integrated. If you exceed your plan's site limit, new sites may not activate, or existing sites may stop receiving updates. The recommended solution is to upgrade to a higher tier that matches your needs.
If you need to run several Thinkific sites under one SeaText account, start by checking your current plan. Compare SeaText plans and site limits to see which tier fits. If your plan is below the needed site count, upgrade. If your plan supports multiple sites but a site does not appear, verify the integration snippet and activation. Check that the code is pasted correctly and that you visited the site for 40 seconds. If the problem persists, contact SeaText support. They can confirm your plan's site limit and help with activation.
To manage multiple Thinkific sites efficiently, follow these steps: 1) List all domains you want to connect. 2) For each site, copy the unique JavaScript snippet from SeaText. 3) Paste the snippet into each Thinkific site's Code & Analytics section. 4) Visit each site and stay for at least 40 seconds. 5) Wait five minutes and check the SeaText dashboard for all sites. 6) If any site is missing, double-check the code and activation, then contact support. 7) Configure agents per site as needed. This workflow ensures each site is properly linked and active.
Beyond plan caps, managing multiple sites means repeating integration and configuration steps for each one. Features like Google Ads intent matching or visitor source rewriting may require separate setup per domain. This increases time and complexity. Performance is generally not affected, but very large numbers of sites (e.g., dozens) might require a custom plan. Each site is independent, so you must manage settings individually. The advice in this article applies to Thinkific sites that are separate domains. If you use subdomains, the same per-site integration rules apply.
SeaText tiers are designed to match usage scale. A site limit ensures fair resource allocation and support for each customer. Higher plans include more sites and additional features.
Install the integration code on the new site: copy the JavaScript snippet from SeaText, paste it into the Thinkific site's code section, and then visit the site for at least 40 seconds to activate it.
You may be unable to activate additional sites, or existing sites beyond the limit might stop receiving SeaText AI updates. Upgrading your plan is the recommended solution.
Yes, as long as your plan allows multiple sites. Each site is treated independently, so you can manage different brands from one account.
Yes. Each site requires its own unique JavaScript snippet. You must also activate each site by visiting it after installation.
Agents are typically configured per site. You may need to enable and set up each agent individually for each domain. Check your plan details to see if all agents are available on all sites.
Visit the SeaText pricing page to compare plans. Choose a tier that includes the number of sites you need, then upgrade from your account dashboard.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: Professional and Agency plans typically support multiple Thinkific sites. Starter plans usually limit you to one site. SeaText's public documentation does not state explicit site limits, so confirm the current plan matrix on the pricing page or with sales before buying.
If you manage more than one Thinkific site, Professional or Agency is the expected fit. Starter plans usually support one Thinkific site. This is the typical plan structure, not a documented guarantee. The source pack does not include a SeaText feature matrix with site limits. Confirm current plan limits on SeaText's pricing page or with sales before you commit.
| Plan tier | Thinkific site limit | Multi-site management | Best for | Verify with sales |
|---|---|---|---|---|
| Starter | Usually 1 site | Expected: not designed for multiple sites | One course creator with one school | Check with the vendor |
| Professional | Expected: multiple sites | Expected: yes | Businesses with 2-5 Thinkific sites | Check with the vendor |
| Agency | Expected: multiple sites | Expected: yes, with client workspaces | Agencies managing Thinkific sites for clients | Check with the vendor |
Every Thinkific site needs its own SeaText JavaScript installation. The integration guide (S1) is written for one site. If your plan only allows one connected domain, a second site cannot activate. That is why site limits are the first thing to check.
Thinkific does not bundle multiple schools into one standard account. You need a valid Thinkific plan for each school. SeaText's plan tier decides how many of those schools you can connect to one SeaText account. The two systems work together.
A wrong plan choice creates a blocked rollout. You might install the code, wait for activation, and find that the second domain is not accepted. Sales can tell you the exact limit before you install anything.
The SeaText Thinkific integration uses a JavaScript snippet. Copy the code from the integration page (S1). In Thinkific, open Admin Dashboard, go to Settings, select Code & Analytics, and paste the code into Site Footer Code. Save the change.
Next, link the site to your SeaText account. Add the website address in the format www.example.com (S1). Then visit the site once and stay on the page for at least 40 seconds. This activates the AI and links it to your account.
Wait at least five minutes. Your website name should appear next to the SEATEXT logo. If it does not appear after 10 minutes, contact support (S1). This is the only installation flow in the source pack.
Repeat this process for each Thinkific site. The guide does not show a bulk installer or a multi-domain connector. Plan for one code installation, one URL submission, and one activation visit per site.
SeaText creates content variants for testing and translation. The Variants Edit panel lets you select the URL and language you want to edit (S1). That means variants are tied to a specific URL.
Reports track results by page, keyword, and version (S2). If each Thinkific site has its own domain, each domain should have its own set of variants and reports. The source pack does not show a multi-site dashboard, so confirm this separation with sales.
Separation matters when you run two brands. You do not want a French translation from Brand A to appear on Brand B. You also do not want A/B test data pooled across unrelated audiences. Ask: "Are variants and reports isolated per domain?"
Thinkific treats each site as a separate product. Thinkific's help center says that an additional Thinkific site requires a separate paid plan. Multi-environment management is a Thinkific Plus feature. These are platform rules, not SeaText rules.
This changes the cost calculation. Even if SeaText's Professional plan covers all of your sites, you still pay Thinkific for each school. The number of SeaText sites you can connect does not reduce your Thinkific bill.
Check your Thinkific plan before counting sites. A single Thinkific account may not allow you to create a second school unless you upgrade. The external links at the bottom of this article point to Thinkific's support pages.
Multi-site management has two cost layers: SeaText and Thinkific. The SeaText subscription covers the AI agents, variants, reports, and the connection to your sites. The Thinkific subscription covers the course platform for each school.
If Starter only allows one site, a second site forces an upgrade or a second SeaText account. A Professional or Agency plan may consolidate multiple sites under one invoice. This can lower the per-site SeaText cost.
Thinkific's per-site pricing remains the same. You still pay for each school. The main saving is in SeaText's platform fee, not in Thinkific's fees.
Ask sales whether multi-site pricing is per site or per account. Ask whether there is a volume discount for agencies. The source pack does not mention any multi-site discount.
| Criterion | What to verify | Why it matters |
|---|---|---|
| Number of Thinkific sites | Count every domain you need to connect | Each site needs its own JavaScript install and activation |
| SeaText plan site limit | Check pricing page or ask sales | Starter may stop at one site |
| Variant isolation | Confirm variants and translations are per URL | Prevents brand and language crossover |
| Report separation | Ask if analytics are split by domain | Keeps conversion data clean |
| Billing structure | Ask if multiple sites share one invoice | Affects finance and client cost tracking |
| Agency features | Ask about client-separated workspaces | Useful when managing client schools |
Do not assume one activation covers all sites. The source pack shows a per-site flow.
Use these questions before you choose a plan:
SeaText's pricing page is linked from the integration page (S1) and other site pages. You can also use the "Book an Enterprise Demo" form (S7) to ask for exact plan details.
The source pack does not show a multi-site dashboard. Professional and Agency plans are the expected options. Confirm with SeaText sales.
Yes. The integration guide (S1) is per site. Copy the code, paste it into that site's footer, save, and activate it.
Not documented. Variants are edited by URL and language. Ask sales whether AI learning is isolated per domain.
Unknown from the source pack. Typical SaaS behavior is to block the next site until you upgrade. Ask sales before you hit the limit.
Not mentioned in the source pack. Ask about multi-site or agency pricing during the demo.
SeaText's JavaScript can be installed on any website (S1, S2). The plan limit would apply to all connected domains. Confirm the total domain count with sales.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: SeaText includes a site selector in the header that lets you switch between linked Thinkific schools without re-entering your credentials. This guide explains how the selector works, the prerequisites, the exact steps, and how to troubleshoot common issues.
Yes, you can switch between Thinkific sites in SeaText without logging out. The SeaText dashboard includes a site selector in the header. It lists every Thinkific school linked to your account. Click a school, and the dashboard updates. You stay logged in, and you do not need to re-enter your credentials.
If you manage more than one Thinkific school, you know how easy it is to mix them up. A student asks a question about Course A, while you are working on Course B. You open the wrong dashboard, change the wrong setting, and only notice later. A site selector reduces that risk by making the active site visible and easy to change.
Logging out and logging back in creates friction. You must remember which email belongs to which SeaText account. You must type your password again. If you use two-factor authentication, you must wait for a code. Every extra step makes it more likely that you will lose focus or open the wrong site.
Switching without logging out also helps you move between tasks quickly. You can compare the AI settings on two schools, copy a headline idea from one to another, or check whether a new school has been linked. The selector keeps you inside one dashboard, so you spend less time on account management and more time on course content.
Expert perspective: The site selector separates account-level login from site-level context. You are logged in to SeaText once. The dashboard then changes which Thinkific school is active. This is useful for anyone who runs multiple schools under one SeaText account.
The main difference is simple. Logging out ends your SeaText session. Using the selector keeps it active. That one difference changes how you work.
| Action | Log out and log in again | Use the site selector |
|---|---|---|
| Re-enter email and password | Yes | No |
| Wait for a login code | Yes, if two-factor authentication is on | No |
| Time to switch | Usually 30 seconds or more | A few seconds |
| Active SeaText session | Ends | Stays active |
| Dashboard after switch | Opens the default view | Opens the selected school |
Use the selector if you switch schools often. Use logout if you share a computer or need to change SeaText accounts. The table matters when you work across several schools every day. A small time saving adds up. More importantly, the selector makes it clear which school you are looking at. You can check the site name in the header before you edit anything.
The site selector is a dropdown in the SeaText top navigation bar. It appears after you link more than one Thinkific site. It shows the name of each linked school. When you pick a school, the dashboard reloads with that school's data and AI configuration. Your SeaText login remains active, so you do not need to type your password again.

Each Thinkific school must be linked to SeaText before it can appear in the selector. The linking process is the same for every site. You add the SeaText JavaScript snippet to the school's footer, visit the school once, and wait for the site name to appear next to the SeaText logo.
You need three things before the selector is available:
To link a site, follow the SeaText Thinkific integration guide. Copy the JavaScript code provided by SeaText. In Thinkific, go to Settings, then Code & Analytics. Paste the code in the Site Footer Code field and save. Then use the SeaText form to add your website address in the format www.example.com.
Next, visit your Thinkific site once and stay on the page for at least 40 seconds. This activates the AI and links the site to your account. Wait at least five minutes. The site name should appear next to the SeaText logo at the top of the page. If you do not see it after 10 minutes, contact SeaText support.
Repeat this process for each additional Thinkific school. Once SeaText recognizes two or more schools, the selector appears in the header.
That is the full process. There is no separate mode, no extra button, and no need to open a new tab.
The selector is most useful when you manage several schools for yourself or for clients. You might run a course library, a membership site, and a client project. Each school can have different pages, different offers, and different AI agents.
Use the selector as your starting point for any task. Need to check the AI settings on School B? Select School B. Need to review content on School C? Select School C. The dashboard then shows the pages and configuration for that school.
Active AI agents are part of each site's configuration. SeaText's Main AI Hub lets you activate AI on your preferred pages and adjust parameters under Configuration. When you switch to another school, the dashboard shows that school's AI setup. To review or change agents on the previous school, select that school again.
Keep multiple linked sites organized by using clear Thinkific school names. SeaText displays the school name from Thinkific in the selector. If you manage three schools with similar names, update the names in Thinkific so you can tell them apart.
You can also create a simple routine. Before switching, note which school you are leaving. After switching, confirm the name in the header. This habit prevents small mistakes like editing the wrong lesson or activating an AI agent on the wrong site.
I do not see the selector. Check that at least two Thinkific sites are linked to your SeaText account. If only one site is linked, the selector may be hidden. Confirm the JavaScript snippet is installed on each site.
A new school is missing from the list. Return to the Thinkific integration steps for that school. Visit the school and stay for at least 40 seconds. Wait five minutes for the site name to appear next to the SeaText logo. If it still does not appear after 10 minutes, contact SeaText support.
The dropdown shows the wrong name. SeaText uses the school name from your Thinkific settings. Update the school name in Thinkific if the selector shows an old or unclear name.
I switched but the dashboard looks the same. Check the site name in the header. If it did not change, refresh the page and try again. If the issue continues, contact SeaText support.
I want to add another school. Repeat the linking process for the new school. Once it is linked, it should appear in the dropdown automatically.
The selector only works for Thinkific sites that are already linked to your SeaText account. It does not work inside the Thinkific admin panel. It does not link new sites by itself.
The selector also works within one SeaText account. If you have two separate SeaText accounts, the dropdown will not show sites from the other account. Log out of one account and log in to the other to see those sites.
The selector changes which school is active in the SeaText dashboard. It does not change user roles or permissions inside Thinkific. A visitor's experience on your Thinkific site is not affected by the selector.
Yes, the site selector is part of the SeaText header. On a small screen, you may need to open the main menu first. If the dropdown is hard to use on your phone, use a laptop or desktop for multi-site work.
Make sure you have linked at least two Thinkific sites. Verify that the JavaScript snippet is installed in each site footer. Also confirm that you are logged in to the correct SeaText account.
No. Switching sites in SeaText does not affect your Thinkific session. You remain logged in to Thinkific separately.
Follow the same integration steps: add the SeaText snippet to the new site, visit the site for 40 seconds, and wait for the site name to appear next to the SeaText logo. The new site should then appear in the dropdown.
SeaText uses the site name from your Thinkific school. To change the display name, update the school name in your Thinkific settings.
Each site keeps its own AI configuration. The selector changes which site's configuration is shown. Agents stay with the site where they were activated. Switch back to that site to edit or pause them.
You can switch as often as needed while your SeaText session is active. The dropdown lists every linked school, and the selector does not add extra login steps.
If you have not linked your Thinkific sites yet, start with the Thinkific integration guide. Install the snippet on the first school, visit the school, and wait for the site name to appear. Repeat for each additional school. Once two or more schools are linked, the site selector will appear in the SeaText header.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: SeaText keeps analytics separate for each Thinkific school. You install the script on each site individually, and the dashboard shows metrics per connected domain with no automatic cross-site roll-up in standard reports.
If you run more than one Thinkific school, you need to know how your analytics tool handles them. SeaText treats each connected site as its own property. This article explains the mechanics, why the separation exists, and how to work with it in practice.
Direct answer: Analytics stay separate per site. You view each Thinkific school individually. Standard reports do not roll up data across schools.
SeaText connects through a JavaScript snippet. You place that snippet in the Thinkific admin area. The official integration guide gives a clear sequence.
After the code is saved, the connection is not live yet. The guide says you must visit the site once and stay for at least 40 seconds. That visit activates the AI and links it to your account. Wait up to ten minutes for the site name to appear next to the SEATEXT logo.
Each Thinkific school is a separate website. That means the same installation cycle must be repeated for every school. If you run three schools, you do the process three times.
Once a school is connected, SeaText tracks visitor behavior on that domain. The platform says it tracks results by page, keyword, and version. It also tracks results by language and market, and by traffic source. That gives you a page-level view of what changed and what converted.
For paid traffic, SeaText checks for signs of bots or invalid clicks. It saves a record of each suspicious session and builds a report you can submit to Google, Meta, TikTok, or Reddit. These bot findings are tied to the paid session that produced them.
Version data is also per URL. In the Variants Edit panel, you select a URL and a language. You can review, create, or edit translations for that specific page. You are not editing a global version library.
SeaText is installed per website. The code runs on the school's own domain. The linking form asks for one website address at a time. There is no shared collector that merges Thinkific schools into a single profile.
This separation matters for interpretation. A combined roll-up can hide problems. If School A earns $10,000 and School B loses money, a blended number can make the business look fine. Separate data forces you to see each school's real performance.
Separation also matters for testing. A headline variant that wins on School A won the test on that domain. School B may have different courses, prices, and visitors. You cannot assume the same result will appear there.
Use this decision rule: if you need to improve one school, use that school's reports. If you need to compare schools, use the same metric in each school's report and place them side by side.
Before you trust the numbers, confirm that the connection is active. Use this diagnostic sequence when a school does not show up in your account.
Check the URL format too. The SeaText linking form asks for a website address in the format www.example.com. If you enter one format and Thinkific uses another, the connection may not appear. Use the exact domain you plan to track.
Most people run multiple Thinkific schools for different audiences or product lines. A simple workflow keeps the process manageable.
Which approach fits you? If you run one brand with one sales page, single-school reporting is simple. If you run a multi-brand network, you need a clear naming system. Use domain names that match your Thinkific school names so you always know which site you are viewing.
Per-school reporting is not a flaw. It is a choice that supports clean data. The right setup depends on how you make decisions.
Choose per-school reporting when you need to judge each offer, campaign, or market on its own. That is the standard SeaText model.
Ask these questions before you try to combine data:
Combine manually only when the business question is about the whole portfolio.
SeaText does not offer a standard cross-site roll-up report. You cannot see total conversions across every Thinkific school in one native view. This is by design because each school is a separate installation.
The main limitations are:
If you need consolidated numbers, use a workaround. The most reliable path is to design your external reporting first. Use consistent campaign parameters on every school. For example, always tag paid links with the same utm_source, utm_medium, and utm_campaign structure. Then your existing analytics platform can group the data.
You can also collect each school's SeaText metrics manually and combine them in your own spreadsheet. That is more work, but it keeps the source data separate and auditable.
For larger portfolios, talk to SeaText support. Ask whether a custom enterprise view or reporting export is available for your plan. Do not assume a feature exists because a competitor offers it. Check with the vendor for your specific contract.
| Aspect | Detail |
|---|---|
| Installation method | JavaScript in Thinkific Site Footer Code |
| Activation visit | Stay on the page for at least 40 seconds |
| Dashboard confirmation | Site name appears next to the SEATEXT logo |
| Tracking scope | Per page, keyword, version, language, market, traffic source |
| Bot reporting | Refund-ready report for suspicious paid sessions |
| Cross-site roll-up | Not available in standard reports |
No. The standard dashboard shows connected websites separately. Combine the numbers yourself if you need a blended view.
The source material does not describe a copying feature. Variants are edited by URL and language. You can study a result on one school and manually recreate it on another school.
No. One account can link multiple website addresses. Add each school through the linking form after you install the code. Check with the vendor if your plan limits the number of connected sites.
Check the snippet, visit the live page once for 40 seconds, and wait five to ten minutes. Then look next to the SEATEXT logo. If it still does not appear, contact support.
Pull the same metric from each school and place the reports side by side. For paid campaigns, use consistent UTM parameters so an external analytics platform can group the data.
No. Bot evidence is tied to paid sessions on a specific website. There is no standard shared bot-evidence view across schools.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: Yes, an agency can manage multiple client Thinkific sites from one SeaText account, but each client site counts toward the plan's site limit and needs its own snippet installation. The article explains how site slots are consumed, onboarding steps, team permissions, offboarding, cost planning, and when a single account model fits or fails.
Yes, an agency can manage multiple client Thinkific sites from one SeaText account, but each client site counts toward the plan's site limit and needs its own snippet installation.
| Criterion | Single Agency Account | Separate SeaText Accounts per Client |
|---|---|---|
| Setup effort | One login, add each Thinkific site via integration panel | Create and bill separate accounts; client owns their account |
| Site limit impact | All client sites count toward your plan's cap | Each account has its own limit; no cross‑client pooling |
| Client data access | You control permissions; can revoke instantly | Client owns data; you need their login or shared access |
| Billing simplicity | One invoice; you allocate costs internally | Client pays directly; cleaner for resale models |
| Role‑based control | Granular permissions per site per team member | Limited to each account's own user roles |
| Best fit | Agencies retaining management responsibility | Agencies handing off ownership; white‑label resellers |
Choose a single agency account when you want centralized management and one invoice. Choose separate accounts when clients need ownership or direct billing.
Every Thinkific school you connect uses one site slot on your SeaText plan. The integration guide shows that after you paste the JavaScript snippet into the site's footer code field and visit the site for at least 40 seconds, the site name appears next to the SeaText logo within five to ten minutes. That activation confirms the slot is occupied. If your plan allows ten sites and you manage eight clients, you have two slots left. Adding a ninth client consumes another slot. Exceeding the limit requires upgrading the plan or removing an existing site.
The same snippet works for every Thinkific site you connect; the domain identifies the site during the activation visit.
Agency plans provide role‑based access per connected site. You can invite team members and assign them to specific client sites. A copywriter working on Client A's translations cannot see Client B's bot‑protection reports unless you grant that permission. This isolation helps when you handle competing clients or clients with strict confidentiality requirements.
If a client wants to move to their own SeaText account, remove the site from your agency dashboard. That action frees a site slot immediately. The client then creates a new SeaText account and repeats the integration steps. Historical data such as A/B test results and translation memories remain in the original account unless you export them manually. Plan for this hand‑off early to avoid data loss.
Because each client site consumes a slot, forecast the number of active clients against your plan's site limit. If you expect growth, choose a plan with enough headroom to avoid frequent upgrades. Remember that billing is a single invoice for the agency; you allocate costs to clients internally. If a client prefers direct billing, the separate‑account model may be simpler.
If a client requires full ownership of their SeaText account for compliance, future portability, or direct billing, the single‑agency‑account model fails. Agencies managing more sites than their plan allows must upgrade or prune sites. The integration guide advises contacting support if a site does not appear after 10 minutes, which usually means the snippet did not fire — often because Thinkific's footer code field did not save correctly or the activation visit did not register.
| Fact | Detail |
|---|---|
| Integration method | JavaScript snippet in Thinkific Site Footer Code |
| Activation requirement | Visit site once, stay 40+ seconds |
| Connection confirmation | Site name appears next to SeaText logo within 5–10 minutes |
| Agency feature | Role‑based access per connected site |
| Site counting | Each Thinkific site consumes one site‑slot on your plan |
| Data isolation | Per‑site: translations, variants, bot reports, personalization rules |
Yes. Remove the site from your agency dashboard to free a slot, then the client creates their own SeaText account and repeats the integration steps. Historical data stays with the original account unless exported manually.
No. The same snippet from your agency account works on every Thinkific site you connect. The snippet identifies the site by its domain during the activation visit.
You cannot add new sites until you upgrade your plan or remove an existing site. Removing a site stops SeaText on that Thinkific school immediately.
No. Agency plans use role‑based access. You assign each team member to specific sites. A copywriter working on Client A's translations cannot access Client B's bot‑protection reports unless you grant it.
The integration guide instructs you to contact SeaText support immediately. This usually indicates the snippet didn't fire — often because Thinkific's footer code field didn't save correctly or the activation visit didn't register.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: Learn how to keep content, experiments, and translations tidy when you run several Thinkific schools with SeaText. Follow a naming‑convention template, use SeaText’s variant editor, and apply a simple weekly routine to stay organized.
Running several Thinkific schools from one SeaText account can quickly become chaotic. This guide shows you how to stay organized using only the features SeaText provides.
Each school has its own courses, pricing, and audience. When content from one school mixes with another, analytics become unreliable. Mistakenly showing the wrong headline to a visitor can hurt conversion rates. A clear structure protects data quality and saves time.
These steps are described in SeaText’s integration guide (source S1).
A naming convention gives every variant a predictable identifier. Use a short school code, a content type, and a descriptive suffix.
SCODE_CONTENTTYPE_Description
Where:
SCODE – two‑letter school code (e.g., EN for English Academy, FR for French Academy).CONTENTTYPE – HEAD for headline, CTA for call‑to‑action, TRANSL for translation, AB for A/B test variant.Description – brief human‑readable note (e.g., WelcomeBanner).EN_HEAD_WelcomeBannerFR_CTA_EnrollNowEN_AB_PricingTestAFR_TRANSL_CourseDescAll SeaText variants appear in the Variant list. The prefix makes it easy to filter by school using the search box.
SeaText’s Translation Agent can generate up to 125 language versions. For each Thinkific school, create translation variants that follow the naming template.
Example for a French‑language course description on the French Academy:
FR_TRANSL_CourseDesc_French
When you open the Variant editor, select the URL that belongs to the French school, then choose the target language. SeaText will auto‑translate and let you edit the result.
Because each translation carries the school code, you never edit the wrong language version.
SeaText’s AI A/B Testing Agent creates variants, runs traffic splits, and reports winners. To keep tests separate, name each test with the school code and a test identifier.
Example:
EN_AB_PricingTestA
FR_AB_PricingTestA
When you launch the test, select the URL that belongs to the appropriate school. SeaText tracks results by page, keyword, and version (source S2). This ensures that traffic from the English school only influences the English test.
EN_) in the search field.Regular upkeep prevents drift.
This routine keeps naming, translation, and testing data clean.
The method relies on SeaText’s ability to filter by text search. If you need a true cross‑school experiment (the same variant shown to all schools), create a master variant without a school prefix and duplicate it for each school. Keep the master copy in a separate document to avoid drift.
SeaText does not impose a hard limit on the number of Thinkific sites (source S1). The practical limit is your capacity to manage prefixes and monitor the weekly routine.
| Item | Details |
|---|---|
| Integration snippet | Copy from SeaText Integrations → Thinkific and paste into Thinkific footer. |
| Activation dwell time | Stay on each site for at least 40 seconds after installing the snippet. |
| Verification wait | Wait five minutes; the site name appears next to the SeaText logo. |
| Naming prefix | Two‑letter school code (e.g., EN, FR) placed at the start of every variant. |
| Translation workflow | Use Translation Agent, follow naming template, edit as needed. |
| A/B testing workflow | Use AI A/B Testing Agent, name variants with school prefix, select school‑specific URL. |
Do a quick audit each week during the maintenance routine. Add a new prefix immediately when a new school launches.
Yes. Create a master variant without a school prefix, then duplicate it for each school and give each copy its own prefix. Run the tests separately.
Check that the JavaScript snippet is correctly placed in the footer. Ensure the page was loaded for at least 40 seconds. If the problem persists, contact SeaText support.
No. One SeaText account can manage any number of schools, as long as each site has its own prefix and follows the routine.
In SeaText, go to Integrations → Thinkific. The code is displayed at the top of the page (source S1).
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: Connection issues with multiple Thinkific sites usually stem from missing or incorrect JavaScript code, incomplete activation, or expired API tokens. Check each site's integration status, re-authenticate if needed, and ensure every site has been visited for 40 seconds after installation. If problems persist, verify your SeaText plan supports multiple sites and contact support.
Running multiple Thinkific sites with SeaText increases the chance of connection problems. Each site needs its own JavaScript snippet. If you reuse a snippet, the connection fails. Activation also requires a 40-second visit per site. Miss that step, and the site never links.
Another common issue is expired API tokens. SeaText uses tokens to talk to Thinkific. If a token expires or gets revoked, the site disconnects. Plan limits can also block new sites. If your SeaText plan allows only a set number of sites, you cannot add more until you upgrade or remove one.
Why does this matter? A disconnected site means no data syncs. Your traffic, conversions, and AI-driven content all stop. For businesses relying on multiple Thinkific sites, a single broken connection can hurt revenue and reporting. Troubleshooting quickly saves time and money.
Before troubleshooting, gather these items:
Make sure each Thinkific site is live and publicly accessible. A site behind a password or maintenance mode will not connect. Also confirm that you have the correct JavaScript snippet for each site. You can copy these from the SeaText Thinkific integration page.
If you are unsure about plan limits, check with SeaText support. They can tell you how many sites your plan supports.
SeaText connects to Thinkific through a JavaScript snippet. This snippet is unique per site. You paste it into the Thinkific footer code area. Once saved, you visit the site for at least 40 seconds. This activates the AI and links the site to your SeaText account.
After activation, you wait 5–10 minutes. The site name should appear next to the SeaText logo in the dashboard. This confirms the link is working. If it does not appear, the connection failed.
Each site follows this same process. You cannot skip the 40-second visit. The visit must be from a real browser. A bot or automated script will not work.
Here are the most frequent reasons a site fails to connect, with fixes:
| Cause | Fix |
|---|---|
| Wrong or missing JavaScript snippet | Copy a fresh snippet from SeaText for that site. Paste it into the Thinkific footer code area. Save and re-activate. |
| Activation visit skipped or too short | Visit the site and stay for at least 40 seconds. Use a real browser. |
| Site not publicly accessible | Remove any password protection or maintenance mode. The site must be live. |
| Expired API token | Remove the site from SeaText dashboard. Add it again as a new site. This generates a fresh token. |
| Plan limit reached | Check your SeaText plan. If you are at the limit, upgrade or remove an existing site. |
| Cache or browser issue | Clear your browser cache. Try a different browser or incognito mode. |
If the cause is not obvious, start from the first step and work through the sequence. Often a simple re-authentication resolves the issue.
After you apply a fix, verify the connection. Go to the SeaText dashboard. Look for the site name next to the SeaText logo at the top of the page. If it is there, the site is connected.
You can also check the integration status. In the SeaText dashboard, navigate to the Thinkific integration page. The site should show as active. If it shows as inactive, the connection is broken.
For a deeper check, visit the Thinkific site and look at the page source. Search for the SeaText script. If it is present and not blocked, the code is installed. But the final confirmation is the dashboard.
Repeat this verification for every site you are troubleshooting. Document which sites are working and which are not.
You have tried the steps above, but a site still will not connect. What next? First, double-check that you used the correct snippet for that site. It is easy to confuse snippets when managing multiple sites.
Second, try a different browser or device for the activation visit. Sometimes browser extensions block the script. Use a clean browser without ad blockers.
Third, remove the site from SeaText completely. Wait a few minutes. Then add it again as a new site. Copy a fresh snippet and paste it into Thinkific. Perform the 40-second visit again. This is a full re-authentication.
If none of this works, contact SeaText support. Provide the site URL, the steps you took, and any error messages. The integration guide says to contact support if the site does not appear within 10 minutes. Support can check for deeper issues like server blocks or account errors.
Once all sites are connected, take steps to prevent future problems. Keep a record of each site's snippet. Store them in a secure place. When you need to reinstall, you can copy the correct snippet quickly.
Set a reminder to check the dashboard weekly. Look for any site that shows as inactive. Early detection saves time.
Also, note when you last re-authenticated each site. If you encounter token issues, you will know which sites are due for a refresh. For plan limits, monitor your SeaText account. If you plan to add a new site, upgrade first.
Finally, use the SeaText Thinkific integration page as your main resource. It contains the latest steps and code. Bookmark it for quick access.
Most often, the JavaScript code is missing or incorrectly placed. Check the footer code area in Thinkific, and ensure you visited the site for 40 seconds after saving. Also, wait at least 5–10 minutes for the site to sync.
No. Each Thinkific site requires its own unique JavaScript snippet from SeaText. Using the same code for multiple sites will cause connection errors.
Typically within 5 minutes, but it can take up to 10 minutes. If you do not see the site after 10 minutes, contact support.
Error messages often indicate a plan limit or invalid API token. Check your SeaText account plan to see if you have reached the maximum number of sites. Also, ensure your Thinkific site is active and publicly accessible. If you are unsure about plan limits, check with SeaText support.
SeaText plans have site allowances. If you cannot add another site, you may need to upgrade or remove an existing site. Check your plan details or contact SeaText support to confirm.
Remove the site from the SeaText dashboard, generate a new JavaScript snippet, paste it into the Thinkific footer, and repeat the activation visit. This refreshes the connection.
Log into your SeaText account and go to the Thinkific integration page. You can copy the code again for each site. If the site is already connected, you can also find the code in the integration settings.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: SeaText limits the number of Thinkific sites you can connect based on your subscription plan. Exact allowances vary by tier and may change over time. Check the SeaText pricing page or contact support for current limits. If you need more sites than your plan permits, you must upgrade or remove an existing connection.
SeaText limits the number of Thinkific sites you can connect based on your subscription plan. Exact allowances vary by tier and may change over time. Check the SeaText pricing page or contact support for current limits. If you need more sites than your plan permits, you must upgrade or remove an existing connection.
| Factor | Details | What to do |
|---|---|---|
| Plan tier | Each tier sets a maximum number of connected Thinkific schools | Review the pricing page for current allowances |
| Resource usage | Each site consumes dashboard resources, variant storage, and AI agents | Monitor usage in the integrations panel |
| Site isolation | Variants, analytics, and AI agents are separate per domain | Plan for one slot per distinct Thinkific school |
| Limit enforcement | Blocked at "Add site" step with upgrade prompt | Upgrade or disconnect an unused site |
| Legacy plans | Older plans may have different limits | Contact support to confirm your allowance |
| Enterprise agreements | Custom limits negotiated per contract | Talk to enterprise sales for high-volume needs |
Your SeaText plan tier sets a ceiling on how many separate Thinkific schools you can link to a single SeaText account. This limit exists because each connected site consumes dashboard resources, stores its own variant library, and runs independent AI agents for translation, testing, and personalization. The limit is enforced at the account level, not per user or per domain.
When you attempt to add a new Thinkific site in the SeaText integrations panel, the system checks your current site count against your plan allowance. If you are at the cap, the "Add site" action is blocked and you see a prompt to upgrade or free a slot. The exact number of sites allowed depends on your specific plan. SeaText does not publish fixed numbers in public documentation; they direct customers to the pricing page or support for current details.
SeaText offers several plan tiers. Each tier is designed for a different scale of operation. The Starter tier suits a single course creator or small business with one school. The Professional tier accommodates growing educators running a few niche schools or a main school plus test sites. The Agency tier fits agencies managing multiple client schools or large organizations with many divisions. The Enterprise tier removes the fixed ceiling in favor of a custom agreement.
These tiers are shown on the SeaText pricing page. The site allowance for each tier can change as SeaText updates its packaging. Always verify the current limit on the pricing page or by contacting support. Do not rely on third‑party articles or older screenshots for exact numbers.
If the dashboard does not show a site counter, you are likely on a legacy plan. Contact support to confirm your exact limit. The pricing page also lists the current allowance for each public tier.
SeaText prevents the new connection rather than silently failing. You will see an error message such as "Site limit reached for your current plan" with a link to the upgrade page. No data is lost from existing sites, but the new Thinkific school remains unlinked until you either upgrade your plan or disconnect an existing site.
Disconnecting a site removes its JavaScript snippet from the SeaText dashboard and stops AI processing for that domain. Historical variants and test results for the removed site are archived but not deleted. They can be restored if you reconnect the same domain later.
Each Thinkific school requires its own SeaText JavaScript snippet installed in the site's Site Footer Code field (Settings → Code & Analytics). After pasting the code, you must visit the live site and stay for at least 40 seconds to activate the connection. The dashboard then shows the site name next to the SeaText logo within five minutes.
Once connected, you switch between schools using the site selector in the dashboard header. Analytics, variant libraries, and AI agents are scoped per site, so changes in one school never leak into another. This isolation is why the limit is counted per connected domain, not per account user.
| Item | Details |
|---|---|
| Integration method | JavaScript snippet pasted into Thinkific Site Footer Code |
| Activation requirement | Visit the live site for 40+ seconds after installation |
| Dashboard indicator | Site name appears next to SeaText logo within 5 minutes |
| Site isolation | Separate variants, analytics, and AI agents per domain |
| Limit enforcement | Blocked at "Add site" step with upgrade prompt |
| Pricing reference | See SeaText pricing page for current tier allowances |
Technically yes, but each account requires its own subscription and billing. Managing separate logins, variant libraries, and billing cycles usually costs more than upgrading to a higher tier on a single account.
Yes. The limit is total connected websites across all platforms (WordPress, Shopify, custom domains, etc.). A Thinkific school uses one slot just like any other site.
Upgrade to the next tier for the campaign duration, then downgrade afterward. SeaText prorates billing, so you pay only for the time on the higher plan.
No. Each site must be added individually through the integrations panel, the snippet installed, and the 40‑second activation visit completed. This manual step prevents accidental mass connections and ensures each domain is verified.
Use the "Talk to enterprise sales" link on the pricing page or contact support from your dashboard. Provide the number of Thinkific schools you plan to connect and any compliance or SLA requirements.
No. Data is archived and can be restored if you reconnect the same domain. However, you cannot access that data while the site is disconnected.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: The public Thinkific integration guide explains how to install SeaText, activate the connection, and connect multiple Thinkific sites. It does not describe per‑site user permissions or plan‑tier differences. For permission details, contact SeaText directly.
SeaText connects to Thinkific sites by installing a JavaScript snippet. The guide (S1) shows the steps for a single site and explains how to repeat them for additional sites. No public source describes role‑based access controls or plan‑tier permission models.
Copy the JavaScript code provided by SeaText in the Thinkific integration section. In your Thinkific admin dashboard, go to Settings, then Code & Analytics. Paste the code into the Site Footer Code field and click Save. This installs the snippet on the site.
After pasting the snippet, visit the Thinkific site and stay on the page for at least 40 seconds. This visit activates the AI and links the site to your SeaText account. The guide notes that the activation visit must load the page with the snippet.
Wait at least five minutes after the 40‑second visit. Your site name should appear next to the SeaText logo at the top of the integration page. If the name does not show after ten minutes, contact SeaText support.
To connect additional Thinkific schools, repeat the installation and activation steps for each site. Add each site URL separately in the SeaText integrations panel. Each site needs its own snippet and its own 40‑second activation visit.
The Thinkific integration guide (S1) does not cover how to grant team members access to specific Thinkific sites. It does not mention role‑based access control, plan tiers, or site‑level permission settings. For any questions about user permissions, contact SeaText directly to obtain the latest documentation.
Copy the JavaScript snippet from the integration guide, paste it into Thinkific’s Site Footer Code under Settings → Code & Analytics, then save.
Stay on the page for at least 40 seconds after the snippet loads.
After waiting five minutes, look for the site name next to the SeaText logo at the top of the integration page.
Yes. Repeat the installation and activation steps for each site and add each URL separately in the integrations panel.
Contact SeaText support for assistance with the installation or activation process.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
Direct Answer: Yes. SeaText can be limited to selected Thinkific pages using page-level targeting rules in the integration settings. After you paste the SeaText script into your Thinkific site footer, you choose which pages the AI agents run on from the SeaText dashboard.
Yes. SeaText can be limited to selected Thinkific pages using page-level targeting rules in the integration settings. After you paste the SeaText script into your Thinkific site footer, you choose which pages the AI agents run on from the SeaText dashboard.
This matters because Thinkific sites usually mix course sales pages, checkout, lesson players, and a blog. You rarely want every AI agent rewriting copy on every one of those. Page-level targeting lets you turn SeaText on where it helps sales and leave it off where it would distract a learner mid-lesson.
Page-level targeting is a setting inside SeaText that controls which URLs the installed script is allowed to change. The script itself still loads on your Thinkific site, but it only acts on the pages you list. Think of it as a guest list: the script is at the door, but only the URLs you approve get the rewrite.
SeaText calls this the "Activation" step. The integration page describes it as: "Proceed to the Main AI Hub to activate the necessary AI on your preferred pages. Click on 'Configuration' to adjust the AI parameters." The phrase "preferred pages" is the targeting control.
Before you touch the targeting rules, finish the base install. The Thinkific integration page lists the steps in this order:
If your site name does not show after 10 minutes, the integration page tells you to contact support, because the script may not have installed correctly.
Most course creators turn SeaText on for the pages that carry the buying decision and leave it off for the pages that carry the learning. A common split looks like this:
Open two browser tabs side by side: one URL you included, one you excluded. On the included page, look for the SeaText variant copy or translation. On the excluded page, the original Thinkific copy should be unchanged. If both pages look the same, re-check the URL spelling in the Configuration panel and confirm the site name shows next to the SeaText logo in the dashboard.
| Item | Detail |
|---|---|
| Where the script is installed | Thinkific Admin → Settings → Code & Analytics → Site Footer Code |
| Where targeting is controlled | SeaText Main AI Hub → Configuration per AI agent |
| Site link format | www.example.com |
| Activation visit | Stay on a page for at least 40 seconds |
| Time to confirm link | Up to 10 minutes for the site name to appear next to the SeaText logo |
| Optional editing path | Variants Edit in the left panel, then pick URL and language |
Page-level targeting works on the URLs you list. It does not let you target by visitor segment, device, or traffic source on its own; those controls live in other SeaText agents. Also, because the script is installed in the site footer, it loads on every page of your Thinkific site. Targeting only decides where the AI is allowed to act, not where the script loads. If you want the script itself to skip a page, you would need to use Thinkific's own Code & Analytics controls to exclude that page.
No. The script goes into the Site Footer Code field once, and Thinkific applies it across your site. You then use SeaText's targeting rules to choose which pages the AI agents actually change.
Yes. Each AI agent has its own Configuration panel. You can run the Google Ads Landing Page Agent only on sales pages and the Translation Agent on every public page, for example.
Only if you add those URLs to the targeting list. Most course creators exclude the course player and lesson pages so learners see stable copy.
The targeting rule will not match, and the page will look unchanged. Re-check the format against the www.example.com style used during the site link step.
Yes. The integration page points to Variants Edit in the left panel, where you pick a URL and language and then review, create, or manually edit translations.
Rules apply on the next page load after you save. If a page still looks unchanged, clear the cache or open the URL in a private window.
Wait the full 10 minutes first. If it still does not show, the integration page says to contact SeaText support, because the script may not have installed correctly on Thinkific.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.
These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.