Gato GraphQL + Bricks Builder + Claude + SEO Framework demosu

Bricks için The SEO Framework Metaverilerini Claude ile Otomatik Oluşturma

Bricks metin öğelerindeki içerikten SEO Framework metaverilerini otomatik olarak oluşturmak için Claude'u kullanın

Leonardo Losoviz
Leonardo Losoviz -
Logo
Image
Target Image
Target Image
Target Image

Bricks metin öğelerindeki içeriğe dayalı olarak The SEO Framework metaverilerini oluşturmak için Claude'u Bricks uzantısı ile tek bir Gato GraphQL query ile kullanabiliriz.

Automation uzantısı sayesinde, yeni bir Bricks sayfası yayınlandığında bu querynin çalıştırılmasını otomatik olarak tetikleyebiliriz.

Bu query, Bricks metin öğelerindeki içeriği analiz etmek ve daha iyi SEO için The SEO Framework metaverilerini (başlık ve açıklama) oluşturmak amacıyla Claude'u kullanır.

Aşağıdaki değişkenleri sağlamamız gerekir:

  • customPostId: Güncellenecek Bricks özel gönderisinin ID'si
  • anthropicAPIKey: Anthropic API için API anahtarı

Claude'un metaverileri nasıl oluşturduğunu ayarlamak için sistem mesajını ve prompt şablonunu özelleştirebilirsiniz.

Queryyi, aşağıda belirtilen Automation'da kullanabilmemiz için "Create The SEO Framework metadata for Bricks with Claude" başlığıyla yeni bir Persisted Query olarak kaydedin.

GraphQL query şöyledir:

query InitializeGlobalVariables
  @configureWarningsOnExportingDuplicateVariable(enabled: false)
{
  emptyArray: _echo(value: [])
    @export(as: "elementTexts")
    @remove
}
 
query GetBricksData($customPostId: ID!)
  @depends(on: "InitializeGlobalVariables")
{
  customPost(by:{ id: $customPostId }, status: any) {
    id
    title
    bricksData(filterBy: { include: ["heading", "text"] })
      @underEachArrayItem
        @underJSONObjectProperty(by: { path: "settings.text" })
          @export(as: "elementTexts")
  }
}
 
query GenerateMetadataWithClaude(
  $anthropicAPIKey: String!
  $maxTokens: Int! = 32000
  $promptTemplate: String! = """
You are an SEO expert specializing in metadata optimization.
 
I need to generate SEO metadata for a WordPress page using The SEO Framework plugin.
 
Based on the following content from the page, please generate:
1. A compelling SEO title (max 60 chars)
2. A meta description (max 160 chars)
 
Please respond in JSON format with this structure:
{
  "title": "SEO title here",
  "description": "Meta description here"
}
 
Return ONLY the JSON object. Do not include any explanations, markdown formatting, or code blocks. The response must be a valid JSON object starting with { and ending with }.
 
Content to analyze:
 
{$encodedContent}
"""
  $model: String! = "claude-sonnet-4-0"
)
  @depends(on: "GetBricksData")
{
  encodedContent: _arrayJoin(
    array: $elementTexts,
    separator: "\n\n"
  )
  prompt: _strReplace(
    search: "{$encodedContent}",
    replaceWith: $__encodedContent,
    in: $promptTemplate
  )
  claudeResponse: _sendJSONObjectItemHTTPRequest(input: {
    url: "https://api.anthropic.com/v1/messages",
    method: POST,
    options: {
      headers: [
        {
          name: "x-api-key",
          value: $anthropicAPIKey
        },
        {
          name: "anthropic-version",
          value: "2023-06-01"
        }
      ],
      json: {
        model: $model,
        max_tokens: $maxTokens,
        messages: [
          {
            role: "user",
            content: $__prompt
          }
        ],
      }
    }
  })
    @underJSONObjectProperty(by: { key: "content" })
      @underArrayItem(index: 0)
        @underJSONObjectProperty(by: { key: "text" })
          @export(as: "jsonEncodedMetadata")
}
 
query ExtractMetadata
  @depends(on: "GenerateMetadataWithClaude")
{
  jsonEncodedMetadata: _echo(value: $jsonEncodedMetadata)
    @remove
  decodedMetadata: _strDecodeJSONObject(string: $jsonEncodedMetadata)
  seoMetadataTitle: _objectProperty(
    object: $__decodedMetadata,
    by: { key: "title" }
  )
    @export(as: "seoMetadataTitle")
  seoMetadataDescription: _objectProperty(
    object: $__decodedMetadata,
    by: { key: "description" }
  )
    @export(as: "seoMetadataDescription")
}
 
mutation UpdateSEOFrameworkMetadata($customPostId: ID!)
  @depends(on: "ExtractMetadata")
{
  updateCustomPost(
    input: {
      id: $customPostId
      meta: {
        _genesis_title: [$seoMetadataTitle],
        _genesis_description: [$seoMetadataDescription],
        _open_graph_title: [$seoMetadataTitle],
        _open_graph_description: [$seoMetadataDescription],
        _twitter_title: [$seoMetadataTitle],
        _twitter_description: [$seoMetadataDescription],
      }
    }
  ) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    customPost {
      id
      metaTitle: metaValue(key: "_genesis_title")
      metaDesc: metaValue(key: "_genesis_description")
      socialTitle: metaValue(key: "_open_graph_title")
      socialDesc: metaValue(key: "_open_graph_description")
      twitterTitle: metaValue(key: "_twitter_title")
      twitterDesc: metaValue(key: "_twitter_description")
    }
  }
}

Değişkenler şöyle görünecektir:

{
  "customPostId": 123,
  "anthropicAPIKey": "sk-ant-..."
}

Automation

Yeni bir Bricks sayfası yayınlandığında querynin çalıştırılmasını otomatik olarak tetiklemek için aşağıdaki ayarlarla yeni bir Automation kuralı oluşturun:

  • Persisted Query: "Create The SEO Framework metadata for Bricks with Claude" (yani yukarıda oluşturduğumuz)
  • Hook name: gatographql:any_to_publish:page
  • Dynamic GraphQL variables:
{
  "customPostId": 1
}
Bricks için The SEO Framework metaverilerini Claude ile oluşturmak amacıyla Automation kuralı
Bricks için The SEO Framework metaverilerini Claude ile oluşturmak amacıyla Automation kuralı

Bültenimize abone olun

Gato GraphQL'deki tüm güncellemelerden haberdar olun.