embed.js · Web Components

Ein Script-Tag. Fertig ist der Blog.

Kein Build-Tool, kein Node.js, kein Backend. Binden Sie Publino-Inhalte mit einem <script>-Tag in jede HTML-Seite, Webflow, Shopify oder Ihr CMS ein.

index.html
<!-- Einmal im <head> oder vor </body> einbinden -->
<script src="https://cdn.publino.de/embed.js" async></script>

Gut zu wissen: embed.js rendert im Browser. Für die schnellste Auslieferung und das beste SEO (server-gerendertes HTML, eigenes Meta & JSON-LD pro Seite) empfehlen wir das JavaScript-SDK oder das PHP-SDK. embed.js ist ideal, wenn es schnell gehen muss und kein Backend zur Verfügung steht.

Schritt 1 · Einbinden

Das Script laden

Eine Zeile genügt. Das Script registriert die Publino Web Components <publino-article> und <publino-article-list>. Den Publishable Key (pub_pub_…) erzeugen Sie im Dashboard.

Anders als der Secret Key ist der Publishable Key browser-sicher: Er liefert nur veröffentlichte Inhalte und lässt sich auf erlaubte Domains beschränken. Das fertige Snippet finden Sie auch im Dashboard unter Sites → Embed.

index.html
<!-- Einmal im <head> oder vor </body> einbinden -->
<script src="https://cdn.publino.de/embed.js" async></script>
Schritt 2 · Übersicht

Eine Artikel-Liste einbetten

<publino-article-list> lädt und rendert Artikel automatisch. Pflicht-Attribute: site, pk und api; locale und link-pattern sind optional.

index.html
<!-- Eine Liste der neuesten Artikel — ganz ohne Backend.
     link-pattern macht jeden Eintrag zu einem Link (Platzhalter {slug} und {id}). -->
<publino-article-list
  site="mein-blog"
  locale="de"
  pk="pub_pub_xxxxxxxxxxxx"
  api="https://api.publino.de"
  link-pattern="/blog/{slug}-{id}">
</publino-article-list>
Einzelartikel

Einen ganzen Artikel anzeigen

<publino-article> rendert einen kompletten Beitrag (Titel + formatiertes HTML). Das Attribut article-id ist die Public-ID des Artikels. Per kleinem Script lesen Sie die ID aus der URL.

artikel.html
<!-- Ein einzelner Artikel, über seine Public-ID -->
<publino-article
  site="mein-blog"
  article-id="ab12cd34"
  locale="de"
  pk="pub_pub_xxxxxxxxxxxx"
  api="https://api.publino.de">
</publino-article>
router.html
<!-- Artikel automatisch aus der URL laden, z. B. /blog?id=ab12cd34 -->
<div id="content"></div>

<script src="https://cdn.publino.de/embed.js" async></script>
<script>
  const id = new URLSearchParams(location.search).get("id");
  const attrs = 'site="mein-blog" locale="de" pk="pub_pub_xxxxxxxxxxxx" api="https://api.publino.de"';
  document.getElementById("content").innerHTML = id
    ? `<publino-article article-id="${id}" ${attrs}></publino-article>`
    : `<publino-article-list link-pattern="/blog?id={id}" ${attrs}></publino-article-list>`;
</script>
Verlinkung

Listeneinträge verlinken

Mit link-pattern wird jeder Eintrag zu einem Link. Die Platzhalter {slug} und {id} werden pro Artikel ersetzt.

liste.html
<!-- Ohne link-pattern werden Einträge als <div> gerendert (nicht klickbar).
     Mit link-pattern entsteht ein <a href> pro Artikel: -->
<publino-article-list
  site="mein-blog" locale="de" pk="pub_pub_xxxxxxxxxxxx"
  api="https://api.publino.de"
  link-pattern="https://www.meine-seite.de/blog/{slug}-{id}">
</publino-article-list>

<!-- Erzeugtes Markup je Eintrag:
  <a class="publino-article-list__item" href="…/blog/mein-titel-ab12cd34">
    <span class="publino-article-list__item-title">Mein Titel</span>
    <span class="publino-article-list__item-excerpt">Auszug …</span>
  </a>
-->
Styling

An Ihre Marke anpassen

embed.js rendert ins normale DOM (kein Shadow DOM) und vergibt feste CSS-Klassen. Sie stylen sie wie eigenes Markup — mit Ihrem bestehenden Stylesheet.

styles.html
<!-- embed.js vergibt feste CSS-Klassen — Sie stylen sie wie eigenes Markup. -->
<style>
  /* Liste */
  .publino-article-list { display: grid; gap: 24px; }
  .publino-article-list__item {
    display: block; padding: 20px; text-decoration: none; color: inherit;
    border: 1px solid #EDE5F5; border-radius: 14px; transition: box-shadow .15s;
  }
  .publino-article-list__item:hover { box-shadow: 0 8px 28px rgba(45,14,63,.12); }
  .publino-article-list__item-title { display: block; font-weight: 700; font-size: 18px; }
  .publino-article-list__item-excerpt { display: block; margin-top: 6px; color: #6B7280; }

  /* Einzelartikel */
  .publino-article__title { font-size: 32px; font-weight: 800; letter-spacing: -.5px; }
  .publino-article__body { line-height: 1.8; color: #374151; }

  /* Zustände */
  .publino-loading::after { content: "Lädt …"; color: #9CA3AF; }
  .publino-error { color: #b91c1c; }
</style>
Sicherheit

Browser-sicher per Design

Publishable Key statt Secret

embed.js nutzt ausschließlich den pub_pub_…-Key (Attribut pk). Er gibt nur veröffentlichte Inhalte frei — Entwürfe bleiben unsichtbar.

Origin-Allowlist

Beschränken Sie den Key im Dashboard (Sites → Embed) auf Ihre Domains. Anfragen von fremden Origins werden abgelehnt.

Rate Limiting & Caching

Antworten werden mit ETag und Cache-Headern ausgeliefert — schnell und schonend für Ihr Kontingent.

Komplettbeispiel

Eine vollständige Seite

Kopieren, site & pk eintragen, hochladen — fertig ist der Blog.

index.html
<!doctype html>
<html lang="de">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Mein Blog</title>
  <script src="https://cdn.publino.de/embed.js" async></script>
  <style>
    .publino-article-list { display: grid; gap: 20px; max-width: 720px; margin: 0 auto; }
    .publino-article-list__item {
      display: block; padding: 18px; text-decoration: none; color: inherit;
      border: 1px solid #e5e7eb; border-radius: 12px;
    }
    .publino-article-list__item-title { font-weight: 700; font-size: 18px; }
    .publino-article-list__item-excerpt { color: #6b7280; }
  </style>
</head>
<body>
  <header><h1>Mein Blog</h1></header>

  <main>
    <publino-article-list
      site="mein-blog"
      locale="de"
      pk="pub_pub_xxxxxxxxxxxx"
      api="https://api.publino.de"
      link-pattern="/blog?id={id}">
    </publino-article-list>
  </main>
</body>
</html>

Mehr SEO & Performance?

Für server-gerenderte Seiten mit eigenem Meta & JSON-LD nutzen Sie eines der SDKs.