1. Go to this page and download the library: Download indexnowkit/core library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
indexnowkit / core example snippets
use IndexNowKit\Config;
use IndexNowKit\IndexNowKit;
$indexNow = IndexNowKit::create(Config::fromEnv()); // INDEXNOW_KEY, INDEXNOW_BASE_URL, ...
foreach ($indexNow->submit(['/posts/hello', 'https://www.example.com/about']) as $result) {
printf("%s %s %d %s\n", $result->engine, $result->status->value, $result->httpCode ?? 0, $result->error ?? '');
}
$key = IndexNowKit\Key\KeyGenerator::generate(); // 32 hex characters, CSPRNG
file_put_contents("public/$key.txt", $key); // or answer the request yourself:
$body = (new KeyFileResponder($indexNow->keys))->bodyForPath($path, $host); // null -> 404
use IndexNowKit\Attribute\{IndexNow, IndexNowDefaults, IndexNowUrl};
use IndexNowKit\Attribute\Param\{Accessor, Call, Formatted, Placeholder, Value};
#[IndexNowDefaults(when: 'isPublished', fields: ['slug', 'title', 'body', 'published'])]
#[IndexNow(route: 'post_show', params: ['slug' => 'slug'])] // the article page
#[IndexNow(route: 'post_amp', params: ['slug' => 'slug'], when: 'hasAmp', whenFields: ['ampEnabled'])]
#[IndexNow(via: 'category')] // resubmit the category page
#[IndexNow(via: 'tags')] // and every tag page
#[IndexNow(urls: ['/', '/blog'])] // and two literal URLs
class Post {}
#[IndexNow(route: 'post_show', params: [
'year' => new Formatted('publishedAt', 'Y'), // DateTimeInterface::format()
'cat' => 'category.slug', // dotted path through a relation
'section' => new Value('blog'), // a constant
'slug' => new Call('slugFor', Placeholder::Locale), // a method call, one URL per locale
])]
#[IndexNow(url: 'publicUrl')] // a property or method returning string|iterable<string>|null
#[IndexNow(resolver: SyliusChannelUrls::class)] // a UrlResolverInterface class or service id
#[IndexNow(route: 'page_show', params: ['slug' => 'slug'], host: new Accessor('tenant.domain'))] // multi-domain
#[IndexNow(route: 'post_show', params: ['slug' => 'slug'], locales: 'all')] // localized routes
class Page {}
class Offer
{
#[IndexNowUrl(when: 'isLive')] // the get_absolute_url() convention
public function getPublicUrl(): string { return '/offers/' . $this->code; }
}
$indexNow = IndexNowKit::create($config, resolver: new AttributeUrlResolver(new AttributeReader(), ParamExtractor::plain(), $router, $locator));
$indexNow->submitEntity($post, IndexNowKit\Event::Updated);
$indexNow->submitEntities($posts); // many objects, de-duplicated, one request per host and batch
$urls = $indexNow->urlsFor($post, Event::Deleted); // resolve without sending
$rows = $indexNow->explain($post, Event::Updated); // ResolvedUrl: which rule produced which URL
$indexNow->collect(['/posts/1', '/posts/2']); // anywhere during the request
$indexNow->flush(); // at the end of the unit of work
$transport = new FakeTransport();
$indexNow = IndexNowKit::create($config, transport: $transport, debounce: new NullDebounceStore());
$indexNow->submitEntity($post);
self::assertSame(['https://www.example.com/posts/hello'], $transport->posts[0]['body']['urlList']);
use IndexNowKit\Config;
use IndexNowKit\IndexNowKit;
$indexNow = IndexNowKit::create(Config::fromEnv()); // INDEXNOW_KEY, INDEXNOW_BASE_URL, INDEXNOW_DRY_RUN
$results = $indexNow->submit(['/posts/hello']); // list<IndexNowKit\Result>, never throws for remote errors
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.