Анализ сайта https://michaelkamp.org/
Основное Готовность: 75%
Домен
michaelkamp.org
Состояние доменного имени
?
Проверяем корректность доменного имени и наличие технических проблем на уровне домена.
Домен второго уровня идеален для продвижения.
Отличный запоминающийся домен.
Ответ сервера
200 Успешный ответ
HTTP-код ответа и цепочка редиректов
?
Код 200 — страница доступна. Коды 3xx — редиректы (цепочки замедляют загрузку и размывают ссылочный вес). Коды 4xx/5xx — ошибки, поисковик не сможет проиндексировать страницу.
Сервер настроен корректно.
Безопасность
Сайт безопасен
Использование HTTPS и SSL-сертификат
?
HTTPS — обязательный стандарт. Google и Яндекс отдают предпочтение защищённым сайтам. Отсутствие SSL или просроченный сертификат ведут к предупреждениям в браузере и снижению позиций.
Не настроен HSTS (Strict-Transport-Security) — рекомендуется включить.
На сайте работает защищенный протокол ssl и сайт открывается по https.
Ssl-сертификат действителен до 04.10.2026 22:45:22.
Поздравляем! Сайт не содержится в реестре РКН.
Кодировка
UTF-8
Кодировка символов страницы
?
Стандарт — UTF-8. Неправильная кодировка вызывает нечитаемые символы и мешает поисковику корректно распознать текст страницы.
Указана кодировка на странице UTF-8.
Язык
en-US
Атрибут lang в HTML-теге
?
Атрибут lang (<html lang="ru">) сообщает поисковикам и браузерам, на каком языке написана страница. Помогает при ранжировании в региональном поиске.
Язык документа указан явно: en-US.
Скорость загрузки
~0,94сек
Время отклика сервера (TTFB)
?
Time To First Byte — время до получения первого байта от сервера. Норма до 200 мс. Медленный отклик ухудшает пользовательский опыт и ранжирование: Яндекс и Google учитывают скорость страниц.
Скорость загрузки сайта 0,94сек оптимальна.
Объем документа
75Кб
Размер HTML-кода страницы
?
Слишком большой HTML замедляет парсинг браузером и сканирование поисковым роботом. Рекомендуется не более 200 Кб.
Объем html-документа 75Кб оптимален.
Структура html-документа корректна.
Ресурсы
Ресурсы: 11
Внешние ресурсы страницы (CSS, JS, изображения)
?
Количество и тип подключённых ресурсов влияют на скорость загрузки. Большое число запросов увеличивает время рендеринга страницы.
Кол-во файлов ресурсов 11 много для одной страницы. Приемлемо до 10. Проведите оптимизацию файлов ресурсов!
Показать полный список ресурсов
| Тип | Название | Значение |
|---|---|---|
| stylesheet | https://michaelkamp.org/wp-content/plugins/wp-quicklatex/css/quicklatex-format.css?ver=7.1 | |
| stylesheet | //fonts.googleapis.com/css?family=Lato%3A300%2C400&subset=latin%2Clatin-ext | |
| stylesheet | https://michaelkamp.org/wp-content/themes/suits/style.css?ver=2020-09-16 | |
| stylesheet | https://michaelkamp.org/wp-content/plugins/teachpress/styles/teachpress_front.css?ver=9.0.12&ver=7.1 | |
| stylesheet | https://michaelkamp.org/wp-content/plugins/teachpress/includes/academicons/css/academicons.min.css?ver=7.1 | |
| stylesheet | https://michaelkamp.org/wp-content/plugins/teachpress/includes/fontawesome/css/all.min.css?ver=7.1 | |
| js | https://michaelkamp.org/wp-includes/js/jquery/jquery.js?ver=3.7.1 | |
| js | https://michaelkamp.org/wp-includes/js/jquery/jquery-migrate.js?ver=3.4.1 | |
| js | https://michaelkamp.org/wp-content/plugins/wp-quicklatex/js/wp-quicklatex-frontend.js?ver=1.0 | |
| js | text/javascript | https://michaelkamp.org/wp-content/plugins/teachpress/js/frontend.js?ver=9.0.12 |
| js | https://michaelkamp.org/wp-content/themes/suits/js/functions.js?ver=2017-09-25 |
Серверные заголовки
Кол-во: 4
HTTP-заголовки ответа сервера
?
Заголовки сервера передают браузеру и поисковику служебную информацию: кеширование, безопасность (CSP, HSTS), сжатие (gzip). Правильная настройка ускоряет загрузку и повышает защищённость.
Найдены серверные заголовки 4шт. Подробнее про серверные заголовки.
Показать полный список серверных заголовков
| Ключ | Значение |
|---|---|
| Server | nginx |
| Date | Sun, 23 Aug 2026 10:27:40 GMT |
| Vary | Accept-Encoding |
| Link | <https://michaelkamp.org/index.php?rest_route=/>; rel="https://api.w.org/", <https://michaelkamp.org/index.php?rest_route=/wp/v2/pages/7>; rel="alternate"; title="JSON"; type="application/json", <https://michaelkamp.org/>; rel=shortlink |
CMS
Система управления сайтом (движок)
?
CMS — это движок, на котором работает сайт (WordPress, 1C-Bitrix, Tilda и др.). Знание CMS помогает понять возможности SEO-оптимизации и подобрать подходящие инструменты. «Не определена» — вероятно, самописный сайт или нестандартная сборка.
Сайт работает на CMS WordPress.
Веб-сервер
Программное обеспечение сервера
?
Веб-сервер — это ПО, которое отдаёт страницы посетителям (nginx, Apache, IIS, LiteSpeed и др.). Определяется по серверным заголовкам ответа (Server, X-Powered-By и т.п.). «Не определён» — сервер намеренно скрывает эти заголовки, это нормальная практика безопасности.
Сайт работает на веб-сервере nginx.
Мета-теги Готовность: 27%
Title
Michael Kamp
Заголовок страницы в браузере и поисковой выдаче
?
Title — главный SEO-заголовок страницы. Влияет на CTR в поиске и ранжирование. Оптимальная длина: 50–70 символов. Ключевые слова — ближе к началу.
Необходимо увеличить число символов в title (текущее значение мало: 12, минимум: 25, оптимально: от 40 до 45)
Дублей словоформ в title не найдено.
Description
Описание страницы в поисковой выдаче (сниппет)
?
Meta Description — текст под заголовком в выдаче. Напрямую на позиции не влияет, но влияет на CTR. Оптимальная длина: 120–160 символов.
Установите мета-тег description!
Keywords
Список ключевых слов страницы (устаревший тег)
?
Meta Keywords не учитывается Яндексом и Google для ранжирования с 2009–2012 годов. Заполнение не обязательно, но не вредит. Конкурент может использовать содержимое для анализа.
Установите мета-тег keywords!
Канонический Url
https://michaelkamp.org/
Указывает поисковику основную версию страницы
?
Canonical (rel=canonical) предотвращает проблему дублей страниц. Должен точно совпадать с URL проверяемой страницы. Неправильный canonical может передать ссылочный вес на другую страницу.
Канонический Url прописан корректно.
Robots
Есть ошибки
Директивы для поисковых роботов на уровне страницы
?
Meta Robots управляет индексацией конкретной страницы: index/noindex — индексировать ли, follow/nofollow — следовать ли по ссылкам. Noindex полностью исключает страницу из поиска.
Meta-тег robots указан, но в нем содержится неизвестное значение...
Адаптивность
width=device-width
Настройка масштабирования на мобильных устройствах
?
Тег viewport (<meta name="viewport">) сообщает браузеру, как масштабировать страницу на мобильных. Стандарт: width=device-width, initial-scale=1. Отсутствие — признак отсутствия мобильной версии.
Meta-тег viewport со значением-константой width=device-width задаёт ширину страницы в соответствии с размером экрана.
Разметка OpenGraph
Не найдено
Мета-теги для красивых превью в соцсетях
?
OpenGraph (og:title, og:description, og:image) управляет тем, как страница выглядит при репосте в социальных сетях и мессенджерах. Отсутствие OG-тегов — невзрачный превью при шеринге.
Разметка OpenGraph не задана. Страница не оптимизирована под социальные сети. Мета-теги с разметкой Og помогают социальным роботам лучше структурировать Ваш сайт.
Все мета-теги
Кол-во: 4
Полный список мета-тегов страницы
?
Таблица всех meta-тегов, включая нестандартные. Позволяет найти опечатки, дубли и лишние теги.
Найдены мета-теги 4шт. Мета-теги не видимы для человека и предназначены для обмена информацией между веб-страницей и поисковыми системами, браузерами и другими веб-службами. С ними роботы 🤖 и устройства ведут себя более ожидаемо.
Показать полный список мета-тегов
| Тип | Название | Значение |
|---|---|---|
| name | viewport | width=device-width |
| name | robots | max-image-preview:large |
| name | generator | WordPress 7.1 |
| name | msapplication-TileImage | https://michaelkamp.org/wp-content/uploads/2024/12/cropped-michaelkamp_bw_web-1-270x270.png |
Оптимизация Готовность: 62%
Структура
Ошибок нет
Семантические HTML-элементы страницы
?
Проверяет наличие основных структурных элементов: nav, header, footer, main. Корректная семантическая структура помогает поисковику понять архитектуру страницы.
Структура документа корректна (теги <html> и <body> присутствуют в единственном экземпляре).
Контент
Есть ошибки
Объём и качество текстового содержимого
?
Анализирует объём полезного текста на странице. Слишком мало — страница может считаться малополезной. Слишком много — ухудшается читаемость и восприятие.
Слова из title 2 встречаются в тексте редко. Добавьте в контент страницы слова из тега <title>!
Абзацев с текстом 12 достаточно.
Среднее число слов в абзаце 68 достаточно.
Кол-во знаков контента 7528 на странице оптимально.
Кол-во слов 1114 на странице оптимально.
Заголовки
Ошибок нет
Иерархия заголовков H1–H6
?
H1 должен быть один и содержать ключевой запрос. H2–H6 описывают подразделы. Пропуск уровней (H1 → H3) и несколько H1 — типичные ошибки, снижающие понятность страницы для поисковика.
На странице присутствуют заголовки <h1> 1. Это прекрасно.
На странице присутствуют заголовки <h2> 5. Это хорошо.
На странице присутствуют заголовки <h3> 6.
Тошнота
5,92
Насколько одно слово доминирует в тексте
?
Классическая тошнота = √(частота самого повторяющегося слова). Норма до 7–8: текст воспринимается естественно. Выше — поисковик может счесть страницу переспамленной.
Тошнота превышает норму 3. Измените текст страницы!
Академич. тошнота
26,12%
Насколько текст перенасыщен ключевыми словами
?
Академическая тошнота = (частота слова / общее количество слов) × 100%. Показывает долю конкретного слова в тексте. Норма 5–15%.
Академическая тошнота превышает норму 5-15%. Измените текст страницы!
Семантическое ядро
20
Наиболее часто встречающиеся слова на странице
?
Топ слов по частоте использования. Показывает, какие слова доминируют в тексте с точки зрения поисковика.
Контент страницы содержит осмысленный текст и слова.
Показать список слов
| Слово | Кол-во | Частота |
|---|---|---|
| learning | 35 | 3,14% |
| machine | 14 | 1,26% |
| research | 13 | 1,17% |
| federated | 12 | 1,08% |
| university | 8 | 0,72% |
| artificial | 7 | 0,63% |
| intelligence | 7 | 0,63% |
| trustworthy | 7 | 0,63% |
| institute | 6 | 0,54% |
| privacy | 6 | 0,54% |
| medicine | 5 | 0,45% |
| causal | 5 | 0,45% |
| received | 5 | 0,45% |
| michael | 4 | 0,36% |
| dortmund | 4 | 0,36% |
| member | 4 | 0,36% |
| lamarr | 4 | 0,36% |
| medical | 4 | 0,36% |
| systems | 4 | 0,36% |
| published | 4 | 0,36% |
Индексация Готовность: 30%
Индексирование
Ошибок нет
Разрешено ли индексирование страницы
?
Проверяет, не закрыта ли страница от индексации через robots.txt, meta robots или X-Robots-Tag. Страница, закрытая от индексации, не появится в поисковой выдаче.
Анкоров на странице 72 оптимально. Поисковые роботы обязательно проиндексируют сайт.
Robots.txt
Найден корректный robots.txt
Файл управления сканированием сайта роботами
?
Robots.txt указывает поисковым роботам, какие страницы сканировать, а какие — нет. Ошибки в файле могут случайно закрыть важные разделы от индексации.
Robots.txt настроен корректно. Размер файла: 76963 байт. Загружен за: 2сек.
Проверяемая страница не запрещена в robots.txt.
Robots.txt доступен по постоянному адресу
Показать содержимое robots.txt
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="https://michaelkamp.org/xmlrpc.php">
<title>Michael Kamp</title>
<meta name='robots' content='max-image-preview:large' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel="alternate" type="application/rss+xml" title="Michael Kamp » Feed" href="https://michaelkamp.org/?feed=rss2" />
<link rel="alternate" type="application/rss+xml" title="Michael Kamp » Comments Feed" href="https://michaelkamp.org/?feed=comments-rss2" />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://michaelkamp.org/index.php?rest_route=%2Foembed%2F1.0%2Fembed&url=https%3A%2F%2Fmichaelkamp.org%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://michaelkamp.org/index.php?rest_route=%2Foembed%2F1.0%2Fembed&url=https%3A%2F%2Fmichaelkamp.org%2F&format=xml" />
<style id="wp-img-auto-sizes-contain-inline-css">
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<link rel='stylesheet' id='wp-quicklatex-format-css' href='https://michaelkamp.org/wp-content/plugins/wp-quicklatex/css/quicklatex-format.css?ver=7.1' media='all' />
<style id="wp-emoji-styles-inline-css">
img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
/*# sourceURL=wp-emoji-styles-inline-css */
</style>
<style id="wp-block-library-inline-css">
/**
* Colors
*/
/**
* Typography
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
/**
* Breakpoints & Media Queries
*/
/**
* Converts a hex value into the rgb equivalent.
*
* @param {string} hex - the hexadecimal value to convert
* @return {string} comma separated rgb values
*/
/**
* Long content fade mixin
*
* Creates a fading overlay to signify that the content is longer
* than the space allows.
*/
/**
* Breakpoint mixins
*/
/**
* Focus styles.
*/
/**
* Standard focus rings for the WordPress Design System.
*
* Apply `outset-ring__focus` inside the relevant pseudo-class at the call site,
* e.g. `&:focus { @include outset-ring__focus(); }`.
*/
/**
* Applies editor left position to the selector passed as argument
*/
/**
* Styles that are reused verbatim in a few places
*/
/**
* Allows users to opt-out of animations via OS-level preferences.
*/
/**
* Reset default styles for JavaScript UI based pages.
* This is a WP-admin agnostic reset
*/
/**
* Reset the WP Admin page styles for Gutenberg-like pages.
*/
/**
* Creates a checkerboard pattern background to indicate transparency.
* @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
*/
:root {
--wp-block-synced-color: #7a00df;
--wp-block-synced-color--rgb: 122, 0, 223;
--wp-bound-block-color: var(--wp-block-synced-color);
--wp-editor-canvas-background: #ddd;
--wp-admin-theme-color: #007cba;
--wp-admin-theme-color--rgb: 0, 124, 186;
--wp-admin-theme-color-darker-10: rgb(0, 107, 160.5);
--wp-admin-theme-color-darker-10--rgb: 0, 107, 160.5;
--wp-admin-theme-color-darker-20: #005a87;
--wp-admin-theme-color-darker-20--rgb: 0, 90, 135;
--wp-admin-border-width-focus: 2px;
}
@media (min-resolution: 192dpi) {
:root {
--wp-admin-border-width-focus: 1.5px;
}
}
/**
* Element styles.
*/
.wp-element-button {
cursor: pointer;
}
:root .has-very-light-gray-background-color {
background-color: #eee;
}
:root .has-very-dark-gray-background-color {
background-color: #313131;
}
:root .has-very-light-gray-color {
color: #eee;
}
:root .has-very-dark-gray-color {
color: #313131;
}
:root {
/* stylelint-disable @stylistic/function-comma-space-after -- We can not use spacing because of WP multi site kses rule. */
}
:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background {
background: linear-gradient(135deg, rgb(0, 208, 132) 0%, rgb(6, 147, 227) 100%);
}
:root .has-purple-crush-gradient-background {
background: linear-gradient(135deg, rgb(52, 226, 228) 0%, rgb(71, 33, 251) 50%, rgb(171, 29, 254) 100%);
}
:root .has-hazy-dawn-gradient-background {
background: linear-gradient(135deg, rgb(250, 172, 168) 0%, rgb(218, 208, 236) 100%);
}
:root .has-subdued-olive-gradient-background {
background: linear-gradient(135deg, rgb(250, 250, 225) 0%, rgb(103, 166, 113) 100%);
}
:root .has-atomic-cream-gradient-background {
background: linear-gradient(135deg, rgb(253, 215, 154) 0%, rgb(0, 74, 89) 100%);
}
:root .has-nightshade-gradient-background {
background: linear-gradient(135deg, rgb(51, 9, 104) 0%, rgb(49, 205, 207) 100%);
}
:root .has-midnight-gradient-background {
background: linear-gradient(135deg, rgb(2, 3, 129) 0%, rgb(40, 116, 252) 100%);
}
:root {
/* stylelint-enable @stylistic/function-comma-space-after */
--wp--preset--font-size--normal: 16px;
--wp--preset--font-size--huge: 42px;
}
.has-regular-font-size {
font-size: 1em;
}
.has-larger-font-size {
font-size: 2.625em;
}
.has-normal-font-size {
font-size: var(--wp--preset--font-size--normal);
}
.has-huge-font-size {
font-size: var(--wp--preset--font-size--huge);
}
:root .has-text-align-center {
text-align: center;
}
:root .has-text-align-left {
/*rtl:ignore*/
text-align: left;
}
:root .has-text-align-right {
/*rtl:ignore*/
text-align: right;
}
.has-fit-text {
white-space: nowrap !important;
}
#end-resizable-editor-section {
display: none;
}
.aligncenter {
clear: both;
}
.items-justified-left {
justify-content: flex-start;
}
.items-justified-center {
justify-content: center;
}
.items-justified-right {
justify-content: flex-end;
}
.items-justified-space-between {
justify-content: space-between;
}
.screen-reader-text {
border: 0;
clip-path: inset(50%);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
word-wrap: normal !important;
word-break: normal !important;
}
.screen-reader-text:focus {
background-color: #ddd;
clip-path: none;
color: #444;
display: block;
font-size: 1em;
height: auto;
left: 5px;
line-height: normal;
padding: 15px 23px 14px;
text-decoration: none;
top: 5px;
width: auto;
z-index: 100000;
}
/**
* The following provide a simple means of applying a default border style when
* a user first makes a selection in the border block support panel.
* This prevents issues such as where the user could set a border width
* and see no border due there being no border style set.
*
* This is intended to be removed once intelligent defaults can be set while
* making border selections via the block support.
*
* See: https://github.com/WordPress/gutenberg/pull/33743
*/
html :where(.has-border-color) {
border-style: solid;
}
html :where([style^=border-color],
[style*=";border-color"],
[style*="; border-color"]) {
border-style: solid;
}
html :where([style^=border-top-color],
[style*=";border-top-color"],
[style*="; border-top-color"]) {
border-top-style: solid;
}
html :where([style^=border-right-color],
[style*=";border-right-color"],
[style*="; border-right-color"]) {
/*rtl:ignore*/
border-right-style: solid;
}
html :where([style^=border-bottom-color],
[style*=";border-bottom-color"],
[style*="; border-bottom-color"]) {
border-bottom-style: solid;
}
html :where([style^=border-left-color],
[style*=";border-left-color"],
[style*="; border-left-color"]) {
/*rtl:ignore*/
border-left-style: solid;
}
html :where([style^=border-width],
[style*=";border-width"],
[style*="; border-width"]) {
border-style: solid;
}
html :where([style^=border-top-width],
[style*=";border-top-width"],
[style*="; border-top-width"]) {
border-top-style: solid;
}
html :where([style^=border-right-width],
[style*=";border-right-width"],
[style*="; border-right-width"]) {
/*rtl:ignore*/
border-right-style: solid;
}
html :where([style^=border-bottom-width],
[style*=";border-bottom-width"],
[style*="; border-bottom-width"]) {
border-bottom-style: solid;
}
html :where([style^=border-left-width],
[style*=";border-left-width"],
[style*="; border-left-width"]) {
/*rtl:ignore*/
border-left-style: solid;
}
/**
* Provide baseline responsiveness for images.
*/
html :where(img[class*=wp-image-]) {
height: auto;
max-width: 100%;
}
/**
* Reset user agent styles for figure element margins.
*/
:where(figure) {
margin: 0 0 1em 0;
}
html :where(.is-position-sticky) {
--wp-admin--admin-bar--position-offset: var(--wp-admin--admin-bar--height, 0px);
}
@media screen and (max-width: 600px) {
html :where(.is-position-sticky) {
--wp-admin--admin-bar--position-offset: 0px;
}
}
/*# sourceURL=/wp-includes/css/dist/block-library/common.css */
</style>
<style id="wp-block-heading-inline-css">
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Colors
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
h1:where(.wp-block-heading).has-background,
h2:where(.wp-block-heading).has-background,
h3:where(.wp-block-heading).has-background,
h4:where(.wp-block-heading).has-background,
h5:where(.wp-block-heading).has-background,
h6:where(.wp-block-heading).has-background {
padding: 1.25em 2.375em;
}
h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]), h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),
h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),
h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),
h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),
h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),
h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),
h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),
h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),
h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),
h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),
h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]) {
rotate: 180deg;
}
/*# sourceURL=https://michaelkamp.org/wp-includes/blocks/heading/style.css */
</style>
<style id="wp-block-list-inline-css">
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Colors
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
ol,
ul {
box-sizing: border-box;
}
:root :where(.wp-block-list.has-background) {
padding: 1.25em 2.375em;
}
/*# sourceURL=https://michaelkamp.org/wp-includes/blocks/list/style.css */
</style>
<style id="wp-block-paragraph-inline-css">
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Colors
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
.is-small-text {
font-size: 0.875em;
}
.is-regular-text {
font-size: 1em;
}
.is-large-text {
font-size: 2.25em;
}
.is-larger-text {
font-size: 3em;
}
.has-drop-cap:not(:focus)::first-letter {
float: left;
font-size: 8.4em;
line-height: 0.68;
font-weight: 100;
margin: 0.05em 0.1em 0 0;
text-transform: uppercase;
font-style: normal;
}
body.rtl .has-drop-cap:not(:focus)::first-letter {
float: initial;
margin-left: 0.1em;
}
p.has-drop-cap.has-background {
overflow: hidden;
}
:root :where(p.has-background) {
padding: 1.25em 2.375em;
}
:where(p.has-text-color:not(.has-link-color)) a {
color: inherit;
}
p.has-text-align-right[style*="writing-mode:vertical-rl"],
p.has-text-align-left[style*="writing-mode:vertical-lr"] {
rotate: 180deg;
}
/*# sourceURL=https://michaelkamp.org/wp-includes/blocks/paragraph/style.css */
</style>
<style id="wp-block-post-featured-image-inline-css">
/**
* Colors
*/
.wp-block-post-featured-image {
margin-left: 0;
margin-right: 0;
}
.wp-block-post-featured-image a {
display: block;
height: 100%;
}
.wp-block-post-featured-image :where(img) {
max-width: 100%;
width: 100%;
height: auto;
vertical-align: bottom;
box-sizing: border-box;
}
.wp-block-post-featured-image.alignwide img, .wp-block-post-featured-image.alignfull img {
width: 100%;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim {
position: absolute;
inset: 0;
background-color: #000;
}
.wp-block-post-featured-image {
position: relative;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient {
background-color: transparent;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0 {
opacity: 0;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10 {
opacity: 0.1;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20 {
opacity: 0.2;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30 {
opacity: 0.3;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40 {
opacity: 0.4;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50 {
opacity: 0.5;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60 {
opacity: 0.6;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70 {
opacity: 0.7;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80 {
opacity: 0.8;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90 {
opacity: 0.9;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100 {
opacity: 1;
}
.wp-block-post-featured-image:where(.alignleft, .alignright) {
width: 100%;
}
/*# sourceURL=https://michaelkamp.org/wp-includes/blocks/post-featured-image/style.css */
</style>
<style id="wp-block-post-template-inline-css">
/**
* Breakpoints & Media Queries
*/
/**
* Typography
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Colors
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
/**
* Converts a hex value into the rgb equivalent.
*
* @param {string} hex - the hexadecimal value to convert
* @return {string} comma separated rgb values
*/
/**
* Long content fade mixin
*
* Creates a fading overlay to signify that the content is longer
* than the space allows.
*/
/**
* Breakpoint mixins
*/
/**
* Focus styles.
*/
/**
* Standard focus rings for the WordPress Design System.
*
* Apply `outset-ring__focus` inside the relevant pseudo-class at the call site,
* e.g. `&:focus { @include outset-ring__focus(); }`.
*/
/**
* Applies editor left position to the selector passed as argument
*/
/**
* Styles that are reused verbatim in a few places
*/
/**
* Allows users to opt-out of animations via OS-level preferences.
*/
/**
* Reset default styles for JavaScript UI based pages.
* This is a WP-admin agnostic reset
*/
/**
* Reset the WP Admin page styles for Gutenberg-like pages.
*/
/**
* Creates a checkerboard pattern background to indicate transparency.
* @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
*/
.wp-block-post-template {
margin-top: 0;
margin-bottom: 0;
max-width: 100%;
list-style: none;
padding: 0;
box-sizing: border-box;
}
.wp-block-post-template.is-flex-container {
flex-direction: row;
display: flex;
flex-wrap: wrap;
gap: 1.25em;
}
.wp-block-post-template.is-flex-container > li {
margin: 0;
width: 100%;
}
@media (min-width: 600px) {
.wp-block-post-template.is-flex-container.is-flex-container.columns-2 > li {
width: calc(100% / 2 - 1.25em + 1.25em / 2);
}
.wp-block-post-template.is-flex-container.is-flex-container.columns-3 > li {
width: calc(100% / 3 - 1.25em + 1.25em / 3);
}
.wp-block-post-template.is-flex-container.is-flex-container.columns-4 > li {
width: calc(100% / 4 - 1.25em + 1.25em / 4);
}
.wp-block-post-template.is-flex-container.is-flex-container.columns-5 > li {
width: calc(100% / 5 - 1.25em + 1.25em / 5);
}
.wp-block-post-template.is-flex-container.is-flex-container.columns-6 > li {
width: calc(100% / 6 - 1.25em + 1.25em / 6);
}
}
@media (max-width: 600px) {
.wp-block-post-template-is-layout-grid[class*=columns-]:not(.has-native-responsive-grid) {
grid-template-columns: 1fr;
}
}
.wp-block-post-template-is-layout-constrained > li > .alignright,
.wp-block-post-template-is-layout-flow > li > .alignright {
float: right;
margin-inline-start: 2em;
margin-inline-end: 0;
}
.wp-block-post-template-is-layout-constrained > li > .alignleft,
.wp-block-post-template-is-layout-flow > li > .alignleft {
float: left;
margin-inline-start: 0;
margin-inline-end: 2em;
}
.wp-block-post-template-is-layout-constrained > li > .aligncenter,
.wp-block-post-template-is-layout-flow > li > .aligncenter {
margin-inline-start: auto;
margin-inline-end: auto;
}
/*# sourceURL=https://michaelkamp.org/wp-includes/blocks/post-template/style.css */
</style>
<style id="wp-block-post-title-inline-css">
.wp-block-post-title {
word-break: break-word;
box-sizing: border-box;
}
.wp-block-post-title :where(a) {
display: inline-block;
font-family: inherit;
font-size: inherit;
font-style: inherit;
font-weight: inherit;
letter-spacing: inherit;
line-height: inherit;
text-decoration: inherit;
}
/*# sourceURL=https://michaelkamp.org/wp-includes/blocks/post-title/style.css */
</style>
<style id="wp-block-columns-inline-css">
/**
* Breakpoints & Media Queries
*/
/**
* Typography
*/
/**
* SCSS Variables.
*
* Please use variables from this sheet to ensure consistency across the UI.
* Don't add to this sheet unless you're pretty sure the value will be reused in many places.
* For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
*/
/**
* Colors
*/
/**
* Fonts & basic variables.
*/
/**
* Typography
*/
/**
* Grid System.
* https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
*/
/**
* Radius scale.
*/
/**
* Elevation scale.
*/
/**
* Dimensions.
*/
/**
* Mobile specific styles
*/
/**
* Editor styles.
*/
/**
* Block & Editor UI.
*/
/**
* Block paddings.
*/
/**
* React Native specific.
* These variables do not appear to be used anywhere else.
*/
/**
* Converts a hex value into the rgb equivalent.
*
* @param {string} hex - the hexadecimal value to convert
* @return {string} comma separated rgb values
*/
/**
* Long content fade mixin
*
* Creates a fading overlay to signify that the content is longer
* than the space allows.
*/
/**
* Breakpoint mixins
*/
/**
* Focus styles.
*/
/**
* Standard focus rings for the WordPress Design System.
*
* Apply `outset-ring__focus` inside the relevant pseudo-class at the call site,
* e.g. `&:focus { @include outset-ring__focus(); }`.
*/
/**
* Applies editor left position to the selector passed as argument
*/
/**
* Styles that are reused verbatim in a few places
*/
/**
* Allows users to opt-out of animations via OS-level preferences.
*/
/**
* Reset default styles for JavaScript UI based pages.
* This is a WP-admin agnostic reset
*/
/**
* Reset the WP Admin page styles for Gutenberg-like pages.
*/
/**
* Creates a checkerboard pattern background to indicate transparency.
* @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
*/
.wp-block-columns {
display: flex;
box-sizing: border-box;
flex-wrap: wrap !important;
}
@media (min-width: 782px) {
.wp-block-columns {
flex-wrap: nowrap !important;
}
}
.wp-block-columns {
align-items: initial !important;
/**
* All Columns Alignment
*/
}
.wp-block-columns.are-vertically-aligned-top {
align-items: flex-start;
}
.wp-block-columns.are-vertically-aligned-center {
align-items: center;
}
.wp-block-columns.are-vertically-aligned-bottom {
align-items: flex-end;
}
@media (max-width: 781px) {
.wp-block-columns:not(.is-not-stacked-on-mobile) > .wp-block-column {
flex-basis: 100% !important;
}
}
@media (min-width: 782px) {
.wp-block-columns:not(.is-not-stacked-on-mobile) > .wp-block-column {
flex-basis: 0;
flex-grow: 1;
}
.wp-block-columns:not(.is-not-stacked-on-mobile) > .wp-block-column[style*=flex-basis] {
flex-grow: 0;
}
}
.wp-block-columns.is-not-stacked-on-mobile {
flex-wrap: nowrap !important;
}
.wp-block-columns.is-not-stacked-on-mobile > .wp-block-column {
flex-basis: 0;
flex-grow: 1;
}
.wp-block-columns.is-not-stacked-on-mobile > .wp-block-column[style*=flex-basis] {
flex-grow: 0;
}
:where(.wp-block-columns) {
margin-bottom: 1.75em;
}
:where(.wp-block-columns.has-background) {
padding: 1.25em 2.375em;
}
.wp-block-column {
flex-grow: 1;
min-width: 0;
word-break: break-word;
overflow-wrap: break-word;
/**
* Individual Column Alignment
*/
}
.wp-block-column.is-vertically-aligned-top {
align-self: flex-start;
}
.wp-block-column.is-vertically-aligned-center {
align-self: center;
}
.wp-block-column.is-vertically-aligned-bottom {
align-self: flex-end;
}
.wp-block-column.is-vertically-aligned-stretch {
align-self: stretch;
}
.wp-block-column.is-vertically-aligned-top, .wp-block-column.is-vertically-aligned-center, .wp-block-column.is-vertically-aligned-bottom {
width: 100%;
}
/*# sourceURL=https://michaelkamp.org/wp-includes/blocks/columns/style.css */
</style>
<style id="classic-theme-styles-inline-css">
/**
* These rules are needed for backwards compatibility.
* They should match the button element rules in the base theme.json file.
*/
.wp-block-button__link {
color: #ffffff;
background-color: #32373c;
border-radius: 9999px; /* 100% causes an oval, but any explicit but really high value retains the pill shape. */
/* This needs a low specificity so it won't override the rules from the button element if defined in theme.json. */
box-shadow: none;
text-decoration: none;
/* The extra 2px are added to size solids the same as the outline versions.*/
padding: calc(0.667em + 2px) calc(1.333em + 2px);
font-size: 1.125em;
}
.wp-block-file__button {
background: #32373c;
color: #ffffff;
text-decoration: none;
}
/*# sourceURL=/wp-includes/css/classic-themes.css */
</style>
<style id="global-styles-inline-css">
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
/*# sourceURL=global-styles-inline-css */
</style>
<link rel='stylesheet' id='suits-fonts-css' href='//fonts.googleapis.com/css?family=Lato%3A300%2C400&subset=latin%2Clatin-ext' media='all' />
<link rel='stylesheet' id='suits-style-css' href='https://michaelkamp.org/wp-content/themes/suits/style.css?ver=2020-09-16' media='all' />
<script id="jquery-core-js" src="https://michaelkamp.org/wp-includes/js/jquery/jquery.js?ver=3.7.1"></script>
<script id="jquery-migrate-js" src="https://michaelkamp.org/wp-includes/js/jquery/jquery-migrate.js?ver=3.4.1"></script>
<script id="wp-quicklatex-frontend-js" src="https://michaelkamp.org/wp-content/plugins/wp-quicklatex/js/wp-quicklatex-frontend.js?ver=1.0"></script>
<link rel="https://api.w.org/" href="https://michaelkamp.org/index.php?rest_route=/" /><link rel="alternate" title="JSON" type="application/json" href="https://michaelkamp.org/index.php?rest_route=/wp/v2/pages/7" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://michaelkamp.org/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 7.1" />
<link rel="canonical" href="https://michaelkamp.org/" />
<link rel='shortlink' href='https://michaelkamp.org/' />
<!-- teachPress -->
<script type="text/javascript" src="https://michaelkamp.org/wp-content/plugins/teachpress/js/frontend.js?ver=9.0.12"></script>
<!-- END teachPress -->
<link rel="icon" href="https://michaelkamp.org/wp-content/uploads/2024/12/cropped-michaelkamp_bw_web-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://michaelkamp.org/wp-content/uploads/2024/12/cropped-michaelkamp_bw_web-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://michaelkamp.org/wp-content/uploads/2024/12/cropped-michaelkamp_bw_web-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://michaelkamp.org/wp-content/uploads/2024/12/cropped-michaelkamp_bw_web-1-270x270.png" />
<style id="wp-custom-css">
a {
pointer-events: auto;
}
</style>
<link rel='stylesheet' id='teachpress_front-css' href='https://michaelkamp.org/wp-content/plugins/teachpress/styles/teachpress_front.css?ver=9.0.12&ver=7.1' media='all' />
<link rel='stylesheet' id='academicons-css' href='https://michaelkamp.org/wp-content/plugins/teachpress/includes/academicons/css/academicons.min.css?ver=7.1' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://michaelkamp.org/wp-content/plugins/teachpress/includes/fontawesome/css/all.min.css?ver=7.1' media='all' />
<style id="core-block-supports-inline-css">
/**
* Core styles: block-supports
*/
.wp-container-core-columns-is-layout-8f761849 {
flex-wrap: nowrap;
}
/*# sourceURL=core-block-supports-inline-css */
</style>
</head>
<body class="home wp-singular page-template-default page page-id-7 wp-theme-suits locale-en-us single-author no-footer-sidebar">
<div id="page" class="hfeed site">
<header id="masthead" class="site-header" role="banner">
<div class="logo-container">
<h1 class="site-title"><a href="https://michaelkamp.org/" title="Michael Kamp" rel="home">Michael Kamp</a></h1>
<p class="site-description"></p>
</div>
<div id="navbar" class="navbar">
<nav id="site-navigation" class="navigation main-navigation" role="navigation">
<h4 class="menu-toggle">Menu</h4>
<div class="menu-oberes-menu-container"><ul id="menu-oberes-menu" class="nav-menu"><li id="menu-item-20" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-20"><a href="http://michaelkamp.org/">Home</a></li>
<li id="menu-item-342" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-342"><a href="https://michaelkamp.org/?cat=9">Blog</a></li>
<li id="menu-item-51" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-51"><a href="https://michaelkamp.org/?page_id=37">Publications</a>
<ul class="sub-menu">
<li id="menu-item-111" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-111"><a href="https://michaelkamp.org/?cat=4">Publication List</a></li>
</ul>
</li>
<li id="menu-item-63" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-63"><a href="https://michaelkamp.org/?page_id=61">People</a></li>
<li id="menu-item-60" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-60"><a href="https://michaelkamp.org/?page_id=58">Software</a></li>
<li id="menu-item-92" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-92"><a href="https://michaelkamp.org/?page_id=90">Talks and Events</a></li>
<li id="menu-item-23" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23"><a href="https://michaelkamp.org/?page_id=9">Publishing Notes</a></li>
</ul></div> <form role="search" method="get" class="search-form" action="https://michaelkamp.org/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Search …" value="" name="s" />
</label>
<input type="submit" class="search-submit" value="Search" />
</form> </nav><!-- #site-navigation -->
</div><!-- #navbar -->
</header><!-- #masthead -->
<div id="main" class="site-main">
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<article id="post-7" class="post-7 page type-page status-publish hentry">
<header class="entry-header">
<h2 class="entry-title">Home</h2>
</header><!-- .entry-header -->
<div class="entry-content">
<h3 class="wp-block-heading"></h3>
<p class="wp-block-paragraph">I am <strong>Associate Professor</strong> for <strong>Machine Learning and Artificial Intelligence</strong> at <a href="http://I have been appointed Associate Professor for Machine Learning and Artificial Intelligence at TU Dortmund University and joined the Lamarr Institute for Machine Learning and Artificial Intelligence—one of Germany’s national AI competence centers. I will continue my research on deep learning theory, causality, and trustworthy federated learning, with a strong focus on medical and high-stakes applications.">TU Dortmund</a> University and a faculty member of the <a href="https://lamarr-institute.org/">Lamarr Institute for Machine Learning and Artificial Intelligence</a>.</p>
<p class="wp-block-paragraph">I remain affiliated with the <a href="https://www.ikim.uk-essen.de/" data-type="URL" data-id="https://www.ikim.uk-essen.de/" target="_blank" rel="noreferrer noopener">Institute for Artificial Intelligence in Medicine</a> (IKIM) at the <a href="https://www.ume.de/">University Medicine Essen</a>, where I continue to collaborate on medical AI research. I offer Bachelor’s and Master’s thesis topics for students of the <a href="https://www.uaruhr.de/">UA Ruhr</a> (University of Duisburg-Essen, Ruhr-University Bochum, and TU Dortmund).</p>
<p class="wp-block-paragraph">My <a href="https://en.wikipedia.org/wiki/Erd%C5%91s_number">Erdős number</a> is at most <a href="https://www.csauthors.net/distance/michael-kamp/paul-erdos">4</a>. </p>
<h3 class="wp-block-heading">News</h3>
<ul class="wp-block-list">
<li>I am terribly proud of my postdoc Osman Mian for receiving the <a href="https://aaai.org/conference/aaai/aaai-26/">AAAI</a> <a href="https://aaai.org/about-aaai/aaai-awards/aaai-conference-paper-awards-and-recognition/">Outstanding Paper Award 2026</a> for his work on “<a href="https://arxiv.org/abs/2512.14361">Causal Structure Learning for Dynamical Systems with Theoretical Score Analysis</a>“.</li>
<li>Our project <a href="https://www.flipit-research.network/">FLIP-IT</a> for federated learning in a network of general practitioners started in January, 2026. The project is funded by <a href="https://www.ki.nrw/">KI.NRW</a> (<a href="https://www.efre.nrw/">EFRE</a>) with the goal to build a trustworthy and secure federated learning infrastructure in GP practices. With this, we will train early warning <a href="https://journals.lww.com/jasn/fulltext/2024/10001/artificial_intelligence__ai__driven_screening_for.335.aspx">models for chronic kidney disease</a> to protect patients from kidney failure and dialysis. </li>
<li>My PhD student <a href="https://scholar.google.de/citations?user=ktwMOCEAAAAJ">Ting Han</a>, my colleagues <a href="https://scholar.google.de/citations?user=Z34FjHgAAAAJ">Linara Adilova</a>, <a href="https://scholar.google.de/citations?user=lgSAcz0AAAAJ">Henning Petzka</a>, <a href="https://scholar.google.de/citations?user=Vly6hRQAAAAJ">Jens Kleesiek</a>, and I published a paper on “<a href="https://arxiv.org/pdf/2509.17738">Flatness is Necessary, Neural Collapse is Not: Rethinking Generalization via Grokking</a>” at <a href="https://neurips.cc/">NeurIPS 2025</a> (<a href="http://portal.core.edu.au/conf-ranks/?search=iclr&by=all&source=all&sort=atitle&page=1" target="_blank" rel="noreferrer noopener">A*, top 7%</a>)</li>
<li>My colleagues <a href="https://scholar.google.com/citations?user=Z34FjHgAAAAJ&hl=en">Linara Adilova</a>, <a href="https://alpha.di.unito.it/bruno-casella/">Bruno Casella</a>, <a href="https://alpha.di.unito.it/samuele-fonio/">Samuele Fonio</a>, <a href="https://makgyver.github.io/">Mirko Polato</a> and I are organizing the Workshop on Federated Learning in Critical Applications at <a href="https://aaai.org/conference/aaai/aaai-26/">AAAI, 2026</a> in Singapore. </li>
<li>I have been appointed Associate Professor for Machine Learning and Artificial Intelligence at <a href="http://I have been appointed Associate Professor for Machine Learning and Artificial Intelligence at TU Dortmund University and joined the Lamarr Institute for Machine Learning and Artificial Intelligence—one of Germany’s national AI competence centers. I will continue my research on deep learning theory, causality, and trustworthy federated learning, with a strong focus on medical and high-stakes applications.">TU Dortmund</a> University and joined the <a href="https://lamarr-institute.org/">Lamarr Institute for Machine Learning and Artificial Intelligence</a>. I will continue my research on deep learning theory, causality, and trustworthy federated learning, with a strong focus on medical and high-stakes applications.</li>
<li>We are presenting two papers at <a href="https://aaai.org/conference/aaai/aaai-25/">AAAI 2025</a> (<a href="https://portal.core.edu.au/conf-ranks/?search=AAAI&by=all&source=all&sort=atitle&page=1" target="_blank" rel="noreferrer noopener">A*, top 7%</a>): Amr Abourayya, Jens Kleesiek, Kanishka Rao, Erman Ayday, Bharat Rao, Geoffrey I. Webb, and I published a paper on “<a href="https://arxiv.org/abs/2310.05696">Little is Enough: Boosting Privacy by Sharing Only Hard Labels in Federated Semi-Supervised Learning</a>” and Sebastian Dalleiger, Jilles Vreeken, and I published a paper on “<a href="https://arxiv.org/abs/2407.01776">Federated Binary Matrix Factorization using Proximal Optimization</a>“.</li>
</ul>
<h3 class="wp-block-heading">Research Interests</h3>
<p class="wp-block-paragraph">My research focuses on the development of trustworthy and theoretically grounded machine learning methods—particularly in settings where data is distributed, privacy is critical, and model performance must be provable, interpretable, and robust. I am especially interested in the interplay between <em>deep learning theory</em>, <em>causal representation learning</em>, and <em>federated learning</em>, and how these foundations can be leveraged to design reliable AI systems for real-world, high-stakes applications such as healthcare.</p>
<p class="wp-block-paragraph">I investigate the mathematical principles underlying deep learning, including loss surface geometry, generalization theory, and flatness, and study their connection to robustness and adversarial behavior. In parallel, I explore the discovery and utilization of causal structures in data—both to improve learning performance and to enhance model explainability and reliability. My group has pioneered methods for privacy-preserving causal discovery in federated settings, where both the statistical and ethical demands are uniquely high.</p>
<p class="wp-block-paragraph">A core strand of my work centers around <em>federated and decentralized learning</em>, where models are trained collaboratively across devices or institutions without sharing raw data. I design algorithms that drastically reduce communication overhead, enable learning from highly non-IID or small datasets, and maintain data privacy while still achieving high performance. These approaches are rooted in online learning, optimization theory, and distributed systems, and are supported by rigorous guarantees.</p>
<p class="wp-block-paragraph">In applied research, I collaborate closely with partners in medicine, industry, and government to ensure that theoretical advances translate into tangible impact. I have contributed to medical AI tools for early disease detection, 3D shape analysis, and transfer learning under domain shift—while rigorously addressing issues of privacy, fairness, and explainability. Beyond healthcare, my methods have been applied to autonomous driving, cybersecurity, and industrial automation.</p>
<p class="wp-block-paragraph">At the Lamarr Institute, I contribute to Germany’s national mission of building ethical, trustworthy, and high-performance AI systems that are both scientifically excellent and socially responsible. My work is regularly published at the top conferences in machine learning, including NeurIPS, ICLR, and AAAI.</p>
<h3 class="wp-block-heading">Curriculum Vitae – Highlights</h3>
<p class="wp-block-paragraph">Michael Kamp is Associate Professor for Machine Learning and Artificial Intelligence at <a href="https://www.tu-dortmund.de/">TU Dortmund</a> University and a faculty member of the <a href="https://lamarr-institute.org/">Lamarr Institute for Machine Learning and Artificial Intelligence</a>. His research spans the theoretical foundations of deep learning, causal representation learning, and trustworthy machine learning, with a particular focus on federated learning and privacy-preserving optimization. He develops machine learning methods that are not only mathematically rigorous but also designed to meet the demands of high-stakes real-world applications, particularly in healthcare and medicine.</p>
<p class="wp-block-paragraph">He is also affiliated with the <span class="lt-line-clamp__raw-line"><a style="pointer-events: none;" href="https://www.ikim.uk-essen.de/de/" target="_blank" rel="noopener">Institut für KI in der Medizin</a></span> (IKIM) at the <a href="https://www.ume.de/">University Medicine Essen</a>, where he previously led the research group <em><span class="lt-line-clamp__raw-line"><a href="http://trustworthyml.de/" target="_blank" rel="noopener"><em>Trustworthy Machine Learning</em></a></span></em>. He continues to collaborate closely with IKIM on cutting-edge medical AI research at the intersection of clinical practice, data privacy, and reliable machine learning.</p>
<p class="wp-block-paragraph">Earlier in his career, Michael was a postdoctoral researcher at the <span class="lt-line-clamp__raw-line"><a style="pointer-events: none;" href="https://cispa.de/de" target="_blank" rel="noopener">CISPA Helmholtz Center for Information Security</a></span> in the <span class="lt-line-clamp__raw-line"><a style="pointer-events: none;" href="https://eda.mmci.uni-saarland.de/" target="_blank" rel="noopener">Exploratory Data Analysis</a> group of <a style="pointer-events: none;" href="https://people.mmci.uni-saarland.de/~jilles/" target="_blank" rel="noopener">Jilles Vreeken</a></span> (2021), and from 2019 to 2021 a postdoctoral fellow at <span class="lt-line-clamp__raw-line"><a href="https://www.monash.edu/it/dsai">Data Science & AI Department</a> at <a style="pointer-events: none;" href="https://research.monash.edu/en/persons/michael-kamp" target="_blank" rel="noopener">Monash University</a> and the <a href="https://www.monash.edu/data-futures-institute">Monash Data Futures Institute</a></span>, where he remained an associated research fellow until 2024. Prior to that, he spent nearly a decade at Fraunhofer IAIS as data scientist, where he led the institute’s contributions to the EU project DiSIEM and headed a small applied research team working at the interface of academic research and industrial deployment. He also advised and trained corporate partners such as Volkswagen and DHL on data-driven innovation.</p>
<p class="wp-block-paragraph">Michael Kamp received his doctorate from the University of Bonn, where he taught graduate seminars and supervised numerous theses. Prior to entering academia, he worked for over a decade as a professional software developer. <span class="lt-line-clamp__raw-line">He is a member of the <a style="pointer-events: none;" href="https://www.springer.com/journal/10994/editors" target="_blank" rel="noopener">editorial board</a> of the</span> Springer journal <a style="pointer-events: none;" href="https://www.springer.com/journal/10994" target="_blank" rel="noopener">Machine Learning</a> and a <a style="pointer-events: none;" href="https://ellis.eu/members" target="_blank" rel="noopener">member</a> of the <a style="pointer-events: none;" href="https://ellis.eu/" target="_blank" rel="noopener">ELLIS society</a>.</p>
<h2 class="wp-block-heading">Awards</h2>
<ul class="wp-block-list">
<li>I received the NeurIPS 2021 <strong>outstanding reviewer award</strong>.</li>
<li>I received a 2021 ICLR <strong>reviewer award</strong>.</li>
<li>Our paper “<a href="https://michaelkamp.org/2020/09/14/resource-constrained-on-device-learning-by-dynamic-averaging-2/">Resource-Constrained On-Device Learning by Dynamic Averaging</a>” won the <strong>Best Paper Award</strong> at the PDFL’20 workshop. Congratulations to Lukas, and our co-authors.</li>
<li>I received the NeurIPS 2019 <strong>best reviewer award</strong>.</li>
<li>I received the ICML 2019 <strong>reviewer award</strong>.</li>
</ul>
<h3 class="wp-block-heading">Latest Blog Posts</h3>
<div class="wp-block-query is-layout-flow wp-block-query-is-layout-flow"><ul class="wp-block-post-template is-layout-flow wp-block-post-template-is-layout-flow"><li class="wp-block-post post-866 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-boosting tag-co-training tag-deep-learning tag-federated-learning tag-machine-learning tag-semi-supervised">
<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:25%"><figure class="wp-block-post-featured-image"><a href="https://michaelkamp.org/?p=866" target="_self" ><img fetchpriority="high" decoding="async" width="620" height="354" src="https://michaelkamp.org/wp-content/uploads/2025/03/headline-image-620x354.webp" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Little is Enough: Boosting Privacy in Federated Learning with Hard Labels" style="object-fit:cover;" srcset="https://michaelkamp.org/wp-content/uploads/2025/03/headline-image-620x354.webp 620w, https://michaelkamp.org/wp-content/uploads/2025/03/headline-image-300x171.webp 300w, https://michaelkamp.org/wp-content/uploads/2025/03/headline-image-1024x585.webp 1024w, https://michaelkamp.org/wp-content/uploads/2025/03/headline-image-768x439.webp 768w, https://michaelkamp.org/wp-content/uploads/2025/03/headline-image-1536x878.webp 1536w, https://michaelkamp.org/wp-content/uploads/2025/03/headline-image.webp 1792w" sizes="(max-width: 620px) 100vw, 620px" /></a></figure></div>
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:75%"><h2 class="wp-block-post-title"><a href="https://michaelkamp.org/?p=866" target="_self" >Little is Enough: Boosting Privacy in Federated Learning with Hard Labels</a></h2></div>
</div>
</li><li class="wp-block-post post-747 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-deep-learning tag-federated-learning tag-linear-mode-connectivity tag-machine-learning">
<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:25%"><figure class="wp-block-post-featured-image"><a href="https://michaelkamp.org/?p=747" target="_self" ><img decoding="async" width="620" height="349" src="https://michaelkamp.org/wp-content/uploads/2024/02/llmc-620x349.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Layer-Wise Linear Mode Connectivity" style="object-fit:cover;" srcset="https://michaelkamp.org/wp-content/uploads/2024/02/llmc-620x349.png 620w, https://michaelkamp.org/wp-content/uploads/2024/02/llmc-300x169.png 300w, https://michaelkamp.org/wp-content/uploads/2024/02/llmc-1024x576.png 1024w, https://michaelkamp.org/wp-content/uploads/2024/02/llmc-768x432.png 768w, https://michaelkamp.org/wp-content/uploads/2024/02/llmc-1536x864.png 1536w, https://michaelkamp.org/wp-content/uploads/2024/02/llmc-2048x1152.png 2048w" sizes="(max-width: 620px) 100vw, 620px" /></a></figure></div>
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:75%"><h2 class="wp-block-post-title"><a href="https://michaelkamp.org/?p=747" target="_self" >Layer-Wise Linear Mode Connectivity</a></h2></div>
</div>
</li><li class="wp-block-post post-338 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-federated-learning tag-health tag-radon-point tag-small-datasets tag-trustworthy">
<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:25%"><figure class="wp-block-post-featured-image"><a href="https://michaelkamp.org/?p=338" target="_self" ><img decoding="async" width="620" height="592" src="https://michaelkamp.org/wp-content/uploads/2023/11/DALL·E-2023-01-21-15.41.59-a-3d-render-of-a-long-and-yellow-daisy-chain-in-front-of-a-glowing-circuit-board-620x592.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Federated Daisy-Chaining" style="object-fit:cover;" srcset="https://michaelkamp.org/wp-content/uploads/2023/11/DALL·E-2023-01-21-15.41.59-a-3d-render-of-a-long-and-yellow-daisy-chain-in-front-of-a-glowing-circuit-board-620x592.png 620w, https://michaelkamp.org/wp-content/uploads/2023/11/DALL·E-2023-01-21-15.41.59-a-3d-render-of-a-long-and-yellow-daisy-chain-in-front-of-a-glowing-circuit-board-300x286.png 300w, https://michaelkamp.org/wp-content/uploads/2023/11/DALL·E-2023-01-21-15.41.59-a-3d-render-of-a-long-and-yellow-daisy-chain-in-front-of-a-glowing-circuit-board-768x733.png 768w, https://michaelkamp.org/wp-content/uploads/2023/11/DALL·E-2023-01-21-15.41.59-a-3d-render-of-a-long-and-yellow-daisy-chain-in-front-of-a-glowing-circuit-board.png 1024w" sizes="(max-width: 620px) 100vw, 620px" /></a></figure></div>
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:75%"><h2 class="wp-block-post-title"><a href="https://michaelkamp.org/?p=338" target="_self" >Federated Daisy-Chaining</a></h2></div>
</div>
</li></ul></div>
<h3 class="wp-block-heading"></h3>
<p class="wp-block-paragraph"></p>
</div><!-- .entry-content -->
</article><!-- #post -->
<div id="comments" class="comments-area">
</div><!-- #comments -->
</div><!-- #content -->
</div><!-- #primary -->
<div id="secondary" class="sidebar-container" role="complementary">
<div class="widget-area">
<aside id="nav_menu-5" class="widget widget_nav_menu"><h4 class="widget-title">Contact</h4><div class="menu-links-container"><ul id="menu-links" class="menu"><li id="menu-item-24" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-24"><a target="_blank" href="mailto:info@michaelkamp.org">E-Mail</a></li>
<li id="menu-item-171" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-171"><a target="_blank" href="https://orcid.org/0000-0001-6231-0694">ORCID</a></li>
<li id="menu-item-887" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-887"><a target="_blank" href="https://scholar.google.de/citations?user=8R5jbvQAAAAJ">Google Scholar</a></li>
<li id="menu-item-158" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-158"><a target="_blank" href="https://dblp.uni-trier.de/pers/hd/k/Kamp:Michael">dblp</a></li>
<li id="menu-item-25" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-25"><a target="_blank" href="https://www.linkedin.com/in/michael-kamp-29096a95/">LinkedIn</a></li>
<li id="menu-item-26" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-26"><a target="_blank" href="https://www.researchgate.net/profile/Michael_Kamp">Research Gate</a></li>
<li id="menu-item-886" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-886"><a target="_blank" href="https://github.com/kampmichael">github</a></li>
<li id="menu-item-27" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-27"><a target="_blank" href="https://bitbucket.org/Michael_Kamp/">bitbucket</a></li>
</ul></div></aside><aside id="media_image-3" class="widget widget_media_image"><img width="282" height="300" src="https://michaelkamp.org/wp-content/uploads/2024/12/michaelkamp_bw_web-1-282x300.png" class="image wp-image-845 attachment-medium size-medium" alt="" style="max-width: 100%; height: auto;" decoding="async" loading="lazy" srcset="https://michaelkamp.org/wp-content/uploads/2024/12/michaelkamp_bw_web-1-282x300.png 282w, https://michaelkamp.org/wp-content/uploads/2024/12/michaelkamp_bw_web-1-963x1024.png 963w, https://michaelkamp.org/wp-content/uploads/2024/12/michaelkamp_bw_web-1-768x817.png 768w, https://michaelkamp.org/wp-content/uploads/2024/12/michaelkamp_bw_web-1-1444x1536.png 1444w, https://michaelkamp.org/wp-content/uploads/2024/12/michaelkamp_bw_web-1-620x660.png 620w, https://michaelkamp.org/wp-content/uploads/2024/12/michaelkamp_bw_web-1.png 1880w" sizes="auto, (max-width: 282px) 100vw, 282px" /></aside> </div><!-- .widget-area -->
</div><!-- #secondary -->
</div><!-- #main -->
<footer id="colophon" class="site-footer" role="contentinfo">
<div class="site-info-container">
<div class="site-info">
Research Group Leader of the <a href="http://trustworthyml.de" title="Trustworthy Machine Learning">Trustworthy Machine Learning</a> group </div><!-- .site-info -->
</div><!-- .site-info-container -->
</footer><!-- #colophon -->
</div><!-- #page -->
<script id="suits-script-js" src="https://michaelkamp.org/wp-content/themes/suits/js/functions.js?ver=2017-09-25"></script>
<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"wpemoji":"https://michaelkamp.org/wp-includes/js/wp-emoji.js?ver=7.1","twemoji":"https://michaelkamp.org/wp-includes/js/twemoji.js?ver=7.1"}}
</script>
<script type="module">
/**
* @output wp-includes/js/wp-emoji-loader.js
*/
/* eslint-env es6 */
// Note: This is loaded as a script module, so there is no need for an IIFE to prevent pollution of the global scope.
/**
* Emoji Settings as exported in PHP via _print_emoji_detection_script().
* @typedef WPEmojiSettings
* @type {object}
* @property {?object} source
* @property {?string} source.concatemoji
* @property {?string} source.twemoji
* @property {?string} source.wpemoji
*/
const selector = 'script#wp-emoji-settings';
const script = document.querySelector( selector );
if ( ! ( script instanceof HTMLScriptElement ) ) {
throw new Error( `Element missing: ${ selector }`);
}
const settings = /** @type {WPEmojiSettings} */ ( JSON.parse( script.text ) );
// For compatibility with other scripts that read from this global, in particular wp-includes/js/wp-emoji.js (source file: js/_enqueues/wp/emoji.js).
window._wpemojiSettings = settings;
/**
* Support tests.
* @typedef SupportTests
* @type {object}
* @property {?boolean} flag
* @property {?boolean} emoji
*/
const sessionStorageKey = 'wpEmojiSettingsSupports';
const tests = [ 'flag', 'emoji' ];
/**
* Checks whether the browser supports offloading to a Worker.
*
* @since 6.3.0
*
* @private
*
* @returns {boolean}
*/
function supportsWorkerOffloading() {
return (
typeof Worker !== 'undefined' &&
typeof OffscreenCanvas !== 'undefined' &&
typeof URL !== 'undefined' &&
URL.createObjectURL &&
typeof Blob !== 'undefined'
);
}
/**
* @typedef SessionSupportTests
* @type {object}
* @property {number} timestamp
* @property {SupportTests} supportTests
*/
/**
* Get support tests from session.
*
* @since 6.3.0
*
* @private
*
* @returns {?SupportTests} Support tests, or null if not set or older than 1 week.
*/
function getSessionSupportTests() {
try {
/** @type {SessionSupportTests} */
const item = JSON.parse(
sessionStorage.getItem( sessionStorageKey )
);
if (
typeof item === 'object' &&
typeof item.timestamp === 'number' &&
new Date().valueOf() < item.timestamp + 604800 && // Note: Number is a week in seconds.
typeof item.supportTests === 'object'
) {
return item.supportTests;
}
} catch ( e ) {}
return null;
}
/**
* Persist the supports in session storage.
*
* @since 6.3.0
*
* @private
*
* @param {SupportTests} supportTests Support tests.
*/
function setSessionSupportTests( supportTests ) {
try {
/** @type {SessionSupportTests} */
const item = {
supportTests: supportTests,
timestamp: new Date().valueOf()
};
sessionStorage.setItem(
sessionStorageKey,
JSON.stringify( item )
);
} catch ( e ) {}
}
/**
* Checks if two sets of Emoji characters render the same visually.
*
* This is used to determine if the browser is rendering an emoji with multiple data points
* correctly. set1 is the emoji in the correct form, using a zero-width joiner. set2 is the emoji
* in the incorrect form, using a zero-width space. If the two sets render the same, then the browser
* does not support the emoji correctly.
*
* This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
* scope. Everything must be passed by parameters.
*
* @since 4.9.0
*
* @private
*
* @param {CanvasRenderingContext2D} context 2D Context.
* @param {string} set1 Set of Emoji to test.
* @param {string} set2 Set of Emoji to test.
*
* @return {boolean} True if the two sets render the same.
*/
function emojiSetsRenderIdentically( context, set1, set2 ) {
// Cleanup from previous test.
context.clearRect( 0, 0, context.canvas.width, context.canvas.height );
context.fillText( set1, 0, 0 );
const rendered1 = new Uint32Array(
context.getImageData(
0,
0,
context.canvas.width,
context.canvas.height
).data
);
// Cleanup from previous test.
context.clearRect( 0, 0, context.canvas.width, context.canvas.height );
context.fillText( set2, 0, 0 );
const rendered2 = new Uint32Array(
context.getImageData(
0,
0,
context.canvas.width,
context.canvas.height
).data
);
return rendered1.every( ( rendered2Data, index ) => {
return rendered2Data === rendered2[ index ];
} );
}
/**
* Checks if the center point of a single emoji is empty.
*
* This is used to determine if the browser is rendering an emoji with a single data point
* correctly. The center point of an incorrectly rendered emoji will be empty. A correctly
* rendered emoji will have a non-zero value at the center point.
*
* This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
* scope. Everything must be passed by parameters.
*
* @since 6.8.2
*
* @private
*
* @param {CanvasRenderingContext2D} context 2D Context.
* @param {string} emoji Emoji to test.
*
* @return {boolean} True if the center point is empty.
*/
function emojiRendersEmptyCenterPoint( context, emoji ) {
// Cleanup from previous test.
context.clearRect( 0, 0, context.canvas.width, context.canvas.height );
context.fillText( emoji, 0, 0 );
// Test if the center point (16, 16) is empty (0,0,0,0).
const centerPoint = context.getImageData(16, 16, 1, 1);
for ( let i = 0; i < centerPoint.data.length; i++ ) {
if ( centerPoint.data[ i ] !== 0 ) {
// Stop checking the moment it's known not to be empty.
return false;
}
}
return true;
}
/**
* Determines if the browser properly renders Emoji that Twemoji can supplement.
*
* This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
* scope. Everything must be passed by parameters.
*
* @since 4.2.0
*
* @private
*
* @param {CanvasRenderingContext2D} context 2D Context.
* @param {string} type Whether to test for support of "flag" or "emoji".
* @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification.
* @param {Function} emojiRendersEmptyCenterPoint Reference to emojiRendersEmptyCenterPoint function, needed due to minification.
*
* @return {boolean} True if the browser can render emoji, false if it cannot.
*/
function browserSupportsEmoji( context, type, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint ) {
let isIdentical;
switch ( type ) {
case 'flag':
/*
* Test for Transgender flag compatibility. Added in Unicode 13.
*
* To test for support, we try to render it, and compare the rendering to how it would look if
* the browser doesn't render it correctly (white flag emoji + transgender symbol).
*/
isIdentical = emojiSetsRenderIdentically(
context,
'\uD83C\uDFF3\uFE0F\u200D\u26A7\uFE0F', // as a zero-width joiner sequence
'\uD83C\uDFF3\uFE0F\u200B\u26A7\uFE0F' // separated by a zero-width space
);
if ( isIdentical ) {
return false;
}
/*
* Test for Sark flag compatibility. This is the least supported of the letter locale flags,
* so gives us an easy test for full support.
*
* To test for support, we try to render it, and compare the rendering to how it would look if
* the browser doesn't render it correctly ([C] + [Q]).
*/
isIdentical = emojiSetsRenderIdentically(
context,
'\uD83C\uDDE8\uD83C\uDDF6', // as the sequence of two code points
'\uD83C\uDDE8\u200B\uD83C\uDDF6' // as the two code points separated by a zero-width space
);
if ( isIdentical ) {
return false;
}
/*
* Test for English flag compatibility. England is a country in the United Kingdom, it
* does not have a two letter locale code but rather a five letter sub-division code.
*
* To test for support, we try to render it, and compare the rendering to how it would look if
* the browser doesn't render it correctly (black flag emoji + [G] + [B] + [E] + [N] + [G]).
*/
isIdentical = emojiSetsRenderIdentically(
context,
// as the flag sequence
'\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F',
// with each code point separated by a zero-width space
'\uD83C\uDFF4\u200B\uDB40\uDC67\u200B\uDB40\uDC62\u200B\uDB40\uDC65\u200B\uDB40\uDC6E\u200B\uDB40\uDC67\u200B\uDB40\uDC7F'
);
return ! isIdentical;
case 'emoji':
/*
* Is there a large, hairy, humanoid mythical creature living in the browser?
*
* To test for Emoji 17.0 support, try to render a new emoji: Hairy Creature.
*
* The hairy creature emoji is a single code point emoji. Testing for browser
* support required testing the center point of the emoji to see if it is empty.
*
* 0xD83E 0x1FAC8 (\uD83E\u1FAC8) == Hairy creature.
*
* When updating this test, please ensure that the emoji is either a single code point
* or switch to using the emojiSetsRenderIdentically function and testing with a zero-width
* joiner vs a zero-width space.
*/
const notSupported = emojiRendersEmptyCenterPoint( context, '\uD83E\u1FAC8' );
return ! notSupported;
}
return false;
}
/**
* Checks emoji support tests.
*
* This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
* scope. Everything must be passed by parameters.
*
* @since 6.3.0
*
* @private
*
* @param {string[]} tests Tests.
* @param {Function} browserSupportsEmoji Reference to browserSupportsEmoji function, needed due to minification.
* @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification.
* @param {Function} emojiRendersEmptyCenterPoint Reference to emojiRendersEmptyCenterPoint function, needed due to minification.
*
* @return {SupportTests} Support tests.
*/
function testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint ) {
let canvas;
if (
typeof WorkerGlobalScope !== 'undefined' &&
self instanceof WorkerGlobalScope
) {
canvas = new OffscreenCanvas( 300, 150 ); // Dimensions are default for HTMLCanvasElement.
} else {
canvas = document.createElement( 'canvas' );
}
const context = canvas.getContext( '2d', { willReadFrequently: true } );
/*
* Chrome on OS X added native emoji rendering in M41. Unfortunately,
* it doesn't work when the font is bolder than 500 weight. So, we
* check for bold rendering support to avoid invisible emoji in Chrome.
*/
context.textBaseline = 'top';
context.font = '600 32px Arial';
const supports = {};
tests.forEach( ( test ) => {
supports[ test ] = browserSupportsEmoji( context, test, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint );
} );
return supports;
}
/**
* Adds a script to the head of the document.
*
* @ignore
*
* @since 4.2.0
*
* @param {string} src The url where the script is located.
*
* @return {void}
*/
function addScript( src ) {
const script = document.createElement( 'script' );
script.src = src;
script.defer = true;
document.head.appendChild( script );
}
settings.supports = {
everything: true,
everythingExceptFlag: true
};
// Obtain the emoji support from the browser, asynchronously when possible.
new Promise( ( resolve ) => {
let supportTests = getSessionSupportTests();
if ( supportTests ) {
resolve( supportTests );
return;
}
if ( supportsWorkerOffloading() ) {
try {
// Note that the functions are being passed as arguments due to minification.
const workerScript =
'postMessage(' +
testEmojiSupports.toString() +
'(' +
[
JSON.stringify( tests ),
browserSupportsEmoji.toString(),
emojiSetsRenderIdentically.toString(),
emojiRendersEmptyCenterPoint.toString()
].join( ',' ) +
'));';
const blob = new Blob( [ workerScript ], {
type: 'text/javascript'
} );
const worker = new Worker( URL.createObjectURL( blob ), { name: 'wpTestEmojiSupports' } );
worker.onmessage = ( event ) => {
supportTests = event.data;
setSessionSupportTests( supportTests );
worker.terminate();
resolve( supportTests );
};
return;
} catch ( e ) {}
}
supportTests = testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint );
setSessionSupportTests( supportTests );
resolve( supportTests );
} )
// Once the browser emoji support has been obtained from the session, finalize the settings.
.then( ( supportTests ) => {
/*
* Tests the browser support for flag emojis and other emojis, and adjusts the
* support settings accordingly.
*/
for ( const test in supportTests ) {
settings.supports[ test ] = supportTests[ test ];
settings.supports.everything =
settings.supports.everything && settings.supports[ test ];
if ( 'flag' !== test ) {
settings.supports.everythingExceptFlag =
settings.supports.everythingExceptFlag &&
settings.supports[ test ];
}
}
settings.supports.everythingExceptFlag =
settings.supports.everythingExceptFlag &&
! settings.supports.flag;
// When the browser can not render everything we need to load a polyfill.
if ( ! settings.supports.everything ) {
const src = settings.source || {};
if ( src.concatemoji ) {
addScript( src.concatemoji );
} else if ( src.wpemoji && src.twemoji ) {
addScript( src.twemoji );
addScript( src.wpemoji );
}
}
} );
//# sourceURL=https://michaelkamp.org/wp-includes/js/wp-emoji-loader.js
</script>
</body>
</html>
Sitemap
Кол-во: 0
XML-карта сайта для поисковиков
?
Sitemap.xml помогает поисковику быстрее находить и индексировать страницы. Особенно важен для крупных сайтов и новых страниц, на которые ещё нет входящих ссылок.
Robots.txt не содержит ссылку на карту сайта. Рекомендуется добавить карту сайта и указать ссылку на нее в robots.txt.
Внутренние ссылки
Кол-во: 13
Ссылки на другие страницы своего сайта
?
Внутренние ссылки распределяют ссылочный вес между страницами и помогают поисковику обходить сайт. Пустые анкоры и ссылки на запрещённые robots.txt страницы — типичные ошибки.
Внутренних ссылок на странице 13 оптимально.
Внутренние ссылки не запрещены к индексации в robots.txt.
На странице присутствуют изображения 3.
Показать внутренние ссылки
| Url | Анкор | Состояние | Анализировать |
|---|---|---|---|
| / |
Michael Kamp
|
|
Анализировать url |
| / |
Home
|
|
Анализировать url |
| /?cat=9 |
Blog
|
|
Анализировать url |
| /?page_id=37 |
Publications
|
|
Анализировать url |
| /?cat=4 |
Publication List
|
|
Анализировать url |
| /?page_id=61 |
People
|
|
Анализировать url |
| /?page_id=58 |
Software
|
|
Анализировать url |
| /?page_id=90 |
Talks and Events
|
|
Анализировать url |
| /?page_id=9 |
Publishing Notes
|
|
Анализировать url |
| /2020/09/14/resource-constrained-on-device-learning-by-dynamic-averaging-2/ |
Resource-Constrained On-Device Learning by Dynamic Averaging
|
|
Анализировать url |
| /?p=866 |
Little is Enough: Boosting Privacy in Federated Learning with Hard Labels
|
|
Анализировать url |
| /?p=747 |
Layer-Wise Linear Mode Connectivity
|
|
Анализировать url |
| /?p=338 |
Federated Daisy-Chaining
|
|
Анализировать url |
Внешние ссылки
Кол-во: 53
Ссылки на сторонние сайты
?
Исходящие внешние ссылки передают часть ссылочного веса на чужие сайты. Ссылки на авторитетные ресурсы безопасны; ссылки на мусорные сайты могут навредить репутации страницы.
Внешних ссылок на странице 53 слишком много. Спрячьте лишние ссылки в тег noindex или атрибут rel='nofollow'!
Показать внешние ссылки
| Url | Анкор | Анализировать |
|---|---|---|
| lamarr-institute.org |
Lamarr Institute for Machine Learning and Artificial Intelligence
|
Анализировать url |
| ikim.uk-essen.de |
Institute for Artificial Intelligence in Medicine
|
Анализировать url |
| ume.de |
University Medicine Essen
|
Анализировать url |
| uaruhr.de |
UA Ruhr
|
Анализировать url |
| en.wikipedia.org |
Erdős number
|
Анализировать url |
| csauthors.net |
4
|
Анализировать url |
| aaai.org |
AAAI
|
Анализировать url |
| aaai.org |
Outstanding Paper Award 2026
|
Анализировать url |
| arxiv.org |
Causal Structure Learning for Dynamical Systems with Theoretical Score Analysis
|
Анализировать url |
| flipit-research.network |
FLIP-IT
|
Анализировать url |
| ki.nrw |
KI.NRW
|
Анализировать url |
| efre.nrw |
EFRE
|
Анализировать url |
| journals.lww.com |
models for chronic kidney disease
|
Анализировать url |
| scholar.google.de |
Ting Han
|
Анализировать url |
| scholar.google.de |
Linara Adilova
|
Анализировать url |
| scholar.google.de |
Henning Petzka
|
Анализировать url |
| scholar.google.de |
Jens Kleesiek
|
Анализировать url |
| arxiv.org |
Flatness is Necessary, Neural Collapse is Not: Rethinking Generalization via Grokking
|
Анализировать url |
| neurips.cc |
NeurIPS 2025
|
Анализировать url |
| portal.core.edu.au |
A*, top 7%
|
Анализировать url |
| scholar.google.com |
Linara Adilova
|
Анализировать url |
| alpha.di.unito.it |
Bruno Casella
|
Анализировать url |
| alpha.di.unito.it |
Samuele Fonio
|
Анализировать url |
| makgyver.github.io |
Mirko Polato
|
Анализировать url |
| aaai.org |
AAAI, 2026
|
Анализировать url |
| lamarr-institute.org |
Lamarr Institute for Machine Learning and Artificial Intelligence
|
Анализировать url |
| aaai.org |
AAAI 2025
|
Анализировать url |
| portal.core.edu.au |
A*, top 7%
|
Анализировать url |
| arxiv.org |
Little is Enough: Boosting Privacy by Sharing Only Hard Labels in Federated Semi-Supervised Learning
|
Анализировать url |
| arxiv.org |
Federated Binary Matrix Factorization using Proximal Optimization
|
Анализировать url |
| tu-dortmund.de |
TU Dortmund
|
Анализировать url |
| lamarr-institute.org |
Lamarr Institute for Machine Learning and Artificial Intelligence
|
Анализировать url |
| ikim.uk-essen.de |
Institut für KI in der Medizin
|
Анализировать url |
| ume.de |
University Medicine Essen
|
Анализировать url |
| trustworthyml.de |
<em>Trustworthy Machine Learning</em>
|
Анализировать url |
| cispa.de |
CISPA Helmholtz Center for Information Security
|
Анализировать url |
| eda.mmci.uni-saarland.de |
Exploratory Data Analysis
|
Анализировать url |
| people.mmci.uni-saarland.de |
Jilles Vreeken
|
Анализировать url |
| monash.edu |
Data Science & AI Department
|
Анализировать url |
| research.monash.edu |
Monash University
|
Анализировать url |
| monash.edu |
Monash Data Futures Institute
|
Анализировать url |
| springer.com |
editorial board
|
Анализировать url |
| springer.com |
Machine Learning
|
Анализировать url |
| ellis.eu |
member
|
Анализировать url |
| ellis.eu |
ELLIS society
|
Анализировать url |
| orcid.org |
ORCID
|
Анализировать url |
| scholar.google.de |
Google Scholar
|
Анализировать url |
| dblp.uni-trier.de |
dblp
|
Анализировать url |
| linkedin.com |
LinkedIn
|
Анализировать url |
| researchgate.net |
Research Gate
|
Анализировать url |
| github.com |
github
|
Анализировать url |
| bitbucket.org |
bitbucket
|
Анализировать url |
| trustworthyml.de |
Trustworthy Machine Learning
|
Анализировать url |
Конкуренты Готовность: 0%
Конкуренты в Яндексе
Кол-во: 0
Топ сайтов-конкурентов в Яндексе
?
Сайты, чаще всего появляющиеся в ТОПе Яндекса по запросам из семантического ядра этой страницы.
Мы не нашли у вас конкурентов в Яндексе. Сайт или очень молодой или плохо продвигается.
Конкурентов в ТОП-10 Яндекса не нашлось.
Конкуренты в Google
Кол-во: 0
Топ сайтов-конкурентов в Google
?
Сайты, чаще всего появляющиеся в ТОПе Google по запросам из семантического ядра этой страницы.
Конкуренты в Google тоже не найдены. Займитесь продвижением сайта!
Конкурентов в ТОП-10 Google не нашлось.
ЗоЗПП: права потребителей Готовность: 100%
Нарушения
Не выявлены
Признаков дистанционной продажи товаров (интернет-магазина) не обнаружено — требования ЗоЗПП о раскрытии информации продавца к сайту не применяются. Нарушений нет.
ФЗ-149: рекомендательные технологии Готовность: 100%
Нарушения
Не выявлены
Рекомендательные блоки («с этим покупают», «похожие товары» и т.п.) на сайте не обнаружены — требования ст. 10.7 ФЗ-149 к сайту не применяются. Нарушений нет.
ФЗ-38: реклама Готовность: 100%
Нарушения
Не выявлены
Рекламных тематик с обязательными оговорками (медицина, БАД, кредиты и займы, новостройки) на сайте не обнаружено. Нарушений нет.
ФЗ-436: защита детей Готовность: 100%
Нарушения
Не выявлены
Признаков информационной продукции (новости, видео, книги, игры, курсы) не обнаружено — обязательная возрастная маркировка по ФЗ-436 сайту не требуется. Нарушений нет.
Вердикт
Таким сайт https://michaelkamp.org/ видят поисковые системы. Процент оптимизации невысокий - 48%. Чтобы улучшить сайт и попасть в ТОП необходимо:
Исправьте ошибки в мета-тегах.
Исправьте ошибки оптимизации.
Исправьте ошибки индексации.
Поделитесь с друзьями: